diff --git a/apps/assets/migrations/0112_gateway_to_asset.py b/apps/assets/migrations/0112_gateway_to_asset.py index da43b3a84..67c874761 100644 --- a/apps/assets/migrations/0112_gateway_to_asset.py +++ b/apps/assets/migrations/0112_gateway_to_asset.py @@ -1,6 +1,7 @@ # Generated by Django 3.2.13 on 2022-09-29 11:03 from django.db import migrations + from assets.const.host import GATEWAY_NAME @@ -70,4 +71,18 @@ class Migration(migrations.Migration): operations = [ migrations.RunPython(migrate_gateway_to_asset), + migrations.DeleteModel( + name='Gateway', + ), + migrations.CreateModel( + name='Gateway', + fields=[ + ], + options={ + 'proxy': True, + 'indexes': [], + 'constraints': [], + }, + bases=('assets.host',), + ), ] diff --git a/apps/assets/migrations/0113_alter_accounttemplate_options.py b/apps/assets/migrations/0113_alter_accounttemplate_options.py index e635426c1..9488b5499 100644 --- a/apps/assets/migrations/0113_alter_accounttemplate_options.py +++ b/apps/assets/migrations/0113_alter_accounttemplate_options.py @@ -1,10 +1,9 @@ # Generated by Django 3.2.14 on 2022-11-28 10:39 -from django.db import migrations +from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('assets', '0112_gateway_to_asset'), ] @@ -12,6 +11,33 @@ class Migration(migrations.Migration): operations = [ migrations.AlterModelOptions( name='accounttemplate', - options={'permissions': [('view_accounttemplatesecret', 'Can view asset account template secret'), ('change_accounttemplatesecret', 'Can change asset account template secret')], 'verbose_name': 'Account template'}, + options={'permissions': [('view_accounttemplatesecret', 'Can view asset account template secret'), + ('change_accounttemplatesecret', 'Can change asset account template secret')], + 'verbose_name': 'Account template'}, + ), + migrations.AddField( + model_name='database', + name='allow_invalid_cert', + field=models.BooleanField(default=False, verbose_name='Allow invalid cert'), + ), + migrations.AddField( + model_name='database', + name='ca_cert', + field=models.TextField(blank=True, verbose_name='CA cert'), + ), + migrations.AddField( + model_name='database', + name='client_cert', + field=models.TextField(blank=True, verbose_name='Client cert'), + ), + migrations.AddField( + model_name='database', + name='client_key', + field=models.TextField(blank=True, verbose_name='Client key'), + ), + migrations.AddField( + model_name='database', + name='use_ssl', + field=models.BooleanField(default=False, verbose_name='Use SSL'), ), ] diff --git a/apps/assets/migrations/0114_node_domain.py b/apps/assets/migrations/0114_node_domain.py index 0149a5d11..1abcde400 100644 --- a/apps/assets/migrations/0114_node_domain.py +++ b/apps/assets/migrations/0114_node_domain.py @@ -1,14 +1,37 @@ # Generated by Django 3.2.14 on 2022-11-29 05:14 from django.db import migrations, models -import django.db.models.deletion -# TODO 最后去掉这个迁移 class Migration(migrations.Migration): dependencies = [ ('assets', '0113_alter_accounttemplate_options'), ] operations = [ + migrations.AddField( + model_name='database', + name='allow_invalid_cert', + field=models.BooleanField(default=False, verbose_name='Allow invalid cert'), + ), + migrations.AddField( + model_name='database', + name='ca_cert', + field=models.TextField(blank=True, verbose_name='CA cert'), + ), + migrations.AddField( + model_name='database', + name='client_cert', + field=models.TextField(blank=True, verbose_name='Client cert'), + ), + migrations.AddField( + model_name='database', + name='client_key', + field=models.TextField(blank=True, verbose_name='Client key'), + ), + migrations.AddField( + model_name='database', + name='use_ssl', + field=models.BooleanField(default=False, verbose_name='Use SSL'), + ), ] diff --git a/apps/assets/migrations/0115_auto_20221130_1118.py b/apps/assets/migrations/0115_auto_20221130_1118.py deleted file mode 100644 index 3d5fc9b20..000000000 --- a/apps/assets/migrations/0115_auto_20221130_1118.py +++ /dev/null @@ -1,38 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-30 03:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0114_node_domain'), - ] - - operations = [ - migrations.AddField( - model_name='database', - name='allow_invalid_cert', - field=models.BooleanField(default=False, verbose_name='Allow invalid cert'), - ), - migrations.AddField( - model_name='database', - name='ca_cert', - field=models.TextField(blank=True, verbose_name='CA cert'), - ), - migrations.AddField( - model_name='database', - name='client_cert', - field=models.TextField(blank=True, verbose_name='Client cert'), - ), - migrations.AddField( - model_name='database', - name='client_key', - field=models.TextField(blank=True, verbose_name='Client key'), - ), - migrations.AddField( - model_name='database', - name='use_ssl', - field=models.BooleanField(default=False, verbose_name='Use SSL'), - ), - ] diff --git a/apps/assets/migrations/0116_delete_gateway.py b/apps/assets/migrations/0116_delete_gateway.py deleted file mode 100644 index 9ccb1c1b7..000000000 --- a/apps/assets/migrations/0116_delete_gateway.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.2.14 on 2022-12-01 07:08 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0115_auto_20221130_1118'), - ] - - operations = [ - migrations.DeleteModel( - name='Gateway', - ), - ] diff --git a/apps/assets/migrations/0117_gateway.py b/apps/assets/migrations/0117_gateway.py deleted file mode 100644 index 6bf8ce138..000000000 --- a/apps/assets/migrations/0117_gateway.py +++ /dev/null @@ -1,24 +0,0 @@ -# Generated by Django 3.2.14 on 2022-12-01 07:21 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('assets', '0116_delete_gateway'), - ] - - operations = [ - migrations.CreateModel( - name='Gateway', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('assets.host',), - ), - ] diff --git a/apps/assets/serializers/asset/common.py b/apps/assets/serializers/asset/common.py index 179760922..0fd9e9e8a 100644 --- a/apps/assets/serializers/asset/common.py +++ b/apps/assets/serializers/asset/common.py @@ -53,7 +53,7 @@ class AssetAccountSerializer(AccountSerializer): 'version', 'secret_type', ] fields_write_only = [ - 'secret', 'push_now' + 'secret', 'push_now' ] fields = fields_mini + fields_write_only @@ -67,10 +67,11 @@ class AssetSerializer(OrgResourceSerializerMixin, WritableNestedModelSerializer) labels = AssetLabelSerializer(many=True, required=False, label=_('Labels')) protocols = AssetProtocolsSerializer(many=True, required=False, label=_('Protocols')) accounts = AssetAccountSerializer(many=True, required=False, label=_('Accounts')) + automation_enabled_info = serializers.SerializerMethodField() class Meta: model = Asset - fields_mini = ['id', 'name', 'address'] + fields_mini = ['id', 'name', 'address', 'automation_enabled_info'] fields_small = fields_mini + ['is_active', 'comment'] fields_fk = ['domain', 'platform', 'platform'] fields_m2m = [ @@ -78,8 +79,8 @@ class AssetSerializer(OrgResourceSerializerMixin, WritableNestedModelSerializer) ] read_only_fields = [ 'category', 'type', 'specific', 'info', - 'connectivity', 'date_verified', - 'created_by', 'date_created', + 'connectivity', 'date_verified', 'created_by', + 'date_created' ] fields = fields_small + fields_fk + fields_m2m + read_only_fields extra_kwargs = { @@ -93,6 +94,19 @@ class AssetSerializer(OrgResourceSerializerMixin, WritableNestedModelSerializer) names.remove('specific') return names + @staticmethod + def get_automation_enabled_info(obj): + automation = obj.platform.automation + return { + 'ping_enabled': automation.ping_enabled, + 'ansible_enabled': automation.ansible_enabled, + 'gather_facts_enabled': automation.gather_facts_enabled, + 'push_account_enabled': automation.push_account_enabled, + 'change_secret_enabled': automation.change_secret_enabled, + 'verify_account_enabled': automation.verify_account_enabled, + 'gather_accounts_enabled': automation.gather_accounts_enabled, + } + @classmethod def setup_eager_loading(cls, queryset): """ Perform necessary eager loading of data. """ diff --git a/apps/assets/serializers/platform.py b/apps/assets/serializers/platform.py index 8f8dcb5a3..ccb536bb2 100644 --- a/apps/assets/serializers/platform.py +++ b/apps/assets/serializers/platform.py @@ -38,6 +38,7 @@ class ProtocolSettingSerializer(serializers.Serializer): class PlatformAutomationSerializer(serializers.ModelSerializer): + class Meta: model = PlatformAutomation fields = [ diff --git a/apps/authentication/api/connection_token.py b/apps/authentication/api/connection_token.py index e9df9d33b..97ef3b5ff 100644 --- a/apps/authentication/api/connection_token.py +++ b/apps/authentication/api/connection_token.py @@ -278,7 +278,7 @@ class ConnectionTokenViewSet(ExtraActionApiMixin, RootOrgViewMixin, JMSModelView data = serializer.validated_data user = self.get_user(serializer) asset = data.get('asset') - account_name = data.get('account_name') + account_name = data.get('account') data['org_id'] = asset.org_id data['user'] = user data['value'] = random_string(16) diff --git a/apps/authentication/migrations/0013_connectiontoken_protocol.py b/apps/authentication/migrations/0013_connectiontoken_protocol.py index f6e310e24..3ba4785b0 100644 --- a/apps/authentication/migrations/0013_connectiontoken_protocol.py +++ b/apps/authentication/migrations/0013_connectiontoken_protocol.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('authentication', '0012_auto_20220816_1629'), ] @@ -13,6 +12,6 @@ class Migration(migrations.Migration): migrations.AddField( model_name='connectiontoken', name='protocol', - field=models.CharField(choices=[('ssh', 'SSH'), ('rdp', 'RDP'), ('telnet', 'Telnet'), ('vnc', 'VNC'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('oracle', 'Oracle'), ('postgresql', 'PostgreSQL'), ('sqlserver', 'SQLServer'), ('redis', 'Redis'), ('mongodb', 'MongoDB'), ('k8s', 'K8S'), ('http', 'HTTP'), ('None', ' Settings')], default='ssh', max_length=16, verbose_name='Protocol'), + field=models.CharField(default='ssh', max_length=16, verbose_name='Protocol'), ), ] diff --git a/apps/authentication/migrations/0014_auto_20221122_2152.py b/apps/authentication/migrations/0014_auto_20221122_2152.py index b198295a5..483b6d5f0 100644 --- a/apps/authentication/migrations/0014_auto_20221122_2152.py +++ b/apps/authentication/migrations/0014_auto_20221122_2152.py @@ -1,11 +1,11 @@ # Generated by Django 3.2.14 on 2022-11-22 13:52 -import common.db.fields from django.db import migrations, models +import common.db.fields + class Migration(migrations.Migration): - dependencies = [ ('authentication', '0013_connectiontoken_protocol'), ] @@ -14,21 +14,38 @@ class Migration(migrations.Migration): migrations.RenameField( model_name='connectiontoken', old_name='account_username', - new_name='login' + new_name='account_name' ), migrations.AlterField( model_name='connectiontoken', - name='login', - field=models.CharField(max_length=128, verbose_name='Login account'), + name='account_name', + field=models.CharField(max_length=128, verbose_name='Account name'), ), migrations.AddField( model_name='connectiontoken', - name='username', - field=models.CharField(default='', max_length=128, verbose_name='Username'), + name='input_username', + field=models.CharField(blank=True, default='', max_length=128, verbose_name='Input username'), + ), + migrations.AddField( + model_name='connectiontoken', + name='input_secret', + field=common.db.fields.EncryptCharField(blank=True, default='', max_length=128, + verbose_name='Input secret'), + ), + migrations.RenameField( + model_name='connectiontoken', + old_name='secret', + new_name='value', ), migrations.AlterField( model_name='connectiontoken', - name='secret', - field=common.db.fields.EncryptCharField(default='', max_length=128, verbose_name='Secret'), + name='value', + field=models.CharField(default='', max_length=64, verbose_name='Value'), + ), + migrations.AddField( + model_name='connectiontoken', + name='connect_method', + field=models.CharField(default='web_ui', max_length=32, verbose_name='Connect method'), + preserve_default=False, ), ] diff --git a/apps/authentication/migrations/0015_alter_connectiontoken_login.py b/apps/authentication/migrations/0015_alter_connectiontoken_login.py deleted file mode 100644 index f2c6abecb..000000000 --- a/apps/authentication/migrations/0015_alter_connectiontoken_login.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-23 02:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('authentication', '0014_auto_20221122_2152'), - ] - - operations = [ - migrations.AlterField( - model_name='connectiontoken', - name='login', - field=models.CharField(max_length=128, verbose_name='Login account'), - ), - ] diff --git a/apps/authentication/migrations/0015_auto_20221205_1136.py b/apps/authentication/migrations/0015_auto_20221205_1136.py new file mode 100644 index 000000000..7de71fe5c --- /dev/null +++ b/apps/authentication/migrations/0015_auto_20221205_1136.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.14 on 2022-12-05 03:36 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ('authentication', '0014_auto_20221122_2152'), + ] + + operations = [ + migrations.RenameField( + model_name='connectiontoken', + old_name='account_name', + new_name='account', + ), + ] diff --git a/apps/authentication/migrations/0016_auto_20221125_2240.py b/apps/authentication/migrations/0016_auto_20221125_2240.py deleted file mode 100644 index 041a29fc6..000000000 --- a/apps/authentication/migrations/0016_auto_20221125_2240.py +++ /dev/null @@ -1,50 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-25 14:40 - -from django.db import migrations, models - -import common.db.fields - - -class Migration(migrations.Migration): - dependencies = [ - ('authentication', '0015_alter_connectiontoken_login'), - ] - - operations = [ - migrations.RenameField( - model_name='connectiontoken', - old_name='login', - new_name='account_name' - ), - migrations.RenameField( - model_name='connectiontoken', - old_name='secret', - new_name='value', - ), - migrations.RenameField( - model_name='connectiontoken', - old_name='username', - new_name='input_username', - ), - migrations.AlterField( - model_name='connectiontoken', - name='account_name', - field=models.CharField(max_length=128, verbose_name='Account name'), - ), - migrations.AlterField( - model_name='connectiontoken', - name='value', - field=models.CharField(default='', max_length=64, verbose_name='Value'), - ), - migrations.AddField( - model_name='connectiontoken', - name='input_secret', - field=common.db.fields.EncryptCharField(blank=True, default='', max_length=128, - verbose_name='Input Secret'), - ), - migrations.AlterField( - model_name='connectiontoken', - name='input_username', - field=models.CharField(blank=True, default='', max_length=128, verbose_name='Input Username'), - ), - ] diff --git a/apps/authentication/migrations/0017_auto_20221128_1839.py b/apps/authentication/migrations/0017_auto_20221128_1839.py deleted file mode 100644 index bcdb71020..000000000 --- a/apps/authentication/migrations/0017_auto_20221128_1839.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-28 10:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('authentication', '0016_auto_20221125_2240'), - ] - - operations = [ - migrations.AddField( - model_name='connectiontoken', - name='connect_method', - field=models.CharField(default='web_ui', max_length=32, verbose_name='Connect method'), - preserve_default=False, - ), - ] diff --git a/apps/authentication/migrations/0018_connectiontoken_endpoint_protocol.py b/apps/authentication/migrations/0018_connectiontoken_endpoint_protocol.py deleted file mode 100644 index f267a62fd..000000000 --- a/apps/authentication/migrations/0018_connectiontoken_endpoint_protocol.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 04:49 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('authentication', '0017_auto_20221128_1839'), - ] - - operations = [ - migrations.AddField( - model_name='connectiontoken', - name='endpoint_protocol', - field=models.CharField(choices=[('ssh', 'SSH'), ('rdp', 'RDP'), ('telnet', 'Telnet'), ('vnc', 'VNC'), ('mysql', 'MySQL'), ('mariadb', 'MariaDB'), ('oracle', 'Oracle'), ('postgresql', 'PostgreSQL'), ('sqlserver', 'SQLServer'), ('redis', 'Redis'), ('mongodb', 'MongoDB'), ('k8s', 'K8S'), ('http', 'HTTP'), ('None', ' Settings')], default='', max_length=16, verbose_name='Endpoint protocol'), - preserve_default=False, - ), - ] diff --git a/apps/authentication/migrations/0019_remove_connectiontoken_endpoint_protocol.py b/apps/authentication/migrations/0019_remove_connectiontoken_endpoint_protocol.py deleted file mode 100644 index ef7f401bd..000000000 --- a/apps/authentication/migrations/0019_remove_connectiontoken_endpoint_protocol.py +++ /dev/null @@ -1,17 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 13:27 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('authentication', '0018_connectiontoken_endpoint_protocol'), - ] - - operations = [ - migrations.RemoveField( - model_name='connectiontoken', - name='endpoint_protocol', - ), - ] diff --git a/apps/authentication/models/connection_token.py b/apps/authentication/models/connection_token.py index 3de6f92af..b30ccb376 100644 --- a/apps/authentication/models/connection_token.py +++ b/apps/authentication/models/connection_token.py @@ -28,18 +28,14 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel): 'assets.Asset', on_delete=models.SET_NULL, null=True, blank=True, related_name='connection_tokens', verbose_name=_('Asset'), ) - account_name = models.CharField(max_length=128, verbose_name=_("Account name")) # 登录账号Name - input_username = models.CharField(max_length=128, default='', blank=True, verbose_name=_("Input Username")) - input_secret = EncryptCharField(max_length=64, default='', blank=True, verbose_name=_("Input Secret")) - protocol = models.CharField( - choices=Protocol.choices, max_length=16, default=Protocol.ssh, verbose_name=_("Protocol") - ) + account = models.CharField(max_length=128, verbose_name=_("Account name")) # 登录账号Name + input_username = models.CharField(max_length=128, default='', blank=True, verbose_name=_("Input username")) + input_secret = EncryptCharField(max_length=64, default='', blank=True, verbose_name=_("Input secret")) + protocol = models.CharField(max_length=16, default=Protocol.ssh, verbose_name=_("Protocol")) connect_method = models.CharField(max_length=32, verbose_name=_("Connect method")) user_display = models.CharField(max_length=128, default='', verbose_name=_("User display")) asset_display = models.CharField(max_length=128, default='', verbose_name=_("Asset display")) - date_expired = models.DateTimeField( - default=date_expired_default, verbose_name=_("Date expired") - ) + date_expired = models.DateTimeField(default=date_expired_default, verbose_name=_("Date expired")) class Meta: ordering = ('-date_expired',) @@ -78,7 +74,7 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel): def permed_account(self): from perms.utils import PermAccountUtil permed_account = PermAccountUtil().validate_permission( - self.user, self.asset, self.account_name + self.user, self.asset, self.account ) return permed_account @@ -101,13 +97,13 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel): is_valid = False error = _('No asset or inactive asset') return is_valid, error - if not self.account_name: + if not self.account: error = _('No account') raise PermissionDenied(error) if not self.permed_account or not self.permed_account.actions: msg = 'user `{}` not has asset `{}` permission for login `{}`'.format( - self.user, self.asset, self.account_name + self.user, self.asset, self.account ) raise PermissionDenied(msg) @@ -120,15 +116,15 @@ class ConnectionToken(OrgModelMixin, JMSBaseModel): return self.asset.platform @lazyproperty - def account(self): + def account_object(self): from assets.models import Account if not self.asset: return None - account = self.asset.accounts.filter(name=self.account_name).first() - if self.account_name == '@INPUT' or not account: + account = self.asset.accounts.filter(name=self.account).first() + if self.account == '@INPUT' or not account: data = { - 'name': self.account_name, + 'name': self.account, 'username': self.input_username, 'secret_type': 'password', 'secret': self.input_secret, diff --git a/apps/authentication/serializers/__init__.py b/apps/authentication/serializers/__init__.py index 65994a58c..d6e1671cf 100644 --- a/apps/authentication/serializers/__init__.py +++ b/apps/authentication/serializers/__init__.py @@ -1,4 +1,5 @@ -from .token import * +from .confirm import * +from .connect_token_secret import * from .connection_token import * from .password_mfa import * -from .confirm import * +from .token import * diff --git a/apps/authentication/serializers/connect_token_secret.py b/apps/authentication/serializers/connect_token_secret.py new file mode 100644 index 000000000..48f86ba50 --- /dev/null +++ b/apps/authentication/serializers/connect_token_secret.py @@ -0,0 +1,117 @@ +from django.utils.translation import ugettext_lazy as _ +from rest_framework import serializers + +from acls.models import CommandGroup +from assets.models import Asset, Account, Platform +from assets.serializers import PlatformSerializer, AssetProtocolsSerializer +from authentication.models import ConnectionToken +from orgs.mixins.serializers import OrgResourceModelSerializerMixin +from perms.serializers.permission import ActionChoicesField +from users.models import User + +__all__ = [ + 'ConnectionTokenSecretSerializer', +] + + +class _ConnectionTokenUserSerializer(serializers.ModelSerializer): + class Meta: + model = User + fields = ['id', 'name', 'username', 'email'] + + +class _ConnectionTokenAssetSerializer(serializers.ModelSerializer): + protocols = AssetProtocolsSerializer(many=True, required=False, label=_('Protocols')) + + class Meta: + model = Asset + fields = [ + 'id', 'name', 'address', 'protocols', + 'category', 'type', 'org_id', 'specific' + ] + + +class _SimpleAccountSerializer(serializers.ModelSerializer): + """ Account """ + + class Meta: + model = Account + fields = ['name', 'username', 'secret_type', 'secret'] + + +class _ConnectionTokenAccountSerializer(serializers.ModelSerializer): + """ Account """ + su_from = _SimpleAccountSerializer(required=False, label=_('Su from')) + + class Meta: + model = Account + fields = [ + 'name', 'username', 'secret_type', 'secret', 'su_from', + ] + + +class _ConnectionTokenGatewaySerializer(serializers.ModelSerializer): + """ Gateway """ + + class Meta: + model = Asset + fields = [ + 'id', 'address', 'port', + # 'username', 'password', 'private_key' + ] + + +class _ConnectionTokenACLCmdGroupSerializer(serializers.ModelSerializer): + """ ACL command group""" + + class Meta: + model = CommandGroup + fields = [ + 'id', 'type', 'content', 'ignore_case', 'pattern' + ] + + +class _ConnectionTokenPlatformSerializer(PlatformSerializer): + class Meta(PlatformSerializer.Meta): + model = Platform + + def get_field_names(self, declared_fields, info): + names = super().get_field_names(declared_fields, info) + names = [n for n in names if n not in ['automation']] + return names + + +class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin): + user = _ConnectionTokenUserSerializer(read_only=True) + asset = _ConnectionTokenAssetSerializer(read_only=True) + account = _ConnectionTokenAccountSerializer(read_only=True, source='account_object') + gateway = _ConnectionTokenGatewaySerializer(read_only=True) + platform = _ConnectionTokenPlatformSerializer(read_only=True) + acl_command_groups = _ConnectionTokenACLCmdGroupSerializer(read_only=True, many=True) + actions = ActionChoicesField() + expire_at = serializers.IntegerField() + expire_now = serializers.BooleanField(label=_('Expired now'), write_only=True, default=True) + connect_method = serializers.SerializerMethodField(label=_('Connect method')) + + class Meta: + model = ConnectionToken + fields = [ + 'id', 'value', 'user', 'asset', 'account', + 'platform', 'acl_command_groups', 'protocol', + 'gateway', 'actions', 'expire_at', 'expire_now', + 'connect_method' + ] + extra_kwargs = { + 'value': {'read_only': True}, + } + + def get_connect_method(self, obj): + from terminal.const import TerminalType + from common.utils import get_request_os + request = self.context.get('request') + if request: + os = get_request_os(request) + else: + os = 'windows' + method = TerminalType.get_connect_method(obj.connect_method, protocol=obj.protocol, os=os) + return method diff --git a/apps/authentication/serializers/connection_token.py b/apps/authentication/serializers/connection_token.py index 070ef2b29..28979f2f3 100644 --- a/apps/authentication/serializers/connection_token.py +++ b/apps/authentication/serializers/connection_token.py @@ -12,8 +12,7 @@ from common.drf.fields import ObjectRelatedField from ..models import ConnectionToken __all__ = [ - 'ConnectionTokenSerializer', 'ConnectionTokenSecretSerializer', - 'SuperConnectionTokenSerializer', 'ConnectionTokenDisplaySerializer' + 'ConnectionTokenSerializer', 'SuperConnectionTokenSerializer', ] @@ -24,11 +23,9 @@ class ConnectionTokenSerializer(OrgResourceModelSerializerMixin): model = ConnectionToken fields_mini = ['id', 'value'] fields_small = fields_mini + [ - 'user', 'asset', 'account_name', - 'input_username', 'input_secret', - 'connect_method', 'protocol', - 'actions', 'date_expired', 'date_created', - 'date_updated', 'created_by', + 'user', 'asset', 'account', 'input_username', + 'input_secret', 'connect_method', 'protocol', 'actions', + 'date_expired', 'date_created', 'date_updated', 'created_by', 'updated_by', 'org_id', 'org_name', ] read_only_fields = [ @@ -50,32 +47,15 @@ class ConnectionTokenSerializer(OrgResourceModelSerializerMixin): return self.get_request_user() -class ConnectionTokenDisplaySerializer(ConnectionTokenSerializer): - class Meta(ConnectionTokenSerializer.Meta): - extra_kwargs = { - 'secret': {'write_only': True}, - } - - -# -# SuperConnectionTokenSerializer -# - - class SuperConnectionTokenSerializer(ConnectionTokenSerializer): class Meta(ConnectionTokenSerializer.Meta): - read_only_fields = [ - 'validity', 'user_display', 'system_user_display', - 'asset_display', 'application_display', - ] + pass def get_user(self, attrs): return attrs.get('user') or self.get_request_user() -# # Connection Token Secret -# class ConnectionTokenUserSerializer(serializers.ModelSerializer): diff --git a/apps/ops/migrations/0027_auto_20221024_1709.py b/apps/ops/migrations/0027_auto_20221024_1709.py index 34e244363..08411d42b 100644 --- a/apps/ops/migrations/0027_auto_20221024_1709.py +++ b/apps/ops/migrations/0027_auto_20221024_1709.py @@ -1,24 +1,20 @@ -# Generated by Django 3.2.14 on 2022-10-24 09:09 +# Generated by Django 3.2.14 on 2022-12-05 03:23 -from django.db import migrations, models import uuid +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + class Migration(migrations.Migration): - dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('assets', '0112_gateway_to_asset'), ('ops', '0026_auto_20221009_2050'), ] operations = [ - migrations.DeleteModel(name='CeleryTask'), - migrations.CreateModel( - name='CeleryTask', - fields=[ - ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=1024)), - ] - ), migrations.CreateModel( name='CeleryTaskExecution', fields=[ @@ -28,9 +24,250 @@ class Migration(migrations.Migration): ('kwargs', models.JSONField(verbose_name='Kwargs')), ('state', models.CharField(max_length=16, verbose_name='State')), ('is_finished', models.BooleanField(default=False, verbose_name='Finished')), - ('date_published', models.DateTimeField(auto_now_add=True)), - ('date_start', models.DateTimeField(null=True)), - ('date_finished', models.DateTimeField(null=True)), + ('date_published', models.DateTimeField(auto_now_add=True, verbose_name='Date published')), + ('date_start', models.DateTimeField(null=True, verbose_name='Date start')), + ('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')), ], ), + migrations.CreateModel( + name='Job', + fields=[ + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), + ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), + ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('is_periodic', models.BooleanField(default=False)), + ('interval', models.IntegerField(blank=True, default=24, null=True, verbose_name='Cycle perform')), + ('crontab', models.CharField(blank=True, max_length=128, null=True, verbose_name='Regularly perform')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('name', models.CharField(max_length=128, null=True, verbose_name='Name')), + ('instant', models.BooleanField(default=False)), + ('args', models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Args')), + ('module', models.CharField(choices=[('shell', 'Shell'), ('win_shell', 'Powershell')], default='shell', + max_length=128, null=True, verbose_name='Module')), + ('chdir', models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Chdir')), + ('timeout', models.IntegerField(default=60, verbose_name='Timeout (Seconds)')), + ('type', models.CharField(choices=[('adhoc', 'Adhoc'), ('playbook', 'Playbook')], default='adhoc', + max_length=128, verbose_name='Type')), + ('runas', models.CharField(default='root', max_length=128, verbose_name='Runas')), + ('runas_policy', models.CharField( + choices=[('privileged_only', 'Privileged Only'), ('privileged_first', 'Privileged First'), + ('skip', 'Skip')], default='skip', max_length=128, verbose_name='Runas policy')), + ('use_parameter_define', models.BooleanField(default=False, verbose_name='Use Parameter Define')), + ('parameters_define', models.JSONField(default=dict, verbose_name='Parameters define')), + ('comment', + models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment')), + ('assets', models.ManyToManyField(to='assets.Asset', verbose_name='Assets')), + ('owner', + models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, + verbose_name='Creator')), + ], + options={ + 'ordering': ['date_created'], + }, + ), + migrations.CreateModel( + name='JobExecution', + fields=[ + ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), + ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), + ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), + ('org_id', + models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization')), + ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), + ('task_id', models.UUIDField(null=True)), + ('status', models.CharField(default='running', max_length=16, verbose_name='Status')), + ('parameters', models.JSONField(default=dict, verbose_name='Parameters')), + ('result', models.JSONField(blank=True, null=True, verbose_name='Result')), + ('summary', models.JSONField(default=dict, verbose_name='Summary')), + ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), + ('date_start', models.DateTimeField(db_index=True, null=True, verbose_name='Date start')), + ('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')), + ('creator', + models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, + verbose_name='Creator')), + ('job', + models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='executions', + to='ops.job')), + ], + options={ + 'ordering': ['-date_created'], + }, + ), + migrations.RemoveField( + model_name='playbookexecution', + name='creator', + ), + migrations.RemoveField( + model_name='playbookexecution', + name='task', + ), + migrations.AlterUniqueTogether( + name='playbooktemplate', + unique_together=None, + ), + migrations.AlterModelOptions( + name='celerytask', + options={'ordering': ('name',)}, + ), + migrations.RenameField( + model_name='adhoc', + old_name='owner', + new_name='creator', + ), + migrations.RenameField( + model_name='celerytask', + old_name='date_finished', + new_name='last_published_time', + ), + migrations.RemoveField( + model_name='adhoc', + name='account', + ), + migrations.RemoveField( + model_name='adhoc', + name='account_policy', + ), + migrations.RemoveField( + model_name='adhoc', + name='assets', + ), + migrations.RemoveField( + model_name='adhoc', + name='crontab', + ), + migrations.RemoveField( + model_name='adhoc', + name='date_last_run', + ), + migrations.RemoveField( + model_name='adhoc', + name='interval', + ), + migrations.RemoveField( + model_name='adhoc', + name='is_periodic', + ), + migrations.RemoveField( + model_name='adhoc', + name='last_execution', + ), + migrations.RemoveField( + model_name='celerytask', + name='args', + ), + migrations.RemoveField( + model_name='celerytask', + name='date_published', + ), + migrations.RemoveField( + model_name='celerytask', + name='date_start', + ), + migrations.RemoveField( + model_name='celerytask', + name='is_finished', + ), + migrations.RemoveField( + model_name='celerytask', + name='kwargs', + ), + migrations.RemoveField( + model_name='celerytask', + name='state', + ), + migrations.RemoveField( + model_name='playbook', + name='account', + ), + migrations.RemoveField( + model_name='playbook', + name='account_policy', + ), + migrations.RemoveField( + model_name='playbook', + name='assets', + ), + migrations.RemoveField( + model_name='playbook', + name='crontab', + ), + migrations.RemoveField( + model_name='playbook', + name='date_last_run', + ), + migrations.RemoveField( + model_name='playbook', + name='interval', + ), + migrations.RemoveField( + model_name='playbook', + name='is_periodic', + ), + migrations.RemoveField( + model_name='playbook', + name='last_execution', + ), + migrations.RemoveField( + model_name='playbook', + name='owner', + ), + migrations.RemoveField( + model_name='playbook', + name='template', + ), + migrations.AddField( + model_name='adhoc', + name='comment', + field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment'), + ), + migrations.AddField( + model_name='playbook', + name='creator', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, + to=settings.AUTH_USER_MODEL, verbose_name='Creator'), + ), + migrations.AlterField( + model_name='adhoc', + name='module', + field=models.CharField(choices=[('shell', 'Shell'), ('win_shell', 'Powershell')], default='shell', + max_length=128, verbose_name='Module'), + ), + migrations.AlterField( + model_name='celerytask', + name='name', + field=models.CharField(max_length=1024, verbose_name='Name'), + ), + migrations.AlterField( + model_name='playbook', + name='comment', + field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment'), + ), + migrations.AlterField( + model_name='playbook', + name='name', + field=models.CharField(max_length=128, null=True, verbose_name='Name'), + ), + migrations.AlterField( + model_name='playbook', + name='path', + field=models.FileField(upload_to='playbooks/'), + ), + migrations.DeleteModel( + name='AdHocExecution', + ), + migrations.DeleteModel( + name='PlaybookExecution', + ), + migrations.DeleteModel( + name='PlaybookTemplate', + ), + migrations.AddField( + model_name='job', + name='playbook', + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='ops.playbook', + verbose_name='Playbook'), + ), ] diff --git a/apps/ops/migrations/0028_celerytask_last_published_time.py b/apps/ops/migrations/0028_celerytask_last_published_time.py deleted file mode 100644 index 6732508e3..000000000 --- a/apps/ops/migrations/0028_celerytask_last_published_time.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-10-27 06:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0027_auto_20221024_1709'), - ] - - operations = [ - migrations.AddField( - model_name='celerytask', - name='last_published_time', - field=models.DateTimeField(null=True), - ), - ] diff --git a/apps/ops/migrations/0029_auto_20221111_1919.py b/apps/ops/migrations/0029_auto_20221111_1919.py deleted file mode 100644 index 072e59867..000000000 --- a/apps/ops/migrations/0029_auto_20221111_1919.py +++ /dev/null @@ -1,171 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-11 11:19 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion -import uuid - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('assets', '0111_alter_automationexecution_status'), - ('ops', '0028_celerytask_last_published_time'), - ] - - operations = [ - migrations.CreateModel( - name='Job', - fields=[ - ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), - ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), - ('date_created', models.DateTimeField(auto_now_add=True, null=True, verbose_name='Date created')), - ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), - ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('name', models.CharField(max_length=128, null=True, verbose_name='Name')), - ('instant', models.BooleanField(default=False)), - ('args', models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Args')), - ('module', models.CharField(choices=[('shell', 'Shell'), ('win_shell', 'Powershell')], default='shell', max_length=128, null=True, verbose_name='Module')), - ('type', models.CharField(choices=[('adhoc', 'Adhoc'), ('playbook', 'Playbook')], default='adhoc', max_length=128, verbose_name='Type')), - ('runas', models.CharField(default='root', max_length=128, verbose_name='Runas')), - ('runas_policy', models.CharField(choices=[('privileged_only', 'Privileged Only'), ('privileged_first', 'Privileged First'), ('skip', 'Skip')], default='skip', max_length=128, verbose_name='Runas policy')), - ('assets', models.ManyToManyField(to='assets.Asset', verbose_name='Assets')), - ('owner', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Creator')), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='JobExecution', - fields=[ - ('created_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Created by')), - ('updated_by', models.CharField(blank=True, max_length=32, null=True, verbose_name='Updated by')), - ('date_updated', models.DateTimeField(auto_now=True, verbose_name='Date updated')), - ('id', models.UUIDField(default=uuid.uuid4, primary_key=True, serialize=False)), - ('task_id', models.UUIDField(null=True)), - ('status', models.CharField(default='running', max_length=16, verbose_name='Status')), - ('result', models.JSONField(blank=True, null=True, verbose_name='Result')), - ('summary', models.JSONField(default=dict, verbose_name='Summary')), - ('date_created', models.DateTimeField(auto_now_add=True, verbose_name='Date created')), - ('date_start', models.DateTimeField(db_index=True, null=True, verbose_name='Date start')), - ('date_finished', models.DateTimeField(null=True, verbose_name='Date finished')), - ('creator', models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Creator')), - ('job', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='executions', to='ops.job')), - ], - options={ - 'abstract': False, - }, - ), - migrations.AlterUniqueTogether( - name='playbooktemplate', - unique_together=None, - ), - migrations.RemoveField( - model_name='adhoc', - name='account', - ), - migrations.RemoveField( - model_name='adhoc', - name='account_policy', - ), - migrations.RemoveField( - model_name='adhoc', - name='assets', - ), - migrations.RemoveField( - model_name='adhoc', - name='crontab', - ), - migrations.RemoveField( - model_name='adhoc', - name='date_last_run', - ), - migrations.RemoveField( - model_name='adhoc', - name='interval', - ), - migrations.RemoveField( - model_name='adhoc', - name='is_periodic', - ), - migrations.RemoveField( - model_name='adhoc', - name='last_execution', - ), - migrations.RemoveField( - model_name='adhoc', - name='org_id', - ), - migrations.RemoveField( - model_name='playbook', - name='account', - ), - migrations.RemoveField( - model_name='playbook', - name='account_policy', - ), - migrations.RemoveField( - model_name='playbook', - name='assets', - ), - migrations.RemoveField( - model_name='playbook', - name='comment', - ), - migrations.RemoveField( - model_name='playbook', - name='crontab', - ), - migrations.RemoveField( - model_name='playbook', - name='date_last_run', - ), - migrations.RemoveField( - model_name='playbook', - name='interval', - ), - migrations.RemoveField( - model_name='playbook', - name='is_periodic', - ), - migrations.RemoveField( - model_name='playbook', - name='last_execution', - ), - migrations.RemoveField( - model_name='playbook', - name='org_id', - ), - migrations.RemoveField( - model_name='playbook', - name='template', - ), - migrations.AlterField( - model_name='adhoc', - name='module', - field=models.CharField(choices=[('shell', 'Shell'), ('win_shell', 'Powershell')], default='shell', max_length=128, verbose_name='Module'), - ), - migrations.AlterField( - model_name='playbook', - name='name', - field=models.CharField(max_length=128, null=True, verbose_name='Name'), - ), - migrations.AlterField( - model_name='playbook', - name='path', - field=models.FileField(upload_to='playbooks/'), - ), - migrations.DeleteModel( - name='PlaybookExecution', - ), - migrations.DeleteModel( - name='PlaybookTemplate', - ), - migrations.AddField( - model_name='job', - name='playbook', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='ops.playbook', verbose_name='Playbook'), - ), - ] diff --git a/apps/ops/migrations/0030_auto_20221116_1811.py b/apps/ops/migrations/0030_auto_20221116_1811.py deleted file mode 100644 index 3118f26ca..000000000 --- a/apps/ops/migrations/0030_auto_20221116_1811.py +++ /dev/null @@ -1,42 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-16 10:11 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0029_auto_20221111_1919'), - ] - - operations = [ - migrations.AlterModelOptions( - name='celerytask', - options={'ordering': ('name',)}, - ), - migrations.AddField( - model_name='job', - name='variables', - field=models.JSONField(default=dict, verbose_name='Variables'), - ), - migrations.AlterField( - model_name='celerytask', - name='name', - field=models.CharField(max_length=1024, verbose_name='Name'), - ), - migrations.AlterField( - model_name='celerytaskexecution', - name='date_finished', - field=models.DateTimeField(null=True, verbose_name='Date finished'), - ), - migrations.AlterField( - model_name='celerytaskexecution', - name='date_published', - field=models.DateTimeField(auto_now_add=True, verbose_name='Date published'), - ), - migrations.AlterField( - model_name='celerytaskexecution', - name='date_start', - field=models.DateTimeField(null=True, verbose_name='Date start'), - ), - ] diff --git a/apps/ops/migrations/0031_auto_20221116_2024.py b/apps/ops/migrations/0031_auto_20221116_2024.py deleted file mode 100644 index 5c132e974..000000000 --- a/apps/ops/migrations/0031_auto_20221116_2024.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-16 12:24 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0030_auto_20221116_1811'), - ] - - operations = [ - migrations.AddField( - model_name='job', - name='chdir', - field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Chdir'), - ), - migrations.AddField( - model_name='job', - name='comment', - field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment'), - ), - migrations.AddField( - model_name='job', - name='timeout', - field=models.IntegerField(default=60, verbose_name='Timeout (Seconds)'), - ), - ] diff --git a/apps/ops/migrations/0032_auto_20221117_1848.py b/apps/ops/migrations/0032_auto_20221117_1848.py deleted file mode 100644 index ae18c5280..000000000 --- a/apps/ops/migrations/0032_auto_20221117_1848.py +++ /dev/null @@ -1,27 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-17 10:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0031_auto_20221116_2024'), - ] - - operations = [ - migrations.RemoveField( - model_name='job', - name='variables', - ), - migrations.AddField( - model_name='job', - name='parameters_define', - field=models.JSONField(default=dict, verbose_name='Parameters define'), - ), - migrations.AddField( - model_name='jobexecution', - name='parameters', - field=models.JSONField(default=dict, verbose_name='Parameters'), - ), - ] diff --git a/apps/ops/migrations/0033_auto_20221118_1431.py b/apps/ops/migrations/0033_auto_20221118_1431.py deleted file mode 100644 index 70518eee6..000000000 --- a/apps/ops/migrations/0033_auto_20221118_1431.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-18 06:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0032_auto_20221117_1848'), - ] - - operations = [ - migrations.AddField( - model_name='job', - name='crontab', - field=models.CharField(blank=True, max_length=128, null=True, verbose_name='Regularly perform'), - ), - migrations.AddField( - model_name='job', - name='interval', - field=models.IntegerField(blank=True, default=24, null=True, verbose_name='Cycle perform'), - ), - migrations.AddField( - model_name='job', - name='is_periodic', - field=models.BooleanField(default=False), - ), - ] diff --git a/apps/ops/migrations/0034_job_org_id.py b/apps/ops/migrations/0034_job_org_id.py deleted file mode 100644 index 07926cec3..000000000 --- a/apps/ops/migrations/0034_job_org_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-23 09:45 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0033_auto_20221118_1431'), - ] - - operations = [ - migrations.AddField( - model_name='job', - name='org_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization'), - ), - ] diff --git a/apps/ops/migrations/0035_jobexecution_org_id.py b/apps/ops/migrations/0035_jobexecution_org_id.py deleted file mode 100644 index 1161d10e3..000000000 --- a/apps/ops/migrations/0035_jobexecution_org_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-23 10:22 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0034_job_org_id'), - ] - - operations = [ - migrations.AddField( - model_name='jobexecution', - name='org_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization'), - ), - ] diff --git a/apps/ops/migrations/0036_auto_20221128_1839.py b/apps/ops/migrations/0036_auto_20221128_1839.py deleted file mode 100644 index 22bc435e2..000000000 --- a/apps/ops/migrations/0036_auto_20221128_1839.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-28 10:39 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0035_jobexecution_org_id'), - ] - - operations = [ - migrations.AlterModelOptions( - name='job', - options={'ordering': ['date_created']}, - ), - migrations.AlterModelOptions( - name='jobexecution', - options={'ordering': ['-date_created']}, - ), - ] diff --git a/apps/ops/migrations/0036_auto_20221129_1529.py b/apps/ops/migrations/0036_auto_20221129_1529.py deleted file mode 100644 index a766ee72d..000000000 --- a/apps/ops/migrations/0036_auto_20221129_1529.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 07:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0035_jobexecution_org_id'), - ] - - operations = [ - migrations.AlterModelOptions( - name='job', - options={'ordering': ['date_created']}, - ), - migrations.AlterModelOptions( - name='jobexecution', - options={'ordering': ['-date_created']}, - ), - migrations.AddField( - model_name='job', - name='use_parameter_define', - field=models.BooleanField(default=False, verbose_name='Use Parameter Define'), - ), - ] diff --git a/apps/ops/migrations/0037_auto_20221129_1926.py b/apps/ops/migrations/0037_auto_20221129_1926.py deleted file mode 100644 index 086a93cd7..000000000 --- a/apps/ops/migrations/0037_auto_20221129_1926.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 11:26 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0036_auto_20221129_1529'), - ] - - operations = [ - migrations.RenameField( - model_name='adhoc', - old_name='owner', - new_name='creator', - ), - migrations.AddField( - model_name='adhoc', - name='org_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization'), - ), - migrations.DeleteModel( - name='AdHocExecution', - ), - ] diff --git a/apps/ops/migrations/0038_playbook_org_id.py b/apps/ops/migrations/0038_playbook_org_id.py deleted file mode 100644 index 0de95334c..000000000 --- a/apps/ops/migrations/0038_playbook_org_id.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 11:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0037_auto_20221129_1926'), - ] - - operations = [ - migrations.AddField( - model_name='playbook', - name='org_id', - field=models.CharField(blank=True, db_index=True, default='', max_length=36, verbose_name='Organization'), - ), - ] diff --git a/apps/ops/migrations/0039_auto_20221129_1932.py b/apps/ops/migrations/0039_auto_20221129_1932.py deleted file mode 100644 index f54ed1cbe..000000000 --- a/apps/ops/migrations/0039_auto_20221129_1932.py +++ /dev/null @@ -1,25 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 11:32 - -from django.conf import settings -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - migrations.swappable_dependency(settings.AUTH_USER_MODEL), - ('ops', '0038_playbook_org_id'), - ] - - operations = [ - migrations.RemoveField( - model_name='playbook', - name='owner', - ), - migrations.AddField( - model_name='playbook', - name='creator', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to=settings.AUTH_USER_MODEL, verbose_name='Creator'), - ), - ] diff --git a/apps/ops/migrations/0040_merge_0036_auto_20221128_1839_0039_auto_20221129_1932.py b/apps/ops/migrations/0040_merge_0036_auto_20221128_1839_0039_auto_20221129_1932.py deleted file mode 100644 index c0bbcb9a1..000000000 --- a/apps/ops/migrations/0040_merge_0036_auto_20221128_1839_0039_auto_20221129_1932.py +++ /dev/null @@ -1,14 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 11:47 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0036_auto_20221128_1839'), - ('ops', '0039_auto_20221129_1932'), - ] - - operations = [ - ] diff --git a/apps/ops/migrations/0041_auto_20221129_1952.py b/apps/ops/migrations/0041_auto_20221129_1952.py deleted file mode 100644 index fb3411a4d..000000000 --- a/apps/ops/migrations/0041_auto_20221129_1952.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.14 on 2022-11-29 11:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('ops', '0040_merge_0036_auto_20221128_1839_0039_auto_20221129_1932'), - ] - - operations = [ - migrations.AddField( - model_name='adhoc', - name='comment', - field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment'), - ), - migrations.AddField( - model_name='playbook', - name='comment', - field=models.CharField(blank=True, default='', max_length=1024, null=True, verbose_name='Comment'), - ), - ] diff --git a/apps/terminal/const.py b/apps/terminal/const.py index 6d7a14f9d..c5ceb3c94 100644 --- a/apps/terminal/const.py +++ b/apps/terminal/const.py @@ -229,7 +229,7 @@ class TerminalType(TextChoices): return protocols @classmethod - def get_connect_method(cls, name, protocol, os): + def get_connect_method(cls, name, protocol, os='linux'): methods = cls.get_protocols_connect_methods(os) protocol_methods = methods.get(protocol, []) for method in protocol_methods: @@ -267,7 +267,6 @@ class TerminalType(TextChoices): protocol_web_methods = set(web_methods.get(protocol, [])) \ & set(component_protocol.get('web_methods', [])) - print("protocol_web_methods", protocol, protocol_web_methods) methods[protocol.value].extend([ { 'component': component.value, diff --git a/apps/terminal/serializers/terminal.py b/apps/terminal/serializers/terminal.py index f7f935f50..340a0b0f7 100644 --- a/apps/terminal/serializers/terminal.py +++ b/apps/terminal/serializers/terminal.py @@ -139,5 +139,5 @@ class ConnectMethodSerializer(serializers.Serializer): value = serializers.CharField(max_length=128) label = serializers.CharField(max_length=128) type = serializers.CharField(max_length=128) - listen = serializers.CharField(max_length=128) + endpoint_protocol = serializers.CharField(max_length=128) component = serializers.CharField(max_length=128)