def verify_registration(request): """ Verify registration via signature. """ user = process_verify_registration_data( request.data, serializer_context={'request': request}) signals.user_activated.send(sender=None, user=user, request=request) extra_data = None if registration_settings.REGISTER_VERIFICATION_AUTO_LOGIN: extra_data = perform_login(request, user) return get_ok_response(_("User verified successfully"), extra_data=extra_data)
def register_email(request): ''' Register new email. ''' user = request.user serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS serializer = serializer_class( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) email = serializer.get_email() email_already_used = is_user_email_field_unique( ) and user_with_email_exists(email) # noqa: E501 if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: signer = RegisterEmailSigner( { 'user_id': get_user_verification_id(user), 'email': email, }, request=request) notification_data = { 'params_signer': signer, 'email_already_used': email_already_used, } template_config_data = registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES # noqa: E501 send_verification_notification( NotificationType.REGISTER_EMAIL_VERIFICATION, user, notification_data, template_config_data, custom_user_address=email) else: if email_already_used: raise BadRequest(_("This email is already registered.")) email_field_name = get_user_email_field_name() old_email = getattr(user, email_field_name) setattr(user, email_field_name, email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=email, old_email=old_email, request=request, ) return get_ok_response(_("Register email link email sent"))
def change_password(request): ''' Change the user password. ''' serializer = ChangePasswordSerializer( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) user = request.user user.set_password(serializer.validated_data['password']) user.save() return get_ok_response('Password changed successfully')
def login(request): ''' Logs in the user via given login and password. ''' serializer_class = registration_settings.LOGIN_SERIALIZER_CLASS serializer = serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.get_authenticated_user() if not user: raise BadRequest('Login or password invalid.') extra_data = perform_login(request, user) return get_ok_response('Login successful', extra_data=extra_data)
def login(request: Request) -> Response: ''' Logs in the user via given login and password. ''' serializer_class = registration_settings.LOGIN_SERIALIZER_CLASS serializer = serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) login_authenticator = registration_settings.LOGIN_AUTHENTICATOR try: user = login_authenticator(serializer.validated_data, serializer=serializer) except UserNotFound: raise LoginInvalid() from None extra_data = perform_login(request, user) return get_ok_response(_("Login successful"), extra_data=extra_data)
def logout(request): ''' Logs out the user. returns an error if the user is not authenticated. ''' user = request.user serializer = LogoutSerializer(data=request.data) serializer.is_valid(raise_exception=True) data = serializer.validated_data if should_authenticate_session(): auth.logout(request) if should_retrieve_token() and data['revoke_token']: try: user.auth_token.delete() except Token.DoesNotExist: raise BadRequest('Cannot remove non-existent token') return get_ok_response('Logout successful')
def register_email(request): ''' Register new email. ''' user = request.user serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS serializer = serializer_class( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) email = serializer.get_email() template_config = ( registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES) if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: signer = RegisterEmailSigner( { 'user_id': get_user_verification_id(user), 'email': email, }, request=request) send_verification_notification(user, signer, template_config, email=email) else: old_email = user.email email_field = get_user_setting('EMAIL_FIELD') setattr(user, email_field, email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=email, old_email=old_email, request=request, ) return get_ok_response('Register email link email sent')
def register_email(request: Request) -> Response: ''' Register new email. ''' user = request.user serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS serializer = serializer_class(data=request.data, context={'request': request}) serializer.is_valid(raise_exception=True) # TODO: Issue #114 - remove code supporting deprecated behavior get_email = getattr(serializer, 'get_email', None) if callable(get_email): email = get_email() else: email = serializer.validated_data['email'] email_already_used = is_user_email_field_unique( ) and user_with_email_exists(email) if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: send_register_email_verification_email_notification( request, user, email, email_already_used=email_already_used) else: if email_already_used: raise EmailAlreadyRegistered() email_field_name = get_user_email_field_name() old_email = getattr(user, email_field_name) setattr(user, email_field_name, email) user.save() signals.user_changed_email.send( sender=None, user=user, new_email=email, old_email=old_email, request=request, ) return get_ok_response(_("Register email link email sent"))
def logout(request: Request) -> Response: ''' Logs out the user. returns an error if the user is not authenticated. ''' user = request.user serializer = LogoutSerializer( data=request.data, context={'request': request}, ) serializer.is_valid(raise_exception=True) data = serializer.validated_data if should_authenticate_session(): auth.logout(request) if should_retrieve_token() and data['revoke_token']: auth_token_manager_cls = registration_settings.AUTH_TOKEN_MANAGER_CLASS auth_token_manager = auth_token_manager_cls() # noqa: E501 type: rest_registration.auth_token_managers.AbstractAuthTokenManager auth_token_manager.revoke_token(user) return get_ok_response(_("Logout successful"))
def send_reset_password_link(request): ''' Send email with reset password link. ''' if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED: raise Http404() serializer_class = registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS # noqa: E501 serializer = serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.get_user_or_none() if not user: raise UserNotFound() signer = ResetPasswordSigner({ 'user_id': user.pk, }, request=request) template_config = ( registration_settings.RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES) send_verification_notification(user, signer, template_config) return get_ok_response('Reset link sent')
def login(request): ''' Logs in the user via given login and password. ''' serializer_class = registration_settings.LOGIN_SERIALIZER_CLASS serializer = serializer_class(data=request.data) serializer.is_valid(raise_exception=True) user = serializer.get_authenticated_user() if not user: raise BadRequest('Login or password invalid.') if should_authenticate_session(): auth.login(request, user) extra_data = {} if should_retrieve_token(): token, _ = Token.objects.get_or_create(user=user) extra_data['token'] = token.key return get_ok_response('Login successful', extra_data=extra_data)
def register_email(request): ''' Register new email. ''' user = request.user serializer = RegisterEmailSerializer(data=request.data) serializer.is_valid(raise_exception=True) email = serializer.validated_data['email'] language = serializer.validated_data['language'] if language: template_config = ( registration_settings. REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES_I18N[language]) else: template_config = ( registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES) if registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED: signer = RegisterEmailSigner({ 'user_id': user.pk, 'email': email, }, request=request) send_verification_notification(user, signer, template_config, email=email) else: email_field = get_user_setting('EMAIL_FIELD') setattr(user, email_field, email) user.save() return get_ok_response('Register email link email sent')
def send_reset_password_link(request): ''' Send email with reset password link. ''' if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED: raise Http404() serializer = SendResetPasswordLinkSerializer(data=request.data) serializer.is_valid(raise_exception=True) login = serializer.validated_data['login'] language = serializer.validated_data['language'] user = None for login_field in get_login_fields(): user = get_user_by_lookup_dict({login_field: login}, default=None, require_verified=False) if user: break if not user: raise UserNotFound() signer = ResetPasswordSigner({ 'user_id': user.pk, }, request=request) if language: template_config = ( registration_settings. RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES_I18N[language]) else: template_config = ( registration_settings.RESET_PASSWORD_VERIFICATION_EMAIL_TEMPLATES) send_verification_notification(user, signer, template_config) return get_ok_response('Reset link sent')
def verify_email(request): ''' Verify email via signature. ''' process_verify_email_data(request.data) return get_ok_response('Email verified successfully')
def reset_password(request): ''' Reset password, given the signature and timestamp from the link. ''' process_reset_password_data(request.data) return get_ok_response('Reset password successful')
def verify_email(request): ''' Verify email via signature. ''' process_verify_email_data(request.data, serializer_context={'request': request}) return get_ok_response(_("Email verified successfully"))
def verify_registration(request): ''' Verify registration via signature. ''' process_verify_registration_data(request.data) return get_ok_response('User verified successfully')