server/ammicosrv/authentication/views.py
author rougeronj
Wed, 10 Jun 2015 15:45:21 +0200
changeset 158 8b4c073a7c2c
parent 156 bf4ae7d9a517
child 167 389540e1073f
permissions -rw-r--r--
increment version
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     1
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     2
import json
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     3
156
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
     4
from django.conf import settings
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     5
from django.contrib.auth import get_user_model
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     6
import requests
61
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
     7
from rest_framework import serializers, status, permissions, parsers, renderers
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     8
from rest_framework.authtoken.models import Token
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
     9
from rest_framework.response import Response
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    10
from rest_framework.views import APIView
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    11
135
27065f8a19d3 correct rename of src
ymh <ymh.work@gmail.com>
parents: 134
diff changeset
    12
from ammicosrv.ammico.views import populateVisit
156
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    13
from ammicosrv.authentication.serializers import AuthTokenSerializer, \
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    14
    UserSerializer
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    15
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    16
143
ea633c8f9bfa add exposition table and update the views to include the new foreign key to the exposition table
rougeronj
parents: 117
diff changeset
    17
#from ammico.views import populateVisit
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    18
class User(APIView):
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    19
    """
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    20
    get list user or add user
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    21
    """
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    22
    permission_classes = (permissions.AllowAny,)
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    23
    
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    24
    def get(self, request):
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    25
        user = get_user_model().objects.all()
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    26
        serializer = UserSerializer(user, many=True)
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    27
        return Response(serializer.data)
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    28
        
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    29
    def post(self, request):
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    30
        VALID_USER_FIELDS = [f.name for f in get_user_model()._meta.fields]
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    31
        serialized = UserSerializer(data=request.data)
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    32
        
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    33
        if serialized.is_valid():
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    34
            user_data = {field: data for (field, data) in request.DATA.items() if field in VALID_USER_FIELDS}
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    35
            
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    36
            params = {'o': 'user', 'f': 'get', 'mail': user_data['email']}
150
78e82bf8ff89 remove old config migrations
rougeronj
parents: 149
diff changeset
    37
            r = requests.get(settings.URL_JAMESPOT, params=params)
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    38
            infoUser = json.loads(r.content.decode('utf-8'))
61
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    39
            if ('idUser' in infoUser['VAL']):
156
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    40
                user_data.update({"id_user":infoUser['VAL']['idUser']})
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    41
            user = get_user_model().objects.create_user(
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    42
                **user_data
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    43
            )
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    44
            return Response(UserSerializer(instance=user).data, status=status.HTTP_201_CREATED)
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    45
        else:
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    46
            return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)
61
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    47
        
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    48
class ObtainAuthToken(APIView):
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    49
    throttle_classes = ()
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    50
    permission_classes = ()
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    51
    parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    52
    renderer_classes = (renderers.JSONRenderer,)
51
032280909e65 add authentication module using Token Auth
rougeronj
parents:
diff changeset
    53
61
5abd0a9eafbc custom ObtainToken function to add PopulateVisite function when a user connects
rougeronj
parents: 51
diff changeset
    54
    def post(self, request):
156
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    55
        serializer = AuthTokenSerializer(data=request.data)
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    56
        if serializer.is_valid():
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    57
            user = serializer.validated_data['user']
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    58
            if (user.id_user and 'idExpo' in request.GET):
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    59
                populateVisit(user, request.GET['idExpo'])
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    60
            token, _ = Token.objects.get_or_create(user=user)
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    61
            return Response({'token': token.key})
bf4ae7d9a517 refactor idUser to id_user
rougeronj
parents: 150
diff changeset
    62
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)