Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 14 additions & 17 deletions src/account/admin.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

from .models import UsedResetToken, User, Profile, NewsletterSubscriber
from .models import UsedResetToken, User, Profile
from .forms import UserRegisterForm


Expand All @@ -13,37 +13,34 @@ class UserAdmin(BaseUserAdmin):
# The fields to be used in displaying the User model.
# These override the definitions on the base UserAdmin
# that reference specific fields on auth.User.
list_display=('email', 'username', 'active',)
list_filter = ('active','staff','admin',)
search_fields=['email']
list_display = ('email', 'username', 'active',)
list_filter = ('active', 'staff', 'admin',)
search_fields = ['email']
fieldsets = (
('User', {'fields': ('email', 'password')}),
('Permissions', {'fields': ('admin','staff','active','verified_email',)}),
('Permissions', {
'fields': ('admin', 'staff', 'active', 'verified_email',)}),
)

# add_fieldsets is not a standard ModelAdmin attribute. UserAdmin
# overrides get_fieldsets to use this attribute when creating a user.
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ("email","username","password","password2",)
}
'classes': ('wide',),
'fields': ("email", "username", "password", "password2", "fullname")
}
),
)
ordering = ('email',)
filter_horizontal = ()




@admin.register(Profile)
class ProfileAdmin(admin.ModelAdmin):
list_display = ('fullname', 'username', 'account_type', 'approved', 'phone',)
search_fields = ('fullname', 'address', 'state', 'city','zip',)
list_filter = ('account_type', 'approved', 'state',)
ordering = ('-created',)


list_display = ('fullname', 'personality', 'user')
search_fields = ('fullname',)
list_filter = ('personality', 'skills', 'interest',)


admin.site.register(User, UserAdmin)
admin.site.register([NewsletterSubscriber, UsedResetToken])
admin.site.register([UsedResetToken])
57 changes: 0 additions & 57 deletions src/account/api/base/permissions.py

This file was deleted.

144 changes: 65 additions & 79 deletions src/account/api/base/serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
from django.conf import settings
from django.contrib.auth.password_validation import validate_password
from rest_framework import serializers
from django.contrib.auth.models import AbstractBaseUser

from account.models import Profile, User
from utils.base.validators import validate_special_char


class JWTTokenValidateSerializer(serializers.Serializer):
Expand All @@ -27,38 +27,51 @@ class TokenGenerateSerializerEmail(serializers.Serializer):
help_text='Email of user to verify and return tokens for')


class TokenGenerateResponseSerializer(serializers.Serializer):
uidb64 = serializers.CharField()
token = serializers.CharField()


class RegisterSerializer(serializers.ModelSerializer):
password = serializers.CharField(
write_only=True, required=True, validators=[validate_password])
first_name = serializers.CharField(
required=True, help_text='User first name',
validators=[validate_special_char], max_length=30)
last_name = serializers.CharField(
required=True, help_text='User last name',
validators=[validate_special_char], max_length=30)
username = serializers.CharField(required=True)

class Meta:
model = User
fields = ('password', 'email', 'first_name', 'last_name')
fields = ('password', 'email', 'username')

def create(self, validated_data):
email = validated_data.get('email')
password = validated_data.get('password')
user = User.objects.create_user(email=email, password=password)
username = validated_data.get('username')
user = User.objects\
.create_user(email=email, password=password, username=username)
return user

# Get the profile and update the first and last names
profile = user.profile
profile.first_name = validated_data.get('first_name')
profile.last_name = validated_data.get('last_name')
profile.save()

class ValidateOtpSerializer(serializers.Serializer):
email = serializers.EmailField(required=True)
otp = serializers.CharField(required=True)

def validate_email(self, value):
try:
user = User.objects.get(email=value)
except User.DoesNotExist:
raise serializers.ValidationError('User does not exist')
return user

def validate(self, attrs):
otp = attrs['otp']
user: User = attrs['email']

if not user.validate_otp(otp):
raise serializers.ValidationError('Invalid OTP')

return attrs


class ValidateRegistrationOtpSerializer(ValidateOtpSerializer):
def save(self, **kwargs):
user: User = self.validated_data['email']
user.verified_email = True
user.save()


