From 61648967934dfb19560b1183201acafd4136c170 Mon Sep 17 00:00:00 2001 From: ibuler Date: Wed, 19 Oct 2016 18:33:14 +0800 Subject: [PATCH] Update some thing --- apps/terminal/api.py | 8 +- apps/terminal/forms.py | 17 ++++ apps/terminal/hands.py | 1 + apps/terminal/models.py | 7 +- apps/terminal/serializers.py | 11 ++- .../templates/terminal/terminal_list.html | 54 ++++++------- .../templates/terminal/terminal_update.html | 78 +++++++++++++++++++ apps/terminal/urls.py | 3 +- apps/terminal/views.py | 16 +++- .../templates/users/_select_user_modal.html | 6 +- apps/users/templates/users/user_list.html | 4 +- 11 files changed, 158 insertions(+), 47 deletions(-) create mode 100644 apps/terminal/forms.py create mode 100644 apps/terminal/templates/terminal/terminal_update.html diff --git a/apps/terminal/api.py b/apps/terminal/api.py index c052eac85..d055781c6 100644 --- a/apps/terminal/api.py +++ b/apps/terminal/api.py @@ -11,7 +11,7 @@ from .serializers import TerminalSerializer, TerminalHeatbeatSerializer from .hands import IsSuperUserOrTerminalUser -class TerminalApi(ListCreateAPIView): +class TerminalCreateListApi(ListCreateAPIView): queryset = Terminal.objects.all() serializer_class = TerminalSerializer permission_classes = (AllowAny,) @@ -21,20 +21,20 @@ class TerminalApi(ListCreateAPIView): if name: terminal = get_object_or_none(Terminal, name=name) if terminal: - if terminal.is_accepted and terminal.is_active: + if terminal.is_active: return Response(data={'data': {'name': name, 'id': terminal.id}, 'msg': 'Success'}, status=200) else: return Response(data={'data': {'name': name, 'ip': terminal.ip}, - 'msg': 'Need admin accept or active it'}, + 'msg': 'Need admin active it'}, status=203) else: ip = request.META.get('X-Real-IP') or request.META.get('REMOTE_ADDR') terminal = Terminal.objects.create(name=name, ip=ip) return Response(data={'data': {'name': name, 'ip': terminal.ip}, - 'msg': 'Need admin accept or active it'}, + 'msg': 'Need admin active it'}, status=204) else: return Response(data={'msg': 'Secrete key invalid'}, status=401) diff --git a/apps/terminal/forms.py b/apps/terminal/forms.py new file mode 100644 index 000000000..dfc6787c9 --- /dev/null +++ b/apps/terminal/forms.py @@ -0,0 +1,17 @@ +# ~*~ coding: utf-8 ~*~ +# + +from django import forms +from django.utils.translation import ungettext_lazy as _ + +from .models import Terminal + + +class TerminalForm(forms.ModelForm): + class Meta: + model = Terminal + fields = ['name', 'ip', 'is_active', 'type', 'url', 'comment'] + help_texts = { + 'url': 'Example: ssh://192.168.1.1:22 or http://jms.jumpserver.org, that user login' + } + diff --git a/apps/terminal/hands.py b/apps/terminal/hands.py index baab7f3ad..bf513c03a 100644 --- a/apps/terminal/hands.py +++ b/apps/terminal/hands.py @@ -2,4 +2,5 @@ # from users.backends import IsSuperUserOrTerminalUser +from audits.models import ProxyLog diff --git a/apps/terminal/models.py b/apps/terminal/models.py index 0a8b47819..8b65ed6da 100644 --- a/apps/terminal/models.py +++ b/apps/terminal/models.py @@ -15,13 +15,10 @@ class Terminal(models.Model): ip = models.GenericIPAddressField(verbose_name=_('From ip')) is_active = models.BooleanField(default=False, verbose_name=_('Is active')) is_bound_ip = models.BooleanField(default=False, verbose_name=_('Is bound ip')) - heatbeat_interval = models.IntegerField(default=60, verbose_name=_('Heatbeat interval')) type = models.CharField(choices=TYPE_CHOICES, max_length=2, verbose_name=_('Terminal type')) url = models.CharField(max_length=100, verbose_name=_('URL to login')) - mail_to = models.ManyToManyField(User, verbose_name=_('Mail to')) - is_accepted = models.BooleanField(default=False, verbose_name=_('Is accepted')) date_created = models.DateTimeField(auto_now_add=True) - comment = models.TextField(verbose_name=_('Comment')) + comment = models.TextField(blank=True, verbose_name=_('Comment')) def is_valid(self): return self.is_active and self.is_accepted @@ -36,7 +33,7 @@ class Terminal(models.Model): class Meta: db_table = 'terminal' - ordering = ['name'] + ordering = ['is_active'] class TerminalHeatbeat(models.Model): diff --git a/apps/terminal/serializers.py b/apps/terminal/serializers.py index cc40938cd..5bac8e11b 100644 --- a/apps/terminal/serializers.py +++ b/apps/terminal/serializers.py @@ -4,13 +4,20 @@ from rest_framework import serializers from .models import Terminal, TerminalHeatbeat +from .hands import ProxyLog class TerminalSerializer(serializers.ModelSerializer): + proxy_amount = serializers.SerializerMethodField() + class Meta: model = Terminal - fields = ['name', 'ip', 'type', 'url', 'comment', 'is_active', 'is_accepted', - 'get_type_display'] + fields = ['id', 'name', 'ip', 'type', 'url', 'comment', 'is_active', + 'get_type_display', 'proxy_amount'] + + @staticmethod + def get_proxy_amount(obj): + return ProxyLog.objects.filter(terminal=obj.name, is_finished=False).count() class TerminalHeatbeatSerializer(serializers.ModelSerializer): diff --git a/apps/terminal/templates/terminal/terminal_list.html b/apps/terminal/templates/terminal/terminal_list.html index dc4b084bf..346268e8e 100644 --- a/apps/terminal/templates/terminal/terminal_list.html +++ b/apps/terminal/templates/terminal/terminal_list.html @@ -27,7 +27,7 @@ {% trans 'Name' %} {% trans 'IP' %} {% trans 'Type' %} - {% trans 'url' %} + {% trans 'proxy_amount' %} {% trans 'Active' %} {% trans 'Action' %} @@ -36,41 +36,37 @@ {% endblock %} -{% block content_bottom_left %}{% endblock %} {% block custom_foot_js %} + +{% endblock %} + +{% block content %} +
+
+
+
+
+
{{ action }}
+ +
+
+
+ {% csrf_token %} +

