pref: 添加 applet download

pull/9008/head
ibuler 2022-11-01 18:40:42 +08:00
parent 3bacd626e8
commit b159f16513
3 changed files with 30 additions and 2 deletions

View File

@ -5,6 +5,7 @@ import os.path
from django.core.files.storage import default_storage
from rest_framework import viewsets
from django.http import HttpResponse
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.serializers import ValidationError
@ -22,6 +23,7 @@ class AppletViewSet(viewsets.ModelViewSet):
serializer_class = serializers.AppletSerializer
rbac_perms = {
'upload': 'terminal.add_applet',
'download': 'terminal.view_applet',
}
def perform_destroy(self, instance):
@ -84,6 +86,16 @@ class AppletViewSet(viewsets.ModelViewSet):
serializer.save()
return Response(serializer.data, status=201)
@action(detail=True, methods=['get'])
def download(self, request, *args, **kwargs):
instance = super().get_object()
path = default_storage.path('applets/{}'.format(instance.name))
zip_path = shutil.make_archive(path, 'zip', path)
with open(zip_path, 'rb') as f:
response = HttpResponse(f.read(), status=200, content_type='application/octet-stream')
response['Content-Disposition'] = 'attachment; filename*=UTF-8\'\'{}.zip'.format(instance.name)
return response
class AppletPublicationViewSet(viewsets.ModelViewSet):
queryset = AppletPublication.objects.all()

View File

@ -7,7 +7,7 @@
HOST_NAME: test
CORE_HOST: https://demo.jumpserver.org
BOOTSTRAP_TOKEN: PleaseChangeMe
RDS_Licensing: enabled
RDS_Licensing: true
RDS_LicenseServer: 127.0.0.1
RDS_LicensingMode: 4
RDS_fSingleSessionPerUser: 1
@ -20,7 +20,7 @@
name: RDS-Licensing
state: present
include_management_tools: yes
when: RDS_Licensing == "enabled"
when: RDS_Licensing
- name: Install RDS-RD-Server (RDS)
ansible.windows.win_feature:

View File

@ -1,2 +1,18 @@
# -*- coding: utf-8 -*-
#
from django.db.models.signals import post_save
from django.dispatch import receiver
from .models import Applet, AppletHost
@receiver(post_save, sender=AppletHost)
def on_applet_host_create(sender, instance, created=False, **kwargs):
pass
@receiver(post_save, sender=Applet)
def on_applet_create(sender, instance, created=False, **kwargs):
pass