diff --git a/apps/assets/templates/assets/asset_create.html b/apps/assets/templates/assets/asset_create.html index eca0f6a03..99703d2e3 100644 --- a/apps/assets/templates/assets/asset_create.html +++ b/apps/assets/templates/assets/asset_create.html @@ -15,9 +15,9 @@ {% csrf_token %}

{% trans 'Basic' %}

{% bootstrap_field form.hostname layout="horizontal" %} + {% bootstrap_field form.platform layout="horizontal" %} {% bootstrap_field form.ip layout="horizontal" %} {% bootstrap_field form.port layout="horizontal" %} - {% bootstrap_field form.platform layout="horizontal" %} {% bootstrap_field form.public_ip layout="horizontal" %} {% bootstrap_field form.domain layout="horizontal" %} @@ -85,6 +85,17 @@ $(document).ready(function () { allowClear: true, templateSelection: format }); + $("#id_platform").change(function (){ + var platform = $("#id_platform option:selected").text(); + var port = 22; + if(platform === 'Windows'){ + port = 3389; + } + if(platform === 'Other'){ + port = null; + } + $("#id_port").val(port); + }); }) {% endblock %} \ No newline at end of file diff --git a/apps/assets/views/asset.py b/apps/assets/views/asset.py index 306a26a0a..273323193 100644 --- a/apps/assets/views/asset.py +++ b/apps/assets/views/asset.py @@ -304,7 +304,10 @@ class BulkImportAssetView(AdminUserRequiredMixin, JSONResponseMixin, FormView): if v != '': asset_dict[k] = v - asset = get_object_or_none(Asset, id=asset_dict.pop('id', 0)) + asset = None + asset_id = asset_dict.pop('id', None) + if asset_id: + asset = get_object_or_none(Asset, id=asset_id) if not asset: try: if len(Asset.objects.filter(hostname=asset_dict.get('hostname'))): diff --git a/apps/templates/_message.html b/apps/templates/_message.html index 9c64a441f..4c37cc138 100644 --- a/apps/templates/_message.html +++ b/apps/templates/_message.html @@ -7,7 +7,7 @@ Your information was incomplete. Please click this link to complete your information. {% endblocktrans %} - + {% endif %} {% endblock %} @@ -28,7 +28,9 @@ {% for message in messages %}
{{ message|safe }} +
+ {% endfor %} {% endif %} diff --git a/apps/users/forms.py b/apps/users/forms.py index f6c02ff23..f777e0dd7 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -15,6 +15,14 @@ class UserLoginForm(AuthenticationForm): label=_('Password'), widget=forms.PasswordInput, max_length=128, strip=False ) + + +class UserLoginCaptchaForm(AuthenticationForm): + username = forms.CharField(label=_('Username'), max_length=100) + password = forms.CharField( + label=_('Password'), widget=forms.PasswordInput, + max_length=128, strip=False + ) captcha = CaptchaField() diff --git a/apps/users/templates/users/login.html b/apps/users/templates/users/login.html index 13276f6fe..7dd3f5d0a 100644 --- a/apps/users/templates/users/login.html +++ b/apps/users/templates/users/login.html @@ -53,7 +53,7 @@ {% endif %} {% endif %}
- +
diff --git a/apps/users/templates/users/user_list.html b/apps/users/templates/users/user_list.html index 0902c3e73..c7c9b8b28 100644 --- a/apps/users/templates/users/user_list.html +++ b/apps/users/templates/users/user_list.html @@ -107,6 +107,9 @@ $(document).ready(function(){ $('.btn_export').click(function () { var users = []; var rows = table.rows('.selected').data(); + if(rows.length===0){ + rows = table.rows().data(); + } $.each(rows, function (index, obj) { users.push(obj.id) }); diff --git a/apps/users/views/login.py b/apps/users/views/login.py index bb7f58874..7e3d50c8a 100644 --- a/apps/users/views/login.py +++ b/apps/users/views/login.py @@ -2,6 +2,7 @@ from __future__ import unicode_literals import os +from django.core.cache import cache from django.shortcuts import render from django.contrib.auth import login as auth_login, logout as auth_logout from django.contrib.auth.mixins import LoginRequiredMixin @@ -43,7 +44,9 @@ __all__ = [ class UserLoginView(FormView): template_name = 'users/login.html' form_class = forms.UserLoginForm + form_class_captcha = forms.UserLoginCaptchaForm redirect_field_name = 'next' + key_prefix = "_LOGIN_INVALID_{}" def get(self, request, *args, **kwargs): if request.user.is_staff: @@ -58,6 +61,21 @@ class UserLoginView(FormView): set_tmp_user_to_cache(self.request, form.get_user()) return redirect(self.get_success_url()) + def form_invalid(self, form): + ip = get_login_ip(self.request) + cache.set(self.key_prefix.format(ip), 1, 3600) + old_form = form + form = self.form_class_captcha(data=form.data) + form._errors = old_form.errors + return super().form_invalid(form) + + def get_form_class(self): + ip = get_login_ip(self.request) + if cache.get(self.key_prefix.format(ip)): + return self.form_class_captcha + else: + return self.form_class + def get_success_url(self): user = get_user_or_tmp_user(self.request)