server/authentication/views.py
author rougeronj
Thu, 02 Apr 2015 11:57:39 +0200
changeset 51 032280909e65
child 61 5abd0a9eafbc
permissions -rw-r--r--
add authentication module using Token Auth


import json

from django.contrib.auth import get_user_model
import requests
from rest_framework import serializers, status, permissions
from rest_framework.authentication import TokenAuthentication
from rest_framework.authtoken.models import Token
from rest_framework.exceptions import ParseError
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response
from rest_framework.views import APIView

from config import URL_JAMESPOT


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = get_user_model()

class User(APIView):
    """
    get list user or add user
    """
    permission_classes = (permissions.AllowAny,)
    
    def get(self, request):
        print ("here ?")
        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]
        DEFAULTS = {
            "groups":"",
            "user_permissions":""
        }
        request.data.update(DEFAULTS)
        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(URL_JAMESPOT, params=params)
            infoUser = json.loads(r.content.decode('utf-8'))
            
            user_data.update({"idUser":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 AuthView(APIView):
    """
    Authentication is needed for this methods
    """
    authentication_classes = (TokenAuthentication,)
    permission_classes = (IsAuthenticated,)
 
    def get(self, request, format=None):
        return Response({'detail': "I suppose you are authenticated"})