diff --git a/apps/assets/forms.py b/apps/assets/forms.py index 415b5b9fbd116896796e1094346782052c2ec73f..2796d2528fbc666dd98bab2170124ddc242ad60e 100644 --- a/apps/assets/forms.py +++ b/apps/assets/forms.py @@ -70,7 +70,6 @@ class AssetBulkUpdateForm(forms.ModelForm): required=True, help_text='* required', label=_('Select assets'), - # choices=[(asset.id, asset.hostname) for asset in Asset.objects.all()], widget=forms.SelectMultiple( attrs={ 'class': 'select2', @@ -182,7 +181,7 @@ class AdminUserForm(forms.ModelForm): # Form field name can not start with `_`, so redefine it, password = forms.CharField( widget=forms.PasswordInput, max_length=100, - min_length=8, strip=True, required=False, + strip=True, required=False, help_text=_('If also set private key, use that first'), ) # Need use upload private key file except paste private key content @@ -239,7 +238,7 @@ class SystemUserForm(forms.ModelForm): auto_generate_key = forms.BooleanField(initial=True, required=False) # Form field name can not start with `_`, so redefine it, password = forms.CharField(widget=forms.PasswordInput, required=False, - max_length=100, min_length=8, strip=True) + max_length=100, strip=True) # Need use upload private key file except paste private key content private_key_file = forms.FileField(required=False) diff --git a/apps/assets/models/asset.py b/apps/assets/models/asset.py index 656cad850f2028e6ec596f26ffd1420a6ad10abf..3b24b50e0a744af97b5822a85cd26662bf36d6f1 100644 --- a/apps/assets/models/asset.py +++ b/apps/assets/models/asset.py @@ -125,7 +125,7 @@ class Asset(models.Model): 'method': self.admin_user.become_method, 'user': self.admin_user.become_user, 'pass': self.admin_user.become_pass, - } if self.admin_user.become else {}, + } if self.admin_user and self.admin_user.become else {}, } class Meta: diff --git a/apps/assets/templates/assets/_system_user.html b/apps/assets/templates/assets/_system_user.html index 6ba33e2d7c268c2eeabb405ae6a48ab29287cf98..6549cf1012d4fc072eb05208bb81181664c2ab8b 100644 --- a/apps/assets/templates/assets/_system_user.html +++ b/apps/assets/templates/assets/_system_user.html @@ -27,11 +27,6 @@
- {% if form.no_field_errors %} -
- {{ form.non_field_errors }} -
- {% endif %}
{% csrf_token %} {% if form.non_field_errors %} diff --git a/apps/assets/views/system_user.py b/apps/assets/views/system_user.py index 81e9b97df76d3f52119413f39e52644e95b0e314..ca7ebd4124d159893c488b753551e2cfc052658a 100644 --- a/apps/assets/views/system_user.py +++ b/apps/assets/views/system_user.py @@ -13,6 +13,8 @@ from django.views.generic.detail import DetailView, SingleObjectMixin from .. import forms from ..models import Asset, AssetGroup, AdminUser, IDC, SystemUser from ..hands import AdminUserRequiredMixin +from perms.utils import associate_system_users_and_assets + __all__ = ['SystemUserCreateView', 'SystemUserUpdateView', 'SystemUserDetailView', 'SystemUserDeleteView', @@ -74,6 +76,14 @@ class SystemUserUpdateView(AdminUserRequiredMixin, UpdateView): kwargs.update(context) return super(SystemUserUpdateView, self).get_context_data(**kwargs) + def form_valid(self, form): + response = super(SystemUserUpdateView, self).form_valid(form) + system_user = self.object + assets = system_user.assets.all() + asset_groups = system_user.asset_groups.all() + associate_system_users_and_assets([system_user], assets, asset_groups, force=True) + return response + def get_success_url(self): success_url = reverse_lazy('assets:system-user-detail', kwargs={'pk': self.object.pk}) diff --git a/apps/common/utils.py b/apps/common/utils.py index 003c1f5b5df19bff0b5daa40e64a75fef9fbe649..de8e995bd428383c4acd41df0a8b8461c7928b0e 100644 --- a/apps/common/utils.py +++ b/apps/common/utils.py @@ -239,7 +239,11 @@ def ssh_key_gen(length=2048, type='rsa', password=None, username='jumpserver', h def validate_ssh_private_key(text): if isinstance(text, bytes): - text = text.decode("utf-8") + try: + text = text.decode("utf-8") + except UnicodeDecodeError: + return False + key = ssh_key_string_to_obj(text) if key is None: return False diff --git a/apps/perms/utils.py b/apps/perms/utils.py index 4d3e8f3328265c78d97d03de29d30ab83d42a99e..4b032ac3c6dc75e3e907d9f1cb7399e178bc45df 100644 --- a/apps/perms/utils.py +++ b/apps/perms/utils.py @@ -235,7 +235,7 @@ def push_system_user(assets, system_user): return task.id -def associate_system_users_and_assets(system_users, assets, asset_groups): +def associate_system_users_and_assets(system_users, assets, asset_groups, force=False): """关联系统用户和资产, 目的是保存它们的关系, 然后新加入的资产或系统 用户时,推送系统用户到资产 @@ -250,12 +250,14 @@ def associate_system_users_and_assets(system_users, assets, asset_groups): for system_user in system_users: assets_need_push = [] if system_user.auto_push: - assets_need_push.extend( - [asset for asset in assets_all - if asset not in system_user.assets.all() - ] - ) + if force: + assets_need_push = assets_all + else: + assets_need_push.extend( + [asset for asset in assets_all + if asset not in system_user.assets.all() + ] + ) system_user.assets.add(*(tuple(assets_all))) push_system_user(assets_need_push, system_user) -