{% trans 'Info' %}

+ {{ form.name|bootstrap_horizontal }} + {{ form.ip|bootstrap_horizontal }} + {{ form.type|bootstrap_horizontal }} + {{ form.url|bootstrap_horizontal }} + +
+

{% trans 'Other' %}

+
+ +
+ {{ form.is_active}} +
+
+ {{ form.comment|bootstrap_horizontal }} +
+
+
+ + +
+
+
+
+
+
+
+
+{% endblock %} +{% block custom_foot_js %} + + +{% endblock %} diff --git a/apps/terminal/urls.py b/apps/terminal/urls.py index e85bc82c9..d315bcee9 100644 --- a/apps/terminal/urls.py +++ b/apps/terminal/urls.py @@ -11,9 +11,10 @@ app_name = 'terminal' urlpatterns = [ url(r'^terminal$', views.TerminalListView.as_view(), name='terminal-list'), + url(r'^terminal/(?P\d+)/update$', views.TerminalUpdateView.as_view(), name='terminal-update'), ] urlpatterns += [ - url(r'^v1/terminal/$', api.TerminalApi.as_view(), name='terminal-list-create-api'), + url(r'^v1/terminal/$', api.TerminalCreateListApi.as_view(), name='terminal-list-create-api'), url(r'^v1/terminal-heatbeat/$', api.TerminalHeatbeatApi.as_view(), name='terminal-heatbeat-api'), ] diff --git a/apps/terminal/views.py b/apps/terminal/views.py index c7a76b2bc..51cc273b8 100644 --- a/apps/terminal/views.py +++ b/apps/terminal/views.py @@ -1,10 +1,12 @@ # ~*~ coding: utf-8 ~*~ # -from django.views.generic import ListView +from django.views.generic import ListView, UpdateView from django.utils.translation import ugettext as _ +from django.urls import reverse_lazy from .models import Terminal +from .forms import TerminalForm class TerminalListView(ListView): @@ -15,3 +17,15 @@ class TerminalListView(ListView): context = super(TerminalListView, self).get_context_data(**kwargs) context.update({'app': _('Terminal'), 'action': _('Terminal list')}) return context + + +class TerminalUpdateView(UpdateView): + model = Terminal + form_class = TerminalForm + template_name = 'terminal/terminal_update.html' + success_url = reverse_lazy('terminal:terminal-list') + + def get_context_data(self, **kwargs): + context = super(TerminalUpdateView, self).get_context_data(**kwargs) + context.update({'app': _('Terminal'), 'action': _('Update terminal')}) + return context diff --git a/apps/users/templates/users/_select_user_modal.html b/apps/users/templates/users/_select_user_modal.html index 8863e9d58..5395b0a05 100644 --- a/apps/users/templates/users/_select_user_modal.html +++ b/apps/users/templates/users/_select_user_modal.html @@ -10,12 +10,12 @@
- {% trans 'Name' %} - {% trans 'Username' %} + {% trans 'Name' %} + {% trans 'Username' %} {% trans 'Role' %} {% trans 'User group' %} {% trans 'Asset num' %} - {% trans 'Active' %} + {% trans 'Active' %} diff --git a/apps/users/templates/users/user_list.html b/apps/users/templates/users/user_list.html index af2247855..85d2e206c 100644 --- a/apps/users/templates/users/user_list.html +++ b/apps/users/templates/users/user_list.html @@ -92,7 +92,7 @@ $(document).ready(function(){ jumpserver.initDataTable(options); }).on('click', '#btn_bulk_update', function(){ var action = $('#slct_bulk_update').val(); - var $data_table = $('#user_list_table').DataTable() + var $data_table = $('#user_list_table').DataTable(); var id_list = []; var plain_id_list = []; $data_table.rows({selected: true}).every(function(){ @@ -101,7 +101,7 @@ $(document).ready(function(){ }); if (id_list === []) { return false; - }; + } var the_url = "{% url 'users:user-bulk-update-api' %}"; function doDeactive() { var body = $.each(id_list, function(index, user_object) {