jumpserver/apps/authentication/serializers/connection_token.py

161 lines
4.6 KiB
Python
Raw Normal View History

2022-11-14 06:44:18 +00:00
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
2022-11-22 13:54:40 +00:00
from assets.serializers import PlatformSerializer
from assets.models import Asset, Domain, CommandFilterRule, Account, Platform
from authentication.models import ConnectionToken
2022-11-14 06:44:18 +00:00
from orgs.mixins.serializers import OrgResourceModelSerializerMixin
2022-11-11 07:04:31 +00:00
from perms.serializers.permission import ActionChoicesField
2022-11-14 06:44:18 +00:00
from users.models import User
__all__ = [
'ConnectionTokenSerializer', 'ConnectionTokenSecretSerializer',
'SuperConnectionTokenSerializer', 'ConnectionTokenDisplaySerializer'
]
class ConnectionTokenSerializer(OrgResourceModelSerializerMixin):
expire_time = serializers.IntegerField(read_only=True, label=_('Expired time'))
class Meta:
model = ConnectionToken
2022-11-25 15:09:55 +00:00
fields_mini = ['id', 'value']
fields_small = fields_mini + [
2022-11-25 15:09:55 +00:00
'protocol', 'account_name',
'input_username', 'input_secret',
2022-11-23 08:11:17 +00:00
'actions', 'date_expired', 'date_created',
2022-11-22 13:54:40 +00:00
'date_updated', 'created_by',
'updated_by', 'org_id', 'org_name',
]
fields_fk = [
'user', 'asset',
]
read_only_fields = [
# 普通 Token 不支持指定 user
2022-11-23 08:11:17 +00:00
'user', 'expire_time',
'user_display', 'asset_display',
]
fields = fields_small + fields_fk + read_only_fields
2022-11-25 15:09:55 +00:00
extra_kwargs = {
'value': {'read_only': True},
}
def get_request_user(self):
request = self.context.get('request')
user = request.user if request else None
return user
def get_user(self, attrs):
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 = [
2022-07-20 05:13:40 +00:00
'validity', 'user_display', 'system_user_display',
'asset_display', 'application_display',
]
def get_user(self, attrs):
return attrs.get('user') or self.get_request_user()
#
# Connection Token Secret
#
class ConnectionTokenUserSerializer(serializers.ModelSerializer):
""" User """
2022-11-14 06:44:18 +00:00
class Meta:
model = User
fields = ['id', 'name', 'username', 'email']
class ConnectionTokenAssetSerializer(serializers.ModelSerializer):
""" Asset """
2022-11-14 06:44:18 +00:00
class Meta:
model = Asset
2022-10-31 11:27:45 +00:00
fields = ['id', 'name', 'address', 'protocols', 'org_id']
class ConnectionTokenAccountSerializer(serializers.ModelSerializer):
""" Account """
2022-11-14 06:44:18 +00:00
class Meta:
model = Account
fields = [
2022-11-23 08:11:17 +00:00
'name', 'username', 'secret_type', 'secret',
]
class ConnectionTokenGatewaySerializer(serializers.ModelSerializer):
""" Gateway """
2022-11-14 06:44:18 +00:00
class Meta:
model = Asset
fields = ['id', 'address', 'port', 'username', 'password', 'private_key']
class ConnectionTokenDomainSerializer(serializers.ModelSerializer):
""" Domain """
gateways = ConnectionTokenGatewaySerializer(many=True, read_only=True)
class Meta:
model = Domain
fields = ['id', 'name', 'gateways']
class ConnectionTokenCmdFilterRuleSerializer(serializers.ModelSerializer):
""" Command filter rule """
2022-11-14 06:44:18 +00:00
class Meta:
model = CommandFilterRule
fields = [
'id', 'type', 'content', 'ignore_case', 'pattern',
'priority', 'action', 'date_created',
]
2022-11-22 13:54:40 +00:00
class ConnectionTokenPlatform(PlatformSerializer):
class Meta(PlatformSerializer.Meta):
2022-11-14 06:44:18 +00:00
model = Platform
2022-11-22 13:54:40 +00:00
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
2022-11-14 06:44:18 +00:00
class ConnectionTokenSecretSerializer(OrgResourceModelSerializerMixin):
user = ConnectionTokenUserSerializer(read_only=True)
asset = ConnectionTokenAssetSerializer(read_only=True)
2022-11-14 06:44:18 +00:00
platform = ConnectionTokenPlatform(read_only=True)
2022-11-23 08:11:17 +00:00
account = ConnectionTokenAccountSerializer(read_only=True)
gateway = ConnectionTokenGatewaySerializer(read_only=True)
2022-11-22 13:54:40 +00:00
# cmd_filter_rules = ConnectionTokenCmdFilterRuleSerializer(many=True)
2022-11-11 07:04:31 +00:00
actions = ActionChoicesField()
expire_at = serializers.IntegerField()
class Meta:
model = ConnectionToken
fields = [
2022-11-27 10:31:28 +00:00
'id', 'value', 'user', 'asset', 'account',
2022-11-23 08:11:17 +00:00
'protocol', 'domain', 'gateway',
'actions', 'expire_at', 'platform',
]