From d56f030dc45fa3b9db429c9081455e6264a63a54 Mon Sep 17 00:00:00 2001 From: ibuler Date: Tue, 27 Dec 2016 00:59:52 +0800 Subject: [PATCH] Finish terminal accept --- apps/applications/forms.py | 4 +- apps/applications/models.py | 4 +- .../templates/applications/terminal_form.html | 0 .../templates/applications/terminal_list.html | 43 ++++++++++++++++++- .../terminal_modal_accept.bak.html | 26 +++++++++++ .../applications/terminal_modal_accept.html | 18 ++++++++ apps/applications/urls/views_urls.py | 1 + apps/applications/views.py | 39 +++++++++++++++-- apps/templates/base.html | 1 + apps/users/templates/users/user_list.html | 9 ++-- 10 files changed, 131 insertions(+), 14 deletions(-) create mode 100644 apps/applications/templates/applications/terminal_form.html create mode 100644 apps/applications/templates/applications/terminal_modal_accept.bak.html create mode 100644 apps/applications/templates/applications/terminal_modal_accept.html diff --git a/apps/applications/forms.py b/apps/applications/forms.py index 823f2e8a7..7ca7bea77 100644 --- a/apps/applications/forms.py +++ b/apps/applications/forms.py @@ -14,4 +14,6 @@ class TerminalForm(forms.ModelForm): help_texts = { 'url': 'Example: ssh://192.168.1.1:22 or http://jms.jumpserver.org, that user login' } - + widgets = { + 'name': forms.TextInput(attrs={'readonly': 'readonly'}) + } \ No newline at end of file diff --git a/apps/applications/models.py b/apps/applications/models.py index 65577f2e4..649363574 100644 --- a/apps/applications/models.py +++ b/apps/applications/models.py @@ -13,7 +13,7 @@ class Terminal(models.Model): ) name = models.CharField(max_length=30, unique=True, verbose_name=_('Name')) remote_addr = models.GenericIPAddressField(verbose_name=_('Remote address'), blank=True, null=True) - type = models.CharField(choices=TYPE_CHOICES, max_length=2, blank=True, verbose_name=_('Terminal type')) + type = models.CharField(choices=TYPE_CHOICES, max_length=3, blank=True, verbose_name=_('Terminal type')) user = models.OneToOneField(User, verbose_name='Application user', null=True) url = models.CharField(max_length=100, blank=True, verbose_name=_('URL to login')) is_accepted = models.BooleanField(default=False, verbose_name='Is Accepted') @@ -53,7 +53,7 @@ class Terminal(models.Model): __str__ = __unicode__ class Meta: - db_table = 'applications' + ordering = ('is_accepted',) class TerminalHeatbeat(models.Model): diff --git a/apps/applications/templates/applications/terminal_form.html b/apps/applications/templates/applications/terminal_form.html new file mode 100644 index 000000000..e69de29bb diff --git a/apps/applications/templates/applications/terminal_list.html b/apps/applications/templates/applications/terminal_list.html index a283c1fed..cf570395d 100644 --- a/apps/applications/templates/applications/terminal_list.html +++ b/apps/applications/templates/applications/terminal_list.html @@ -2,15 +2,17 @@ {% load i18n static %} {% block custom_head_css_js %} {{ block.super }} + {% endblock %} {% block table_search %}{% endblock %} @@ -36,6 +38,8 @@ +{% include 'applications/terminal_modal_accept.html' %} + {% endblock %} {% block custom_foot_js %} @@ -70,7 +74,7 @@ $(document).ready(function(){ var delete_btn = '{% trans "Delete" %}' .replace('99991937', cellData) .replace('99991938', rowData.name); - var accept_btn = '{% trans "Accept" %} ' + var accept_btn = '{% trans "Accept" %} ' .replace('99991937', cellData); var reject_btn = '{% trans "Reject" %}' if (rowData.is_accepted) { @@ -86,12 +90,47 @@ $(document).ready(function(){ op_html: $('#actions').html() }; jumpserver.initDataTable(options); + }).on('click', '.btn_delete', function(){ var $this = $(this); var uid = $this.data('uid'); var name = $(this).data('name'); var the_url = '{% url "api-applications:terminal-detail" pk=99991937 %}'.replace('99991937', uid); objectDelete($this, name, the_url) + +}).on('click', '.btn-accept', function () { + var $this = $(this); + var terminal_id = $this.data('id'); + var the_url = "{% url 'api-applications:terminal-detail' pk=99991937 %}".replace('99991937', terminal_id); + var post_url = $('#form_terminal_accept').attr('action').replace('99991937', terminal_id); + console.log(post_url); + $.ajax({ + url: the_url, + method: 'GET', + success: function (data) { + $('#id_name').val(data.name); + $('#id_remote_addr').val(data.remote_addr); + $('#id_type').val(data.type); + $('#id_url').val(data.url); + $('#id_comment').val(data.comment); + $('#form_terminal_accept').attr('action', post_url) + } + }); + $('#modal_terminal_accept').modal({ + show: true + }); +}).on('click', '#btn_terminal_accept', function () { + var $form = $('#form_terminal_accept'); + function success (data, textStatus, jqXHR) { + if (data.success === false) { + console.log(data.msg); + window.location.reload() + + } else { + console.log(data.msg); + } + } + $form.ajaxSubmit({success: success}); }) {% endblock %} diff --git a/apps/applications/templates/applications/terminal_modal_accept.bak.html b/apps/applications/templates/applications/terminal_modal_accept.bak.html new file mode 100644 index 000000000..1664642dc --- /dev/null +++ b/apps/applications/templates/applications/terminal_modal_accept.bak.html @@ -0,0 +1,26 @@ +{% extends '_modal.html' %} +{% load static %} +{% load bootstrap %} +{% load i18n %} + +{% block modal_body %} +
+ {% csrf_token %} + {{ form.name|bootstrap_horizontal }} + {{ form.remote_addr|bootstrap_horizontal }} + {{ form.type|bootstrap_horizontal }} + {{ form.url|bootstrap_horizontal }} + {{ form.comment|bootstrap_horizontal }} + +
+
+
+ + +
+
+
+{% endblock %} + +{% block custom_foot_js %} +{% endblock %} \ No newline at end of file diff --git a/apps/applications/templates/applications/terminal_modal_accept.html b/apps/applications/templates/applications/terminal_modal_accept.html new file mode 100644 index 000000000..a48923dd0 --- /dev/null +++ b/apps/applications/templates/applications/terminal_modal_accept.html @@ -0,0 +1,18 @@ +{% extends '_modal.html' %} +{% load i18n %} +{% block modal_id %}modal_terminal_accept{% endblock %} +{% block modal_class %}modal-lg{% endblock %} +{% block modal_title%}{% trans "Accept terminal registration" %}{% endblock %} +{% block modal_body %} +{% load bootstrap %} +
+ {% csrf_token %} + {{ form.name|bootstrap_horizontal }} + {{ form.remote_addr|bootstrap_horizontal }} + {{ form.type|bootstrap_horizontal }} + {{ form.url|bootstrap_horizontal }} + {{ form.comment|bootstrap_horizontal }} +
+ +{% endblock %} +{% block modal_confirm_id %}btn_terminal_accept{% endblock %} \ No newline at end of file diff --git a/apps/applications/urls/views_urls.py b/apps/applications/urls/views_urls.py index 87b7b3372..96a044a61 100644 --- a/apps/applications/urls/views_urls.py +++ b/apps/applications/urls/views_urls.py @@ -11,4 +11,5 @@ app_name = 'applications' urlpatterns = [ url(r'^terminal$', views.TerminalListView.as_view(), name='terminal-list'), url(r'^terminal/(?P\d+)/update$', views.TerminalUpdateView.as_view(), name='terminal-update'), + url(r'^terminal/(?P\d+)/modal/accept$', views.TerminalModelAccept.as_view(), name='terminal-modal-accept'), ] diff --git a/apps/applications/views.py b/apps/applications/views.py index 24b960a6f..3b083c15e 100644 --- a/apps/applications/views.py +++ b/apps/applications/views.py @@ -1,21 +1,28 @@ # ~*~ coding: utf-8 ~*~ # -from django.views.generic import ListView, UpdateView, DeleteView +from django.views.generic import ListView, UpdateView, DeleteView, FormView from django.utils.translation import ugettext as _ from django.urls import reverse_lazy from .models import Terminal +from users.utils import AdminUserRequiredMixin +from common.mixins import JSONResponseMixin from .forms import TerminalForm class TerminalListView(ListView): model = Terminal template_name = 'applications/terminal_list.html' + form_class = TerminalForm def get_context_data(self, **kwargs): context = super(TerminalListView, self).get_context_data(**kwargs) - context.update({'app': _('Terminal'), 'action': _('Terminal list')}) + context.update({ + 'app': _('Terminal'), + 'action': _('Terminal list'), + 'form': self.form_class() + }) return context @@ -34,4 +41,30 @@ class TerminalUpdateView(UpdateView): class TerminalDeleteView(DeleteView): model = Terminal template_name = 'assets/delete_confirm.html' - success_url = reverse_lazy('applications:applications-list') \ No newline at end of file + success_url = reverse_lazy('applications:applications-list') + + +class TerminalModelAccept(AdminUserRequiredMixin, JSONResponseMixin, UpdateView): + model = Terminal + form_class = TerminalForm + + def form_valid(self, form): + terminal = form.save() + terminal.is_accepted = True + terminal.save() + data = { + 'success': True, + 'msg': 'success' + } + print('Valid') + return self.render_json_response(data) + + def form_invalid(self, form): + print(form.errors) + data = { + 'success': False, + 'msg': ','.join(form.errors) + } + return self.render_json_response(data) + + diff --git a/apps/templates/base.html b/apps/templates/base.html index 2cee87750..fea042061 100644 --- a/apps/templates/base.html +++ b/apps/templates/base.html @@ -16,6 +16,7 @@
+ {% include '_left_side_bar.html' %}
{% include '_header_bar.html' %} diff --git a/apps/users/templates/users/user_list.html b/apps/users/templates/users/user_list.html index bf8493f15..f4a353bbd 100644 --- a/apps/users/templates/users/user_list.html +++ b/apps/users/templates/users/user_list.html @@ -132,8 +132,7 @@ $(document).ready(function(){ $form.ajaxSubmit({success: success}); }) -}) - .on('click', '#btn_bulk_update', function(){ +}).on('click', '#btn_bulk_update', function(){ var action = $('#slct_bulk_update').val(); var $data_table = $('#user_list_table').DataTable(); var id_list = []; @@ -205,15 +204,13 @@ $(document).ready(function(){ default: break; } -}) - .on('click', '.btn_user_delete', function(){ +}).on('click', '.btn_user_delete', function(){ var $this = $(this); var name = $this.data('name'); var uid = $this.data('uid'); var the_url = '{% url "api-users:user-detail" pk=99991937 %}'.replace('99991937', uid); objectDelete($this, name, the_url); -}) - .on('click', '#btn_user_bulk_update', function(){ +}).on('click', '#btn_user_bulk_update', function(){ var json_data = $('#fm_user_bulk_update').serializeObject(); var body = {}; body.enable_otp = (json_data.enable_otp === 'on')? true: false;