Add RecoverPassword api view.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-07-19 11:58:15 +02:00
parent 22f7eadc07
commit 9eb35a898a
4 changed files with 38 additions and 22 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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

View File

@ -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'