perf: rdp token 复用

perf: connection token
pull/12958/head
ibuler 2024-04-07 12:11:44 +08:00 committed by Bryan
parent cd19a276c9
commit f0e87ef3f8
3 changed files with 12 additions and 3 deletions

View File

@ -223,12 +223,17 @@ class ExtraActionApiMixin(RDPFileClientProtocolURLMixin):
validate_exchange_token: callable validate_exchange_token: callable
@action(methods=['POST', 'GET'], detail=True, url_path='rdp-file') @action(methods=['POST', 'GET'], detail=True, url_path='rdp-file')
def get_rdp_file(self, *args, **kwargs): def get_rdp_file(self, request, *args, **kwargs):
token = self.get_object() token = self.get_object()
token.is_valid() token.is_valid()
filename, content = self.get_rdp_file_info(token) filename, content = self.get_rdp_file_info(token)
filename = '{}.rdp'.format(filename)
response = HttpResponse(content, content_type='application/octet-stream') response = HttpResponse(content, content_type='application/octet-stream')
if is_true(request.query_params.get('reusable')):
token.set_reusable(True)
filename = '{}-{}'.format(filename, token.date_expired.strftime('%Y%m%d_%H%M%S'))
filename += '.rdp'
response['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'%s' % filename response['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'%s' % filename
return response return response

View File

@ -82,12 +82,15 @@ class ConnectionToken(JMSOrgBaseModel):
self.save(update_fields=['date_expired']) self.save(update_fields=['date_expired'])
def set_reusable(self, is_reusable): def set_reusable(self, is_reusable):
if not settings.CONNECTION_TOKEN_REUSABLE:
return
self.is_reusable = is_reusable self.is_reusable = is_reusable
if self.is_reusable: if self.is_reusable:
seconds = settings.CONNECTION_TOKEN_REUSABLE_EXPIRATION seconds = settings.CONNECTION_TOKEN_REUSABLE_EXPIRATION
else: else:
seconds = settings.CONNECTION_TOKEN_ONETIME_EXPIRATION seconds = settings.CONNECTION_TOKEN_ONETIME_EXPIRATION
self.date_expired = timezone.now() + timedelta(seconds=seconds)
self.date_expired = self.date_created + timedelta(seconds=seconds)
self.save(update_fields=['is_reusable', 'date_expired']) self.save(update_fields=['is_reusable', 'date_expired'])
def renewal(self): def renewal(self):

View File

@ -34,6 +34,7 @@ class NativeClient(TextChoices):
db_client = 'db_client', _('DB Client') db_client = 'db_client', _('DB Client')
# Razor # Razor
mstsc = 'mstsc', _('Remote Desktop') mstsc = 'mstsc', _('Remote Desktop')
rdp_guide = 'rdp_guide', _('RDP Guide')
@classmethod @classmethod
def get_native_clients(cls): def get_native_clients(cls):