mirror of https://github.com/jumpserver/jumpserver
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.
79 lines
3.0 KiB
79 lines
3.0 KiB
from django.utils.translation import gettext_lazy as _ |
|
from rest_framework import serializers |
|
|
|
from common.serializers.fields import LabeledChoiceField |
|
from common.utils.common import pretty_string |
|
from common.utils.random import random_string |
|
from orgs.mixins.serializers import OrgResourceModelSerializerMixin |
|
from ..const import ActionPermission |
|
from ..models import SessionSharing, SessionJoinRecord |
|
|
|
__all__ = ['SessionSharingSerializer', 'SessionJoinRecordSerializer'] |
|
|
|
|
|
class SessionSharingSerializer(OrgResourceModelSerializerMixin): |
|
users = serializers.ListSerializer( |
|
child=serializers.CharField(max_length=36), allow_null=True, write_only=True |
|
) |
|
action_permission = LabeledChoiceField( |
|
default=ActionPermission.writable, choices=ActionPermission.choices, |
|
write_only=True, label=_('Action permission') |
|
) |
|
|
|
class Meta: |
|
model = SessionSharing |
|
fields_mini = ['id'] |
|
fields_small = fields_mini + [ |
|
'verify_code', 'is_active', 'expired_time', 'created_by', |
|
'date_created', 'date_updated', 'users', 'users_display', |
|
'action_permission', 'origin', 'url', |
|
] |
|
fields_fk = ['session', 'creator'] |
|
fields = fields_small + fields_fk |
|
read_only_fields = ['verify_code'] |
|
|
|
def save(self, **kwargs): |
|
users = self.validated_data.get('users', []) |
|
self.validated_data['users'] = ','.join(users) |
|
return super().save(**kwargs) |
|
|
|
def create(self, validated_data): |
|
validated_data['verify_code'] = random_string(4) |
|
session = validated_data.get('session') |
|
if session: |
|
validated_data['creator_id'] = session.user_id |
|
validated_data['created_by'] = pretty_string(str(session.user), max_length=32) |
|
validated_data['org_id'] = session.org_id |
|
return super().create(validated_data) |
|
|
|
|
|
class SessionJoinRecordSerializer(OrgResourceModelSerializerMixin): |
|
action_permission = LabeledChoiceField( |
|
choices=ActionPermission.choices, read_only=True, label=_('Action permission') |
|
) |
|
|
|
class Meta: |
|
model = SessionJoinRecord |
|
fields_mini = ['id'] |
|
fields_small = fields_mini + [ |
|
'joiner_display', 'verify_code', 'date_joined', 'date_left', |
|
'remote_addr', 'login_from', 'is_success', 'reason', 'is_finished', |
|
'created_by', 'date_created', 'date_updated', 'action_permission' |
|
] |
|
fields_fk = ['session', 'sharing', 'joiner'] |
|
fields = fields_small + fields_fk |
|
extra_kwargs = { |
|
'session': {'required': False}, |
|
'joiner': {'required': True}, |
|
'sharing': {'required': True}, |
|
'remote_addr': {'required': True}, |
|
'verify_code': {'required': True}, |
|
'joiner_display': {'label': _('Joiner')}, |
|
} |
|
|
|
def create(self, validate_data): |
|
sharing = validate_data.get('sharing') |
|
if sharing: |
|
validate_data['session'] = sharing.session |
|
validate_data['org_id'] = sharing.org_id |
|
return super().create(validate_data)
|
|
|