Commit d56f030d authored by ibuler's avatar ibuler

Finish terminal accept

parent 775cd523
...@@ -14,4 +14,6 @@ class TerminalForm(forms.ModelForm): ...@@ -14,4 +14,6 @@ class TerminalForm(forms.ModelForm):
help_texts = { help_texts = {
'url': 'Example: ssh://192.168.1.1:22 or http://jms.jumpserver.org, that user login' '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
...@@ -13,7 +13,7 @@ class Terminal(models.Model): ...@@ -13,7 +13,7 @@ class Terminal(models.Model):
) )
name = models.CharField(max_length=30, unique=True, verbose_name=_('Name')) name = models.CharField(max_length=30, unique=True, verbose_name=_('Name'))
remote_addr = models.GenericIPAddressField(verbose_name=_('Remote address'), blank=True, null=True) 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) user = models.OneToOneField(User, verbose_name='Application user', null=True)
url = models.CharField(max_length=100, blank=True, verbose_name=_('URL to login')) url = models.CharField(max_length=100, blank=True, verbose_name=_('URL to login'))
is_accepted = models.BooleanField(default=False, verbose_name='Is Accepted') is_accepted = models.BooleanField(default=False, verbose_name='Is Accepted')
...@@ -53,7 +53,7 @@ class Terminal(models.Model): ...@@ -53,7 +53,7 @@ class Terminal(models.Model):
__str__ = __unicode__ __str__ = __unicode__
class Meta: class Meta:
db_table = 'applications' ordering = ('is_accepted',)
class TerminalHeatbeat(models.Model): class TerminalHeatbeat(models.Model):
......
...@@ -2,15 +2,17 @@ ...@@ -2,15 +2,17 @@
{% load i18n static %} {% load i18n static %}
{% block custom_head_css_js %} {% block custom_head_css_js %}
{{ block.super }} {{ block.super }}
<style> <style>
div.dataTables_wrapper div.dataTables_filter, div.dataTables_wrapper div.dataTables_filter,
.dataTables_length { .dataTables_length {
float: right !important; float: right !important;
} }
div.dataTables_wrapper div.dataTables_filter { div.dataTables_wrapper div.dataTables_filter {
margin-left: 15px; margin-left: 15px;
} }
#modal .modal-body { max-height: 200px; }
</style> </style>
{% endblock %} {% endblock %}
{% block table_search %}{% endblock %} {% block table_search %}{% endblock %}
...@@ -36,6 +38,8 @@ ...@@ -36,6 +38,8 @@
<tbody> <tbody>
</tbody> </tbody>
</table> </table>
{% include 'applications/terminal_modal_accept.html' %}
{% endblock %} {% endblock %}
{% block custom_foot_js %} {% block custom_foot_js %}
<script src="{% static 'js/jquery.form.min.js' %}"></script> <script src="{% static 'js/jquery.form.min.js' %}"></script>
...@@ -70,7 +74,7 @@ $(document).ready(function(){ ...@@ -70,7 +74,7 @@ $(document).ready(function(){
var delete_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_delete" data-uid="99991937" data-name="99991938">{% trans "Delete" %}</a>' var delete_btn = '<a class="btn btn-xs btn-danger m-l-xs btn_delete" data-uid="99991937" data-name="99991938">{% trans "Delete" %}</a>'
.replace('99991937', cellData) .replace('99991937', cellData)
.replace('99991938', rowData.name); .replace('99991938', rowData.name);
var accept_btn = '<a href="" class="btn btn-xs btn-primary">{% trans "Accept" %}</a> ' var accept_btn = '<a class="btn btn-xs btn-primary btn-accept" data-id="99991937">{% trans "Accept" %}</a> '
.replace('99991937', cellData); .replace('99991937', cellData);
var reject_btn = '<a href="" class="btn btn-xs btn-danger">{% trans "Reject" %}</a>' var reject_btn = '<a href="" class="btn btn-xs btn-danger">{% trans "Reject" %}</a>'
if (rowData.is_accepted) { if (rowData.is_accepted) {
...@@ -86,12 +90,47 @@ $(document).ready(function(){ ...@@ -86,12 +90,47 @@ $(document).ready(function(){
op_html: $('#actions').html() op_html: $('#actions').html()
}; };
jumpserver.initDataTable(options); jumpserver.initDataTable(options);
}).on('click', '.btn_delete', function(){ }).on('click', '.btn_delete', function(){
var $this = $(this); var $this = $(this);
var uid = $this.data('uid'); var uid = $this.data('uid');
var name = $(this).data('name'); var name = $(this).data('name');
var the_url = '{% url "api-applications:terminal-detail" pk=99991937 %}'.replace('99991937', uid); var the_url = '{% url "api-applications:terminal-detail" pk=99991937 %}'.replace('99991937', uid);
objectDelete($this, name, the_url) 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});
}) })
</script> </script>
{% endblock %} {% endblock %}
{% extends '_modal.html' %}
{% load static %}
{% load bootstrap %}
{% load i18n %}
{% block modal_body %}
<form action="" method="post" class="form-horizontal">
{% csrf_token %}
{{ form.name|bootstrap_horizontal }}
{{ form.remote_addr|bootstrap_horizontal }}
{{ form.type|bootstrap_horizontal }}
{{ form.url|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }}
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
<button class="btn btn-default" type="reset"> {% trans 'Reset' %}</button>
<button id="submit_button" class="btn btn-primary" type="submit">{% trans 'Submit' %}</button>
</div>
</div>
</form>
{% endblock %}
{% block custom_foot_js %}
{% endblock %}
\ No newline at end of file
{% 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 %}
<form action="{% url 'applications:terminal-modal-accept' pk="99991937" %}" method="post" class="form-horizontal" id="form_terminal_accept">
{% csrf_token %}
{{ form.name|bootstrap_horizontal }}
{{ form.remote_addr|bootstrap_horizontal }}
{{ form.type|bootstrap_horizontal }}
{{ form.url|bootstrap_horizontal }}
{{ form.comment|bootstrap_horizontal }}
</form>
{% endblock %}
{% block modal_confirm_id %}btn_terminal_accept{% endblock %}
\ No newline at end of file
...@@ -11,4 +11,5 @@ app_name = 'applications' ...@@ -11,4 +11,5 @@ app_name = 'applications'
urlpatterns = [ urlpatterns = [
url(r'^terminal$', views.TerminalListView.as_view(), name='terminal-list'), url(r'^terminal$', views.TerminalListView.as_view(), name='terminal-list'),
url(r'^terminal/(?P<pk>\d+)/update$', views.TerminalUpdateView.as_view(), name='terminal-update'), url(r'^terminal/(?P<pk>\d+)/update$', views.TerminalUpdateView.as_view(), name='terminal-update'),
url(r'^terminal/(?P<pk>\d+)/modal/accept$', views.TerminalModelAccept.as_view(), name='terminal-modal-accept'),
] ]
# ~*~ coding: utf-8 ~*~ # ~*~ 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.utils.translation import ugettext as _
from django.urls import reverse_lazy from django.urls import reverse_lazy
from .models import Terminal from .models import Terminal
from users.utils import AdminUserRequiredMixin
from common.mixins import JSONResponseMixin
from .forms import TerminalForm from .forms import TerminalForm
class TerminalListView(ListView): class TerminalListView(ListView):
model = Terminal model = Terminal
template_name = 'applications/terminal_list.html' template_name = 'applications/terminal_list.html'
form_class = TerminalForm
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
context = super(TerminalListView, self).get_context_data(**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 return context
...@@ -34,4 +41,30 @@ class TerminalUpdateView(UpdateView): ...@@ -34,4 +41,30 @@ class TerminalUpdateView(UpdateView):
class TerminalDeleteView(DeleteView): class TerminalDeleteView(DeleteView):
model = Terminal model = Terminal
template_name = 'assets/delete_confirm.html' template_name = 'assets/delete_confirm.html'
success_url = reverse_lazy('applications:applications-list') success_url = reverse_lazy('applications:applications-list')
\ No newline at end of file
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)
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
<body> <body>
<div id="wrapper"> <div id="wrapper">
{% include '_left_side_bar.html' %} {% include '_left_side_bar.html' %}
<div id="page-wrapper" class="gray-bg"> <div id="page-wrapper" class="gray-bg">
{% include '_header_bar.html' %} {% include '_header_bar.html' %}
......
...@@ -132,8 +132,7 @@ $(document).ready(function(){ ...@@ -132,8 +132,7 @@ $(document).ready(function(){
$form.ajaxSubmit({success: success}); $form.ajaxSubmit({success: success});
}) })
}) }).on('click', '#btn_bulk_update', function(){
.on('click', '#btn_bulk_update', function(){
var action = $('#slct_bulk_update').val(); var action = $('#slct_bulk_update').val();
var $data_table = $('#user_list_table').DataTable(); var $data_table = $('#user_list_table').DataTable();
var id_list = []; var id_list = [];
...@@ -205,15 +204,13 @@ $(document).ready(function(){ ...@@ -205,15 +204,13 @@ $(document).ready(function(){
default: default:
break; break;
} }
}) }).on('click', '.btn_user_delete', function(){
.on('click', '.btn_user_delete', function(){
var $this = $(this); var $this = $(this);
var name = $this.data('name'); var name = $this.data('name');
var uid = $this.data('uid'); var uid = $this.data('uid');
var the_url = '{% url "api-users:user-detail" pk=99991937 %}'.replace('99991937', uid); var the_url = '{% url "api-users:user-detail" pk=99991937 %}'.replace('99991937', uid);
objectDelete($this, name, the_url); 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 json_data = $('#fm_user_bulk_update').serializeObject();
var body = {}; var body = {};
body.enable_otp = (json_data.enable_otp === 'on')? true: false; body.enable_otp = (json_data.enable_otp === 'on')? true: false;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment