Add RecoverPassword api view.
parent
22f7eadc07
commit
9eb35a898a
|
@ -67,14 +67,6 @@ class RoleDetail(generics.RetrieveAPIView):
|
|||
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 Meta:
|
||||
model = User
|
||||
|
@ -107,6 +99,33 @@ class UserDetail(generics.RetrieveUpdateDestroyAPIView):
|
|||
serializer_class = UserSerializer
|
||||
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):
|
||||
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)
|
||||
|
||||
|
||||
|
||||
|
||||
class Logout(APIView):
|
||||
def post(self, request, format=None):
|
||||
logout(request)
|
||||
|
|
|
@ -30,21 +30,21 @@ def attach_uuid(sender, instance, **kwargs):
|
|||
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",
|
||||
verbose_name=_('color'))
|
||||
verbose_name=_('color'))
|
||||
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,
|
||||
verbose_name=_('photo'))
|
||||
verbose_name=_('photo'))
|
||||
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='',
|
||||
verbose_name=_('default timezone'))
|
||||
verbose_name=_('default timezone'))
|
||||
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,
|
||||
verbose_name=_('colorize tags'))
|
||||
verbose_name=_('colorize tags'))
|
||||
objects = UserManager()
|
||||
|
||||
|
||||
|
|
|
@ -65,6 +65,7 @@ class UserSerializer(serializers.ModelSerializer):
|
|||
return [x.id for x in obj.projects.all()]
|
||||
|
||||
|
||||
|
||||
class RoleSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = Role
|
||||
|
@ -88,5 +89,4 @@ class SearchSerializer(serializers.Serializer):
|
|||
"""
|
||||
if instance is not None:
|
||||
return instance
|
||||
|
||||
return attrs
|
||||
|
|
|
@ -15,7 +15,6 @@ OUT_PROJECT_ROOT = os.path.abspath(
|
|||
os.path.join(PROJECT_ROOT, "..")
|
||||
)
|
||||
|
||||
|
||||
LOGS_PATH = os.path.join(OUT_PROJECT_ROOT, 'logs')
|
||||
BACKUP_PATH = os.path.join(OUT_PROJECT_ROOT, 'exports')
|
||||
|
||||
|
@ -107,10 +106,6 @@ DJMAIL_SEND_ASYNC = False
|
|||
DJMAIL_MAX_RETRY_NUMBER = 3
|
||||
DJMAIL_TEMPLATE_EXTENSION = 'jinja'
|
||||
|
||||
|
||||
SV_CSS_MENU_ACTIVE = 'selected'
|
||||
SV_CONTEXT_VARNAME = 'menu'
|
||||
|
||||
# Message System
|
||||
#MESSAGE_STORAGE = 'django.contrib.messages.storage.cookie.CookieStorage'
|
||||
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
|
||||
|
|
Loading…
Reference in New Issue