From 7984806b385a42700e6cb6b466dba005970ee61d Mon Sep 17 00:00:00 2001 From: "xiaokong1937@gmail.com" <763691951@qq.com> Date: Thu, 15 Sep 2016 16:54:00 +0800 Subject: [PATCH] change user ssh reset type from private key to public key --- apps/users/api.py | 10 ++-- apps/users/forms.py | 26 +++++++---- apps/users/templates/users/user_detail.html | 51 +++++++++------------ apps/users/utils.py | 22 +++++++++ apps/users/views.py | 6 --- 5 files changed, 69 insertions(+), 46 deletions(-) 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 a24565f89..5f0e3bed6 100644 --- a/apps/users/forms.py +++ b/apps/users/forms.py @@ -79,12 +79,22 @@ 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 diff --git a/apps/users/templates/users/user_detail.html b/apps/users/templates/users/user_detail.html index 6073d5d13..89ef5a0e2 100644 --- a/apps/users/templates/users/user_detail.html +++ b/apps/users/templates/users/user_detail.html @@ -152,7 +152,7 @@