Skip to content

Commit

Permalink
Merge pull request #262 from Ilhasoft/feature/refact_account
Browse files Browse the repository at this point in the history
Feature/refact account
  • Loading branch information
VictorMeneghini committed Jul 23, 2019
2 parents 107e60b + b694a09 commit 215ad47
Show file tree
Hide file tree
Showing 10 changed files with 832 additions and 8 deletions.
6 changes: 3 additions & 3 deletions Pipfile.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

61 changes: 61 additions & 0 deletions bothub/api/v1/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -745,6 +745,12 @@ class RepositoryExamplesViewSet(
]


@method_decorator(
name='create',
decorator=swagger_auto_schema(
deprecated=True
),
)
class RegisterUserViewSet(
mixins.CreateModelMixin,
GenericViewSet):
Expand All @@ -755,6 +761,13 @@ class RegisterUserViewSet(
serializer_class = RegisterUserSerializer


@method_decorator(
name='create',
decorator=swagger_auto_schema(
responses={201: '{"token":"TOKEN"}'},
deprecated=True
),
)
class LoginViewSet(GenericViewSet):

"""
Expand All @@ -778,6 +791,12 @@ def create(self, request, *args, **kwargs):
status.HTTP_201_CREATED if created else status.HTTP_200_OK)


@method_decorator(
name='update',
decorator=swagger_auto_schema(
deprecated=True
),
)
class ChangePasswordViewSet(GenericViewSet):
"""
Change current user password.
Expand Down Expand Up @@ -812,6 +831,12 @@ def update(self, request, *args, **kwargs):
status=status.HTTP_400_BAD_REQUEST)


@method_decorator(
name='create',
decorator=swagger_auto_schema(
deprecated=True
),
)
class RequestResetPassword(GenericViewSet):
"""
Request reset password
Expand All @@ -833,6 +858,12 @@ def create(self, request, *args, **kwargs):
status=status.HTTP_400_BAD_REQUEST)


@method_decorator(
name='update',
decorator=swagger_auto_schema(
deprecated=True
),
)
class ResetPassword(GenericViewSet):
"""
Reset password
Expand All @@ -853,6 +884,24 @@ def update(self, request, *args, **kwargs):
status=status.HTTP_400_BAD_REQUEST)


@method_decorator(
name='update',
decorator=swagger_auto_schema(
deprecated=True
),
)
@method_decorator(
name='retrieve',
decorator=swagger_auto_schema(
deprecated=True
),
)
@method_decorator(
name='partial_update',
decorator=swagger_auto_schema(
deprecated=True
),
)
class MyUserProfileViewSet(
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
Expand Down Expand Up @@ -886,6 +935,12 @@ def get_object(self, *args, **kwargs):
return user


@method_decorator(
name='retrieve',
decorator=swagger_auto_schema(
deprecated=True
),
)
class UserProfileViewSet(
mixins.RetrieveModelMixin,
GenericViewSet):
Expand Down Expand Up @@ -1033,6 +1088,12 @@ def update(self, *args, **kwargs):
return response


@method_decorator(
name='list',
decorator=swagger_auto_schema(
deprecated=True,
)
)
class SearchUserViewSet(
mixins.ListModelMixin,
GenericViewSet):
Expand Down
Empty file.
133 changes: 133 additions & 0 deletions bothub/api/v2/account/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
from django.utils.translation import gettext as _
from django.contrib.auth.password_validation import validate_password
from django.contrib.auth.hashers import make_password
from rest_framework.authtoken.serializers import AuthTokenSerializer
from rest_framework import serializers
from rest_framework.exceptions import ValidationError

from bothub.authentication.models import User
from ..fields import PasswordField


class LoginSerializer(AuthTokenSerializer, serializers.ModelSerializer):
username = serializers.EmailField(
label=_('Email'),
)
password = PasswordField(
label=_('Password'),
)

class Meta:
model = User
fields = [
'username',
'password',
]
ref_name = None


class RegisterUserSerializer(serializers.ModelSerializer):
password = PasswordField(
write_only=True,
validators=[
validate_password,
])

class Meta:
model = User
fields = [
'email',
'name',
'nickname',
'password',
]
ref_name = None

@staticmethod
def validate_password(value):
return make_password(value)


class ChangePasswordSerializer(serializers.ModelSerializer):
current_password = PasswordField(
required=True
)
password = PasswordField(
required=True,
validators=[
validate_password,
]
)

class Meta:
model = User
fields = [
'current_password',
'password'
]
ref_name = None

def validate_current_password(self, value):
request = self.context.get('request')
if not request.user.check_password(value):
raise ValidationError(_('Wrong password'))
return value


class RequestResetPasswordSerializer(serializers.ModelSerializer):
email = serializers.EmailField(
label=_('Email'),
required=True
)

class Meta:
model = User
fields = [
'email'
]
ref_name = None

def validate_email(self, value):
try:
User.objects.get(email=value)
return value
except User.DoesNotExist:
raise ValidationError(_('No user registered with this email'))


class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = [
'nickname',
'name',
'locale',
]
ref_name = None


class ResetPasswordSerializer(serializers.ModelSerializer):
token = serializers.CharField(
label=_('Token'),
style={'show': False}
)
password = PasswordField(
label=_('New Password'),
required=True,
validators=[
validate_password,
])

class Meta:
model = User
fields = [
'token',
'password',
]
ref_name = None

def validate_token(self, value):
user = self.context.get('view').get_object()
if not user.check_password_reset_token(value):
raise ValidationError(_('Invalid token for this user'))
return value
Loading

0 comments on commit 215ad47

Please sign in to comment.