Add RecoverPassword api view.
parent
22f7eadc07
commit
9eb35a898a
|
@ -67,14 +67,6 @@ class RoleDetail(generics.RetrieveAPIView):
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
|
||||||
#class UserFilter(django_filters.FilterSet):
|
|
||||||
# no_milestone = django_filters.NumberFilter(name="mileston", lookup_type='isnull')
|
|
||||||
#
|
|
||||||
# class Meta:
|
|
||||||
# model = UserStory
|
|
||||||
# fields = ['project', 'milestone', 'no_milestone']
|
|
||||||
|
|
||||||
|
|
||||||
class UserFilter(django_filters.FilterSet):
|
class UserFilter(django_filters.FilterSet):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
|
@ -107,6 +99,33 @@ class UserDetail(generics.RetrieveUpdateDestroyAPIView):
|
||||||
serializer_class = UserSerializer
|
serializer_class = UserSerializer
|
||||||
permission_classes = (IsAuthenticated,)
|
permission_classes = (IsAuthenticated,)
|
||||||
|
|
||||||
|
import uuid
|
||||||
|
from django.db.models import Q
|
||||||
|
from djmail.template_mail import MagicMailBuilder
|
||||||
|
|
||||||
|
|
||||||
|
class RecoveryPassword(APIView):
|
||||||
|
def post(self, request):
|
||||||
|
username_or_email = request.DATA.get('username', None)
|
||||||
|
|
||||||
|
if not username_or_email:
|
||||||
|
return Response({"detail": "Invalid username or password"}, status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
try:
|
||||||
|
queryset = User.objects.all()
|
||||||
|
user = queryset.get(Q(username=username_or_email) |
|
||||||
|
Q(email=username_or_email))
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return Response({"detail": "Invalid username or password"}, status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
user.token = str(uuid.uuid1())
|
||||||
|
user.save(update_fields=["token"])
|
||||||
|
|
||||||
|
mbuilder = MagicMailBuilder()
|
||||||
|
email = mbuilder.password_recovery(user.email, {"user": user})
|
||||||
|
|
||||||
|
return Response({"detail": "Mail sended successful!"})
|
||||||
|
|
||||||
|
|
||||||
class Login(APIView):
|
class Login(APIView):
|
||||||
def post(self, request, format=None):
|
def post(self, request, format=None):
|
||||||
|
@ -140,6 +159,8 @@ class Login(APIView):
|
||||||
return Response({"detail": "Invalid username or password"}, status.HTTP_400_BAD_REQUEST)
|
return Response({"detail": "Invalid username or password"}, status.HTTP_400_BAD_REQUEST)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class Logout(APIView):
|
class Logout(APIView):
|
||||||
def post(self, request, format=None):
|
def post(self, request, format=None):
|
||||||
logout(request)
|
logout(request)
|
||||||
|
|
|
@ -30,21 +30,21 @@ def attach_uuid(sender, instance, **kwargs):
|
||||||
instance.uuid = unicode(uuid.uuid1())
|
instance.uuid = unicode(uuid.uuid1())
|
||||||
|
|
||||||
|
|
||||||
class User(AbstractUser, WatcherMixin):
|
class User(WatcherMixin, AbstractUser):
|
||||||
color = models.CharField(max_length=9, null=False, blank=False, default="#669933",
|
color = models.CharField(max_length=9, null=False, blank=False, default="#669933",
|
||||||
verbose_name=_('color'))
|
verbose_name=_('color'))
|
||||||
description = models.TextField(null=False, blank=True,
|
description = models.TextField(null=False, blank=True,
|
||||||
verbose_name=_('description'))
|
verbose_name=_('description'))
|
||||||
photo = models.FileField(upload_to='files/msg', max_length=500, null=True, blank=True,
|
photo = models.FileField(upload_to='files/msg', max_length=500, null=True, blank=True,
|
||||||
verbose_name=_('photo'))
|
verbose_name=_('photo'))
|
||||||
default_language = models.CharField(max_length=20, null=False, blank=True, default='',
|
default_language = models.CharField(max_length=20, null=False, blank=True, default='',
|
||||||
verbose_name=_('default language'))
|
verbose_name=_('default language'))
|
||||||
default_timezone = models.CharField(max_length=20, null=False, blank=True, default='',
|
default_timezone = models.CharField(max_length=20, null=False, blank=True, default='',
|
||||||
verbose_name=_('default timezone'))
|
verbose_name=_('default timezone'))
|
||||||
token = models.CharField(max_length=200, null=False, blank=True, default='',
|
token = models.CharField(max_length=200, null=False, blank=True, default='',
|
||||||
verbose_name=_('token'))
|
verbose_name=_('token'))
|
||||||
colorize_tags = models.BooleanField(null=False, blank=True, default=False,
|
colorize_tags = models.BooleanField(null=False, blank=True, default=False,
|
||||||
verbose_name=_('colorize tags'))
|
verbose_name=_('colorize tags'))
|
||||||
objects = UserManager()
|
objects = UserManager()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,7 @@ class UserSerializer(serializers.ModelSerializer):
|
||||||
return [x.id for x in obj.projects.all()]
|
return [x.id for x in obj.projects.all()]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class RoleSerializer(serializers.ModelSerializer):
|
class RoleSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Role
|
model = Role
|
||||||
|
@ -88,5 +89,4 @@ class SearchSerializer(serializers.Serializer):
|
||||||
"""
|
"""
|
||||||
if instance is not None:
|
if instance is not None:
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
return attrs
|
return attrs
|
||||||
|
|
|
@ -15,7 +15,6 @@ OUT_PROJECT_ROOT = os.path.abspath(
|
||||||
os.path.join(PROJECT_ROOT, "..")
|
os.path.join(PROJECT_ROOT, "..")
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
LOGS_PATH = os.path.join(OUT_PROJECT_ROOT, 'logs')
|
LOGS_PATH = os.path.join(OUT_PROJECT_ROOT, 'logs')
|
||||||
BACKUP_PATH = os.path.join(OUT_PROJECT_ROOT, 'exports')
|
BACKUP_PATH = os.path.join(OUT_PROJECT_ROOT, 'exports')
|
||||||
|
|
||||||
|
@ -107,10 +106,6 @@ DJMAIL_SEND_ASYNC = False
|
||||||
DJMAIL_MAX_RETRY_NUMBER = 3
|
DJMAIL_MAX_RETRY_NUMBER = 3
|
||||||
DJMAIL_TEMPLATE_EXTENSION = 'jinja'
|
DJMAIL_TEMPLATE_EXTENSION = 'jinja'
|
||||||
|
|
||||||
|
|
||||||
SV_CSS_MENU_ACTIVE = 'selected'
|
|
||||||
SV_CONTEXT_VARNAME = 'menu'
|
|
||||||
|
|
||||||
# Message System
|
# Message System
|
||||||
#MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
|
#MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
|
||||||
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
|
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
|
||||||
|
|
Loading…
Reference in New Issue