server/ammicosrv/authentication/views.py
author nowmad@23.1.168.192.in-addr.arpa
Wed, 02 Dec 2015 19:39:16 +0100
changeset 203 786cdb826f09
parent 167 389540e1073f
permissions -rw-r--r--
Increment version


import json

from django.conf import settings
from django.contrib.auth import get_user_model
import requests
from rest_framework import status, permissions, parsers, renderers
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from rest_framework.views import APIView

from ammicosrv.ammico.views import populateVisit
from ammicosrv.authentication.serializers import UserSerializer, \
    AuthTokenSerializer


#from ammico.views import populateVisit
class User(APIView):
    """
    get list user or add user
    """
    permission_classes = (permissions.AllowAny,)
    
    def get(self, request):
        user = get_user_model().objects.all()
        serializer = UserSerializer(user, many=True)
        return Response(serializer.data)
        
    def post(self, request):
        VALID_USER_FIELDS = [f.name for f in get_user_model()._meta.fields]
        serialized = UserSerializer(data=request.data)
        
        if serialized.is_valid():
            user_data = {field: data for (field, data) in request.DATA.items() if field in VALID_USER_FIELDS}
            
            params = {'o': 'user', 'f': 'get', 'mail': user_data['email']}
            r = requests.get(settings.URL_JAMESPOT, params=params)
            infoUser = json.loads(r.content.decode('utf-8'))
            if ('idUser' in infoUser['VAL']):
                user_data.update({"id_user":infoUser['VAL']['idUser']})
            user = get_user_model().objects.create_user(
                **user_data
            )
            return Response(UserSerializer(instance=user).data, status=status.HTTP_201_CREATED)
        else:
            return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
        
class ObtainAuthToken(APIView):
    throttle_classes = ()
    permission_classes = ()
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
    renderer_classes = (renderers.JSONRenderer,)

    def post(self, request):
        serializer = AuthTokenSerializer(data=request.data)
        if serializer.is_valid():
            user = serializer.validated_data['user']
            if (user.id_user and 'idExpo' in request.GET):
                populateVisit(user, request.GET['idExpo'])
            token, _ = Token.objects.get_or_create(user=user)
            return Response({'token': token.key})
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)