mirror of https://github.com/jumpserver/jumpserver
perf: 优化协议,支持 port from addr
parent
41e39c9614
commit
8dbe61100b
|
@ -56,7 +56,7 @@ class BaseType(TextChoices):
|
||||||
for k, v in cls.get_choices():
|
for k, v in cls.get_choices():
|
||||||
tp_base = {**base_default, **base.get(k, {})}
|
tp_base = {**base_default, **base.get(k, {})}
|
||||||
tp_auto = {**automation_default, **automation.get(k, {})}
|
tp_auto = {**automation_default, **automation.get(k, {})}
|
||||||
tp_protocols = {**protocols_default, **protocols.get(k, {})}
|
tp_protocols = {**protocols_default, **{'port_from_addr': False}, **protocols.get(k, {})}
|
||||||
tp_protocols = cls._parse_protocols(tp_protocols, k)
|
tp_protocols = cls._parse_protocols(tp_protocols, k)
|
||||||
tp_constrains = {**tp_base, 'protocols': tp_protocols, 'automation': tp_auto}
|
tp_constrains = {**tp_base, 'protocols': tp_protocols, 'automation': tp_auto}
|
||||||
constrains[k] = tp_constrains
|
constrains[k] = tp_constrains
|
||||||
|
|
|
@ -2,6 +2,7 @@ from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from common.db.models import ChoicesMixin
|
from common.db.models import ChoicesMixin
|
||||||
|
from common.decorators import cached_method
|
||||||
from .base import FillType
|
from .base import FillType
|
||||||
|
|
||||||
__all__ = ['Protocol']
|
__all__ = ['Protocol']
|
||||||
|
@ -150,11 +151,13 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
||||||
return {
|
return {
|
||||||
cls.k8s: {
|
cls.k8s: {
|
||||||
'port': 443,
|
'port': 443,
|
||||||
|
'port_from_addr': True,
|
||||||
'required': True,
|
'required': True,
|
||||||
'secret_types': ['token'],
|
'secret_types': ['token'],
|
||||||
},
|
},
|
||||||
cls.http: {
|
cls.http: {
|
||||||
'port': 80,
|
'port': 80,
|
||||||
|
'port_from_addr': True,
|
||||||
'secret_types': ['password'],
|
'secret_types': ['password'],
|
||||||
'setting': {
|
'setting': {
|
||||||
'autofill': {
|
'autofill': {
|
||||||
|
@ -187,6 +190,7 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
||||||
cls.chatgpt: {
|
cls.chatgpt: {
|
||||||
'port': 443,
|
'port': 443,
|
||||||
'required': True,
|
'required': True,
|
||||||
|
'port_from_addr': True,
|
||||||
'secret_types': ['api_key'],
|
'secret_types': ['api_key'],
|
||||||
'setting': {
|
'setting': {
|
||||||
'api_mode': {
|
'api_mode': {
|
||||||
|
@ -205,6 +209,7 @@ class Protocol(ChoicesMixin, models.TextChoices):
|
||||||
}
|
}
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
@cached_method(ttl=600)
|
||||||
def settings(cls):
|
def settings(cls):
|
||||||
return {
|
return {
|
||||||
**cls.device_protocols(),
|
**cls.device_protocols(),
|
||||||
|
|
|
@ -8,6 +8,8 @@ from common.db.models import JMSBaseModel
|
||||||
|
|
||||||
__all__ = ['Platform', 'PlatformProtocol', 'PlatformAutomation']
|
__all__ = ['Platform', 'PlatformProtocol', 'PlatformAutomation']
|
||||||
|
|
||||||
|
from common.utils import lazyproperty
|
||||||
|
|
||||||
|
|
||||||
class PlatformProtocol(models.Model):
|
class PlatformProtocol(models.Model):
|
||||||
name = models.CharField(max_length=32, verbose_name=_('Name'))
|
name = models.CharField(max_length=32, verbose_name=_('Name'))
|
||||||
|
@ -26,6 +28,11 @@ class PlatformProtocol(models.Model):
|
||||||
def secret_types(self):
|
def secret_types(self):
|
||||||
return Protocol.settings().get(self.name, {}).get('secret_types', ['password'])
|
return Protocol.settings().get(self.name, {}).get('secret_types', ['password'])
|
||||||
|
|
||||||
|
@lazyproperty
|
||||||
|
def port_from_addr(self):
|
||||||
|
from assets.const.protocol import Protocol as ProtocolConst
|
||||||
|
return ProtocolConst.settings().get(self.name, {}).get('port_from_addr', False)
|
||||||
|
|
||||||
|
|
||||||
class PlatformAutomation(models.Model):
|
class PlatformAutomation(models.Model):
|
||||||
ansible_enabled = models.BooleanField(default=False, verbose_name=_("Enabled"))
|
ansible_enabled = models.BooleanField(default=False, verbose_name=_("Enabled"))
|
||||||
|
|
|
@ -46,13 +46,13 @@ class PlatformAutomationSerializer(serializers.ModelSerializer):
|
||||||
|
|
||||||
class PlatformProtocolSerializer(serializers.ModelSerializer):
|
class PlatformProtocolSerializer(serializers.ModelSerializer):
|
||||||
setting = MethodSerializer(required=False, label=_("Setting"))
|
setting = MethodSerializer(required=False, label=_("Setting"))
|
||||||
|
port_from_addr = serializers.BooleanField(label=_("Port from addr"), read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = PlatformProtocol
|
model = PlatformProtocol
|
||||||
fields = [
|
fields = [
|
||||||
"id", "name", "port", "primary",
|
"id", "name", "port", "port_from_addr", "primary",
|
||||||
"required", "default", "public",
|
"required", "default", "public", "secret_types", "setting",
|
||||||
"secret_types", "setting",
|
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
"primary": {
|
"primary": {
|
||||||
|
|
Loading…
Reference in New Issue