mirror of https://github.com/jumpserver/jumpserver
pref: 添加 applet download
parent
3bacd626e8
commit
b159f16513
|
@ -5,6 +5,7 @@ import os.path
|
||||||
|
|
||||||
from django.core.files.storage import default_storage
|
from django.core.files.storage import default_storage
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
|
from django.http import HttpResponse
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
@ -22,6 +23,7 @@ class AppletViewSet(viewsets.ModelViewSet):
|
||||||
serializer_class = serializers.AppletSerializer
|
serializer_class = serializers.AppletSerializer
|
||||||
rbac_perms = {
|
rbac_perms = {
|
||||||
'upload': 'terminal.add_applet',
|
'upload': 'terminal.add_applet',
|
||||||
|
'download': 'terminal.view_applet',
|
||||||
}
|
}
|
||||||
|
|
||||||
def perform_destroy(self, instance):
|
def perform_destroy(self, instance):
|
||||||
|
@ -84,6 +86,16 @@ class AppletViewSet(viewsets.ModelViewSet):
|
||||||
serializer.save()
|
serializer.save()
|
||||||
return Response(serializer.data, status=201)
|
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):
|
class AppletPublicationViewSet(viewsets.ModelViewSet):
|
||||||
queryset = AppletPublication.objects.all()
|
queryset = AppletPublication.objects.all()
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
HOST_NAME: test
|
HOST_NAME: test
|
||||||
CORE_HOST: https://demo.jumpserver.org
|
CORE_HOST: https://demo.jumpserver.org
|
||||||
BOOTSTRAP_TOKEN: PleaseChangeMe
|
BOOTSTRAP_TOKEN: PleaseChangeMe
|
||||||
RDS_Licensing: enabled
|
RDS_Licensing: true
|
||||||
RDS_LicenseServer: 127.0.0.1
|
RDS_LicenseServer: 127.0.0.1
|
||||||
RDS_LicensingMode: 4
|
RDS_LicensingMode: 4
|
||||||
RDS_fSingleSessionPerUser: 1
|
RDS_fSingleSessionPerUser: 1
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
name: RDS-Licensing
|
name: RDS-Licensing
|
||||||
state: present
|
state: present
|
||||||
include_management_tools: yes
|
include_management_tools: yes
|
||||||
when: RDS_Licensing == "enabled"
|
when: RDS_Licensing
|
||||||
|
|
||||||
- name: Install RDS-RD-Server (RDS)
|
- name: Install RDS-RD-Server (RDS)
|
||||||
ansible.windows.win_feature:
|
ansible.windows.win_feature:
|
||||||
|
|
|
@ -1,2 +1,18 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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
|
||||||
|
|
Loading…
Reference in New Issue