diff --git a/apps/users/api.py b/apps/users/api.py index bb995d0f8..a2e196456 100644 --- a/apps/users/api.py +++ b/apps/users/api.py @@ -6,7 +6,6 @@ import logging from rest_framework import generics from .serializers import UserSerializer, UserGroupSerializer, UserAttributeSerializer, UserGroupEditSerializer -from .serializers import UserPKUpdateSerializer from .models import User, UserGroup @@ -60,15 +59,20 @@ class UserResetPasswordApi(generics.UpdateAPIView): # Note: we are not updating the user object here. # We just do the reset-password staff. user = self.get_object() + import uuid + user.password_raw = str(uuid.uuid4()) + user.save() from .utils import send_reset_password_mail send_reset_password_mail(user) class UserResetPKApi(generics.UpdateAPIView): queryset = User.objects.all() - serializer_class = UserPKUpdateSerializer + serializer_class = UserGroupEditSerializer def perform_update(self, serializer): user = self.get_object() - user.private_key = serializer.validated_data['_private_key'] + user._public_key = '' user.save() + from .utils import send_reset_ssh_key_mail + send_reset_ssh_key_mail(user) diff --git a/apps/users/forms.py b/apps/users/forms.py index c2a72a762..8db540e28 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -73,15 +73,25 @@ class UserInfoForm(forms.Form): class UserKeyForm(forms.Form): - private_key = forms.CharField(max_length=5000, widget=forms.Textarea, label=_('private key')) + public_key = forms.CharField( + label=_('ssh public key'), max_length=5000, + widget=forms.Textarea(attrs={'placeholder': _('ssh-rsa AAAA...')}), + help_text=_('Paste your id_ras.pub here.')) - def clean_private_key(self): - from users.utils import validate_ssh_pk - ssh_pk = self.cleaned_data['private_key'] - checked, reason = validate_ssh_pk(ssh_pk) - if not checked: - raise forms.ValidationError(_('Not a valid ssh private key.')) - return ssh_pk + def clean_public_key(self): + from sshpubkeys import SSHKey + from sshpubkeys.exceptions import InvalidKeyException + public_key = self.cleaned_data['public_key'] + ssh = SSHKey(public_key) + try: + ssh.parse() + except InvalidKeyException as e: + print e + raise forms.ValidationError(_('Not a valid ssh public key')) + except NotImplementedError as e: + print e + raise forms.ValidationError(_('Not a valid ssh public key')) + return public_key class UserPrivateAssetPermissionForm(forms.ModelForm): @@ -106,4 +116,3 @@ class UserPrivateAssetPermissionForm(forms.ModelForm): 'system_users': forms.SelectMultiple(attrs={'class': 'select2', 'data-placeholder': _('Select system users')}), } - diff --git a/apps/users/templates/users/user_detail.html b/apps/users/templates/users/user_detail.html index 6f26c57da..59130fdac 100644 --- a/apps/users/templates/users/user_detail.html +++ b/apps/users/templates/users/user_detail.html @@ -156,7 +156,7 @@