You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
jumpserver/apps/assets/const/protocol.py

147 lines
3.9 KiB

from django.db import models
from common.db.models import ChoicesMixin
__all__ = ['Protocol']
class Protocol(ChoicesMixin, models.TextChoices):
ssh = 'ssh', 'SSH'
rdp = 'rdp', 'RDP'
telnet = 'telnet', 'Telnet'
vnc = 'vnc', 'VNC'
winrm = 'winrm', 'WinRM'
mysql = 'mysql', 'MySQL'
mariadb = 'mariadb', 'MariaDB'
oracle = 'oracle', 'Oracle'
postgresql = 'postgresql', 'PostgreSQL'
sqlserver = 'sqlserver', 'SQLServer'
clickhouse = 'clickhouse', 'ClickHouse'
redis = 'redis', 'Redis'
mongodb = 'mongodb', 'MongoDB'
k8s = 'k8s', 'K8S'
http = 'http', 'HTTP'
_settings = None
@classmethod
def device_protocols(cls):
return {
cls.ssh: {
'port': 22,
'secret_types': ['password', 'ssh_key'],
'setting': {
'sftp_enabled': True,
'sftp_home': '/tmp',
}
},
cls.rdp: {
'port': 3389,
'secret_types': ['password'],
'setting': {
'console': False,
'security': 'any',
}
},
cls.vnc: {
'port': 5900,
'secret_types': ['password'],
},
cls.telnet: {
'port': 23,
'secret_types': ['password'],
},
cls.winrm: {
'port': 5985,
'secret_types': ['password'],
'setting': {
'use_ssl': False,
}
},
}
@classmethod
def database_protocols(cls):
return {
cls.mysql: {
'port': 3306,
'setting': {},
'required': True,
'secret_types': ['password'],
},
cls.mariadb: {
'port': 3306,
'required': True,
'secret_types': ['password'],
},
cls.postgresql: {
'port': 5432,
'required': True,
'secret_types': ['password'],
},
cls.oracle: {
'port': 1521,
'required': True,
'secret_types': ['password'],
},
cls.sqlserver: {
'port': 1433,
'required': True,
'secret_types': ['password'],
},
cls.clickhouse: {
'port': 9000,
'required': True,
'secret_types': ['password'],
},
cls.mongodb: {
'port': 27017,
'required': True,
'secret_types': ['password'],
},
cls.redis: {
'port': 6379,
'required': True,
'secret_types': ['password'],
'setting': {
'auth_username': True,
}
},
}
@classmethod
def cloud_protocols(cls):
return {
cls.k8s: {
'port': 443,
'required': True,
'secret_types': ['token'],
},
cls.http: {
'port': 80,
'secret_types': ['password'],
'setting': {
'username_selector': 'name=username',
'password_selector': 'name=password',
'submit_selector': 'id=login_button',
}
},
}
@classmethod
def settings(cls):
return {
**cls.device_protocols(),
**cls.database_protocols(),
**cls.cloud_protocols()
}
@classmethod
def protocol_secret_types(cls):
settings = cls.settings()
return {
protocol: settings[protocol]['secret_types'] or ['password']
for protocol in cls.settings()
}