Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- URLS:
- urlpatterns = [
- url('^activate/', views.ActivateAccountView.as_view(), name='activate_account'),
- url('^password_reset_email/', views.PasswordResetSendLinkView.as_view(), name='password_reset_email'),
- url('^password_reset_token/', views.PasswordResetReceiveTokenView.as_view(), name='password_reset_token'),
- url('^reset_password/', views.PasswordResetView.as_view(), name='reset_password'),
- ]
- VIEWS:
- class PasswordResetSendLinkView(APIView):
- def post(self, request):
- serialized = PasswordResetSendLinkSerializer(data=request.data)
- if not serialized.is_valid():
- return Response(serialized.errors, status=401)
- user = serialized.instance
- password_reset_token = str(uuid.uuid4())
- PasswordResetToken.objects.get_or_create(user=user, token=password_reset_token)
- send_html_email(
- subject='Workeo password reset',
- template_name='user/password_reset.html',
- context={'password_reset_token': password_reset_token},
- to_list=[user.email])
- return Response('Password reset email sent.')
- class PasswordResetReceiveTokenView(APIView):
- def post(self, request):
- password_reset_token = request.query_params.get('token')
- if not password_reset_token:
- return Response('Missing account activation token.')
- else:
- password_reset_token_object = PasswordResetToken.objects.filter(token=password_reset_token).first()
- if not password_reset_token_object:
- return Response('Invalid account activation token.')
- elif password_reset_token_object.created + 2 > datetime.now():
- password_reset_token = str(uuid.uuid4())
- user = password_reset_token_object.user
- PasswordResetToken.objects.get_or_create(user=user, token=password_reset_token)
- send_html_email(
- subject='Workeo password reset',
- template_name='user/password_reset.html',
- context={'password_reset_token': password_reset_token},
- to_list=[user.email])
- password_reset_token_object.delete()
- return Response('This password reset link is out of date.'
- 'We have sent a new password reset link to your registered email address'
- 'that will be active for two days.')
- else:
- return HttpResponseRedirect(redirect_to='https://app.workeo.co/password_reset/')
- class PasswordResetView(APIView):
- def post(self, request):
- serialized = PasswordResetSerializer(data=request.data)
- if not serialized.is_valid():
- return Response(serialized.errors, status=400)
- user = serialized.instance
- Token.objects.get(user=user).delete()
- new_token, __ = Token.objects.get_or_create(user=user)
- response = {'token': new_token.key,
- 'user': UserSerializer(user).data}
- if user.type == 'client':
- response['client'] = ClientReturnSerializer(user.client).data
- if user.type == 'candidate':
- response['candidate'] = CandidateReturnSerializer(user.candidate).data
- return Response(response)
- SRIALIZERS:
- class PasswordResetSendLinkSerializer(serializers.ModelSerializer):
- email = serializers.EmailField(max_length=255)
- class Meta:
- model = User
- fields = ['email']
- def validate(self, data):
- errors = {}
- try:
- self.instance = User.objects.get(email=data.get('email'))
- except User.DoesNotExist:
- errors['email'] = ['User with given email does not exist.']
- raise serializers.ValidationError(errors)
- return super().validate(data)
- class PasswordResetSerializer(serializers.ModelSerializer):
- email = serializers.EmailField(max_length=255)
- class Meta:
- model = User
- fields = ['email', 'password']
- def validate(self, data):
- errors = {}
- try:
- self.instance = User.objects.get(email=data.get('email'))
- except User.DoesNotExist:
- errors['email'] = ['User with given email does not exist.']
- raise serializers.ValidationError(errors)
- if 'password' in data.keys():
- password = data.get('password')
- else:
- errors['password'] = ['You must provide a new password.']
- raise serializers.ValidationError(errors)
- if errors:
- raise serializers.ValidationError(errors)
- data['password'] = make_password(password)
- return super().validate(data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement