From af2db2d8702ba2855a69b2dad4ac458793a23592 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 7 Mar 2018 11:28:42 +0800 Subject: [PATCH] =?UTF-8?q?[Update]=20=E5=A2=9E=E5=8A=A0=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E7=BB=88=E7=AB=AFsession=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/i18n/zh/LC_MESSAGES/django.mo | Bin 29822 -> 29810 bytes apps/i18n/zh/LC_MESSAGES/django.po | 41 ++++++++---------- apps/jumpserver/urls.py | 2 +- apps/terminal/api.py | 26 +++++++++-- apps/terminal/serializers.py | 8 +++- .../templates/terminal/session_list.html | 37 +++++++++++----- apps/terminal/urls/api_urls.py | 1 + apps/terminal/views/session.py | 1 + 8 files changed, 77 insertions(+), 39 deletions(-) diff --git a/apps/i18n/zh/LC_MESSAGES/django.mo b/apps/i18n/zh/LC_MESSAGES/django.mo index c3c6b39c89b4e55aeeaddfb10845f41f71836835..2861b01286de4833fc9ab469d9fbb629eaa7b721 100644 GIT binary patch delta 9399 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 i)ZhAg%8sC|yp_Gwg$aHsg@KCMW(5x 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 diff --git a/apps/i18n/zh/LC_MESSAGES/django.po b/apps/i18n/zh/LC_MESSAGES/django.po index 05acb43c3..d67596643 100644 --- a/apps/i18n/zh/LC_MESSAGES/django.po +++ b/apps/i18n/zh/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Jumpserver 0.3.3\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2018-03-06 17:57+0800\n" +"POT-Creation-Date: 2018-03-07 11:27+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: ibuler \n" "Language-Team: Jumpserver team\n" @@ -660,12 +660,6 @@ msgstr "更新" msgid "Delete" msgstr "删除" -#: assets/templates/assets/_system_user.html:16 -#: assets/templates/assets/system_user_list.html:16 -#: assets/views/system_user.py:45 -msgid "Create system user" -msgstr "创建系统用户" - #: assets/templates/assets/_system_user.html:37 #: assets/templates/assets/asset_create.html:16 #: assets/templates/assets/asset_update.html:21 @@ -762,12 +756,6 @@ msgstr "测试" msgid "Task has been send, seen left asset status" msgstr "任务已下发,查看左侧资产状态" -#: assets/templates/assets/admin_user_create_update.html:16 -#: assets/templates/assets/admin_user_list.html:14 -#: assets/views/admin_user.py:48 -msgid "Create admin user" -msgstr "创建管理用户" - #: assets/templates/assets/admin_user_detail.html:83 msgid "Replace node assets admin user with this" msgstr "替换资产的管理员" @@ -788,6 +776,11 @@ msgstr "替换资产的管理员" msgid "Confirm" msgstr "确认" +#: assets/templates/assets/admin_user_list.html:14 +#: assets/views/admin_user.py:48 +msgid "Create admin user" +msgstr "创建管理用户" + #: assets/templates/assets/admin_user_list.html:26 #: assets/templates/assets/system_user_list.html:28 msgid "Unreachable" @@ -979,6 +972,11 @@ msgstr "Uid" msgid "Add to node" msgstr "添加到节点" +#: assets/templates/assets/system_user_list.html:16 +#: assets/views/system_user.py:45 +msgid "Create system user" +msgstr "创建系统用户" + #: assets/templates/assets/system_user_list.html:131 msgid "This will delete the selected System Users !!!" msgstr "删除选择系统用户" @@ -1607,10 +1605,6 @@ msgstr "选择资产组" msgid "Join" msgstr "加入" -#: perms/templates/perms/asset_permission_create_update.html:17 -msgid "Create asset permission " -msgstr "创建资产权限" - #: perms/templates/perms/asset_permission_detail.html:66 msgid "User count" msgstr "用户数量" @@ -1783,7 +1777,7 @@ msgstr "Web终端" #: templates/_nav.html:50 terminal/templates/terminal/session_list.html:75 #: terminal/views/command.py:47 terminal/views/session.py:75 -#: terminal/views/session.py:92 terminal/views/session.py:114 +#: terminal/views/session.py:93 terminal/views/session.py:115 #: terminal/views/terminal.py:31 terminal/views/terminal.py:46 #: terminal/views/terminal.py:58 msgid "Terminal" @@ -1896,7 +1890,7 @@ msgid "Goto" msgstr "转到" #: terminal/templates/terminal/session_detail.html:17 -#: terminal/views/session.py:115 +#: terminal/views/session.py:116 msgid "Session detail" msgstr "会话详情" @@ -1939,10 +1933,8 @@ msgid "Terminate" msgstr "终断" #: terminal/templates/terminal/session_list.html:116 -#, fuzzy -#| msgid "Deactive selected" msgid "Terminate selected" -msgstr "禁用所选" +msgstr "终断所选" #: terminal/templates/terminal/session_list.html:136 msgid "Terminate task send, waiting ..." @@ -1991,7 +1983,7 @@ msgstr "信息" msgid "Session online list" msgstr "在线会话" -#: terminal/views/session.py:93 +#: terminal/views/session.py:94 msgid "Session offline list" msgstr "离线会话" @@ -2653,3 +2645,6 @@ msgstr "密码更新" #: users/views/user.py:374 msgid "Public key update" msgstr "密钥更新" + +#~ msgid "Create asset permission " +#~ msgstr "创建资产权限" diff --git a/apps/jumpserver/urls.py b/apps/jumpserver/urls.py index 986f9b0cb..fe8a4417a 100644 --- a/apps/jumpserver/urls.py +++ b/apps/jumpserver/urls.py @@ -13,7 +13,7 @@ from .views import IndexView, LunaView schema_view = get_schema_view(title='Users API', renderer_classes=[OpenAPIRenderer, SwaggerUIRenderer]) urlpatterns = [ url(r'^$', IndexView.as_view(), name='index'), - url(r'^luna/$', LunaView.as_view(), name='luna-error'), + url(r'^luna/', LunaView.as_view(), name='luna-error'), url(r'^users/', include('users.urls.views_urls', namespace='users')), url(r'^assets/', include('assets.urls.views_urls', namespace='assets')), url(r'^perms/', include('perms.urls.views_urls', namespace='perms')), diff --git a/apps/terminal/api.py b/apps/terminal/api.py index 9ce188af1..88f49c17d 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -5,14 +5,15 @@ import logging import os import uuid -from rest_framework import viewsets, serializers -from rest_framework.views import APIView, Response -from rest_framework.permissions import AllowAny from django.core.cache import cache from django.shortcuts import get_object_or_404, redirect from django.utils import timezone from django.core.files.storage import default_storage from django.http import HttpResponseNotFound +from rest_framework import viewsets, serializers +from rest_framework.views import APIView, Response +from rest_framework.permissions import AllowAny +from rest_framework_bulk import BulkModelViewSet from common.utils import get_object_or_none from .models import Terminal, Status, Session, Task @@ -178,12 +179,29 @@ class SessionViewSet(viewsets.ModelViewSet): return self.queryset -class TaskViewSet(viewsets.ModelViewSet): +class TaskViewSet(BulkModelViewSet): queryset = Task.objects.all() serializer_class = TaskSerializer permission_classes = (IsSuperUserOrAppUser,) +class KillSessionAPI(APIView): + permission_classes = (IsSuperUserOrAppUser,) + model = Task + + def post(self, request, *args, **kwargs): + validated_session = [] + for session_id in request.data: + session = get_object_or_none(Session, id=session_id) + if session and not session.is_finished: + validated_session.append(session_id) + self.model.objects.create( + name="kill_session", args=session.id, + terminal=session.terminal, + ) + return Response({"ok": validated_session}) + + class CommandViewSet(viewsets.ViewSet): """接受app发送来的command log, 格式如下 { diff --git a/apps/terminal/serializers.py b/apps/terminal/serializers.py index 275853411..8c40315a7 100644 --- a/apps/terminal/serializers.py +++ b/apps/terminal/serializers.py @@ -3,7 +3,11 @@ from django.utils import timezone from rest_framework import serializers +from rest_framework_bulk.serializers import BulkListSerializer + +from common.mixins import BulkSerializerMixin +from common.utils import get_object_or_none from .models import Terminal, Status, Session, Task from .backends import get_multi_command_store @@ -47,6 +51,7 @@ class SessionSerializer(serializers.ModelSerializer): class Meta: model = Session + list_serializer_class = BulkListSerializer fields = '__all__' def get_command_amount(self, obj): @@ -60,11 +65,12 @@ class StatusSerializer(serializers.ModelSerializer): model = Status -class TaskSerializer(serializers.ModelSerializer): +class TaskSerializer(BulkSerializerMixin, serializers.ModelSerializer): class Meta: fields = '__all__' model = Task + list_serializer_class = BulkListSerializer class ReplaySerializer(serializers.Serializer): diff --git a/apps/terminal/templates/terminal/session_list.html b/apps/terminal/templates/terminal/session_list.html index b5168f8e4..c7f29f7b1 100644 --- a/apps/terminal/templates/terminal/session_list.html +++ b/apps/terminal/templates/terminal/session_list.html @@ -110,10 +110,10 @@ {% endblock %} {% block content_bottom_left %} -

+