Reimplement login and logout as separate viewsets.

remotes/origin/enhancement/email-actions
Andrey Antukh 2013-07-29 21:40:06 +02:00
parent 317d0e8515
commit 701220b21d
2 changed files with 45 additions and 30 deletions

View File

@ -9,7 +9,7 @@ from django import http
from rest_framework.decorators import action
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework.permissions import IsAuthenticated, AllowAny
from rest_framework import status, generics, viewsets, views
from haystack import query, inputs
@ -68,7 +68,32 @@ class UsersViewSet(viewsets.ViewSet):
return Response({})
@action(methods=["POST"], permission_classes=[])
def login(self, request, pk=None):
def password_recovery(self, request, pk=None):
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(viewsets.ViewSet):
permission_classes = (AllowAny,)
def create(self, request, **kwargs):
username = request.DATA.get('username', None)
password = request.DATA.get('password', None)
@ -91,32 +116,19 @@ class UsersViewSet(viewsets.ViewSet):
return Response(response_data)
@action(methods=["POST"], permission_classes=[])
def password_recovery(self, request, pk=None):
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)
class Logout(viewsets.ViewSet):
permission_classes = (IsAuthenticated,)
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)
def list(self, request, **kwargs):
return self.logout(request)
user.token = str(uuid.uuid1())
user.save(update_fields=["token"])
def create(self, request, **kwargs):
return self.logout(request)
mbuilder = MagicMailBuilder()
email = mbuilder.password_recovery(user.email, {"user": user})
return Response({"detail": "Mail sended successful!"})
@action(methods=["GET", "POST"])
def logout(self, request, pk=None):
def logout(self, request):
logout(request)
return Response()
return Response({})
class Search(viewsets.ViewSet):
@ -126,7 +138,7 @@ class Search(viewsets.ViewSet):
try:
project = self._get_project(project_id)
except models.Project.DoesNotExist:
except (models.Project.DoesNotExist, TypeError):
raise excp.PermissionDenied({"detail": "Wrong project id"})
#if not text:

View File

@ -1,12 +1,15 @@
# -*- coding: utf-8 -*-
from django.conf.urls import patterns, url
from django.conf.urls import patterns, url, include
from greenmine.base import api, routers
router = routers.Router(trailing_slash=False)
router.register("users", api.UsersViewSet, base_name="users")
router.register("roles", api.RolesViewSet, base_name="roles")
router.register("search", api.Search, base_name="search")
urlpatterns = router.urls
router.register(r"users", api.UsersViewSet, base_name="users")
router.register(r"roles", api.RolesViewSet, base_name="roles")
router.register(r"search", api.Search, base_name="search")
router.register(r"auth/login", api.Login, base_name="auth-login")
router.register(r"auth/logout", api.Logout, base_name="auth-logout")
urlpatterns = patterns("",
url(r"", include(router.urls)),
)