Пример #1
0
 def generate_new_link(self, request):
     """ Generate new link after expiry """
     email = request.data.get('email')
     req_type = request.data.get('req_type')
     serializer = SecurityLinkSerializer(data=request.data)
     if serializer.is_valid():
         try:
             get_object(User, email, "User")
             if req_type == 'activate':
                 path = '/api/v1/accounts/activate/'
                 subject = 'Grind - Activate your account'
                 template = 'confirm_account.html'
             else:
                 path = '/api/v1/accounts/send-reset/'
                 subject = 'Grind - Password Reset'
                 template = 'password_reset.html'
             send_account_email(request, subject, path, template)
             return custom_reponse(
                 'succes',
                 200,
                 message="A new link has been sent to your email")
         except (SMTPException, IndexError, TypeError):
             return custom_reponse('error',
                                   400,
                                   message='An error occured, please retry')
     return custom_reponse('error',
                           400,
                           serializer=serializer,
                           error_type='bad_request')
Пример #2
0
    def retrieve(self, request, username):
        """ Return user profile """
        profile = get_object(User, username, "User")
        serializer = self.serializer_class(profile,
                                           context={'request': request})

        return custom_reponse('success', 200, serializer=serializer)
Пример #3
0
 def send_reset_email(self, request):
     """ Send password reset email """
     serializer = ResetEmailSerializer(data=request.data)
     email = request.data.get('email')
     if serializer.is_valid():
         try:
             get_object(User, email, "User")
             send_account_email(request, 'Grind - Password Reset',
                                '/api/v1/accounts/send-reset/',
                                'password_reset.html')
             # TODO: to update link to web-app reset password page
             return custom_reponse(
                 'succes',
                 200,
                 message="A reset link has been sent to your email")
         except (SMTPException, IndexError, TypeError):
             return custom_reponse('error',
                                   400,
                                   message='An error occured, please retry')
     return custom_reponse('error',
                           400,
                           serializer=serializer,
                           error_type='bad_request')
Пример #4
0
 def activate(self, request, uid, token):
     """ Get request for activating user account """
     try:
         uid = force_text(urlsafe_base64_decode(uid))
         user = get_object(User, uid, "User")
         decoded_token = jwt_auth.decode_token(token)
         now = int(datetime.now().strftime('%s'))
         if now > decoded_token['exp']:
             return custom_reponse('error', 400, message='Link has expired')
         else:
             if user is not None and decoded_token['email'] == user.email:
                 user.active = True
                 user.save()
                 # TODO: update redirect url to web-app login
                 return HttpResponseRedirect(
                     redirect_to='http://127.0.0.1:8000/?status=success')
             else:
                 return custom_reponse(
                     'error', 400, message='Activation link is invalid!')
     except (TypeError, ValueError, OverflowError):
         return custom_reponse('error', 400, message='An error occured')
Пример #5
0
 def password_reset_update(self, request, uid, token):
     """ Update the new password to db """
     decoded_token = jwt_auth.decode_token(token)
     now = int(datetime.now().strftime('%s'))
     if now > decoded_token['exp']:
         # TODO: add generate new link endpoint
         return custom_reponse('error', 400, message='Link has expired')
     serializer = PasswordResetSerializer(data=request.data,
                                          context={'request': request})
     if serializer.is_valid():
         uid = force_text(urlsafe_base64_decode(uid))
         user = get_object(User, uid, "User")
         password = request.data.get('password')
         user.set_password(password)
         user.save()
         return custom_reponse('success',
                               200,
                               message='Password successfully updated')
     return custom_reponse('error',
                           400,
                           serializer=serializer,
                           error_type='bad_request')