class LoginSerializer(serializers.Serializer):
email = serializers.EmailField(required=True)
Expand Down Expand Up @@ -98,10 +111,11 @@ class UserSerializer(serializers.ModelSerializer):

class Meta:
model = User
fields = [
fields = (
'email',
'username',
'profile'
]
)

def validate_phoneno(self, value):
if value:
Expand All @@ -119,66 +133,56 @@ def validate_phoneno(self, value):
return value


class ForgetChangePasswordSerializerSwagger(serializers.Serializer):
new_password = serializers.CharField(
write_only=True, required=True, validators=[validate_password])
confirm_password = serializers.CharField(write_only=True, required=True)


class ForgetChangePasswordSerializer(serializers.ModelSerializer):
profile = ProfileSerializer(read_only=True)
new_password = serializers.CharField(
class ForgetPasswordSerializer(serializers.Serializer):
uidb64 = serializers.CharField(required=True)
token = serializers.CharField(required=True)
password = serializers.CharField(
write_only=True, required=True, validators=[validate_password])
confirm_password = serializers.CharField(write_only=True, required=True)

class Meta:
model = User
fields = (
'id', 'email', 'new_password',
'confirm_password', 'profile',)
extra_kwargs = {
'email': {'read_only': True},
}

def validate(self, attrs):
# Validate if the provided passwords are similar
new_password = attrs.get('new_password')
confirm_password = attrs.get('confirm_password')
# Validate the uidb64 and token
return attrs

if not new_password:
raise serializers.ValidationError(
{"new_password": "New password field is required."})
def save(self, **kwargs):
# Get the user
user: User = self.validated_data['user']
password = self.validated_data['password']

if not confirm_password:
raise serializers.ValidationError(
{"confirm_password": "Confirm password field is required."})
# Set password
user.set_password(password)
user.save()

if new_password != confirm_password:
raise serializers.ValidationError(
{"new_password": "Password fields didn't match."})
return user

return attrs

def update(self, instance, validated_data):
# Set password
new_password = validated_data.get('new_password')
instance.set_password(new_password)
instance.save()
class RequestForgetPasswordSerializer(serializers.Serializer):
email = serializers.EmailField(required=True)

return instance
# Store the user instance
user: AbstractBaseUser = None

def validate_email(self, value):
try:
self.user: User = User.objects.get(email=value)
if not self.user.verified_email:
raise serializers.ValidationError(
'Please verify your email first')
except User.DoesNotExist:
raise serializers.ValidationError('User does not exist')
return value


class ChangePasswordSerializer(serializers.ModelSerializer):
old_password = serializers.CharField(write_only=True, required=True)
new_password = serializers.CharField(
write_only=True, required=True, validators=[validate_password])
confirm_password = serializers.CharField(write_only=True, required=True)
instance: AbstractBaseUser = None

class Meta:
model = User
fields = (
'id', 'email', 'old_password',
'new_password', 'confirm_password',)
'new_password',)
extra_kwargs = {
'email': {'read_only': True},
}
Expand All @@ -187,12 +191,6 @@ def validate(self, attrs):
if not self.instance.check_password(attrs['old_password']):
raise serializers.ValidationError(
{'old_password': 'Old password is not correct'})

# Validate if the provided passwords are similar
if attrs['new_password'] != attrs['confirm_password']:
raise serializers.ValidationError(
{"new_password": "Password fields didn't match."})

return attrs

def update(self, instance, validated_data):
Expand All @@ -204,18 +202,6 @@ def update(self, instance, validated_data):
return instance


class RegisterResponseSerializer(serializers.Serializer):
user = UserSerializer()
token = TokenGenerateResponseSerializer()


class LoginResponseSerializer431(serializers.Serializer):
token = TokenGenerateResponseSerializer()
fullname = serializers.CharField(
help_text='Fullname of token\'s user generated')
email = serializers.CharField(help_text='Email of token\'s user generated')


class LoginResponseSerializer200(serializers.Serializer):
user = UserSerializer()
tokens = JWTTokenResponseSerializer()
18 changes: 0 additions & 18 deletions src/account/api/base/tokens.py

This file was deleted.

Loading