Skip to content
Snippets Groups Projects
Forked from infrastruktur / warpinfra
39 commits behind the upstream repository.
views.py 3.87 KiB
from django.db import IntegrityError
from django.core.exceptions import ObjectDoesNotExist
from warpauth.models import LdapUser
from warppay.models import UserCredit, UserCreditSerializer, Product, ProductSerializer
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework.decorators import authentication_classes, permission_classes
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import User
from rest_framework import status

# logging.getLogger('main').info(token.key)

@api_view(['GET', 'PUT'])
#@authentication_classes((TokenAuthentication,))
#@permission_classes((IsAuthenticated,))
def product_list(request):
    if request.method == 'GET':
        products = Product.objects.all()
        serializer = ProductSerializer(products,context={'request': request}, many=True)
        return Response(serializer.data)
    elif request.method == 'PUT':
        return Response()
    return Response()


@api_view(['GET'])
def gen_token(request):
    if request.method == 'GET': 
        token = Token.objects.create(user=User.objects.get(username='api'))    
        return Response(token)
    return Response()

@api_view(['GET', 'PUT'])
#@authentication_classes((TokenAuthentication,))
#@permission_classes((IsAuthenticated,))
def user_list(request, user_id = 0):
    if request.method == 'GET':
        sync_users()
        if not user_id:
            users = UserCredit.objects.all()
            serializer = UserCreditSerializer(users, many=True)
        else:
            user = UserCredit.objects.get(uid=user_id)
            serializer = UserCreditSerializer(user)
        return Response(serializer.data)        
    elif request.method == 'PUT':
        if not user_id:
            return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
            
        sync_users()
        try:
            user = UserCredit.objects.get(uid=user_id)
            if "credit" in request.data:
                user.credit = request.data['credit']
            elif "card_id" in request.data:
                # ToDo: Diskussion: Direkt Karte Ändern?
                try:
                    ldap_user = LdapUser.objects.get(uid=str(request.data['uid']))
                    if not ldap_user.card_id:
                        ldap_user.card_id = request.data['card_id']
                        ldap_user.save()
                    else:
                        return Response(status=status.HTTP_403_FORBIDDEN)
                except:
                    pass
                user.card_id = request.data['card_id']
            user.save();

            return Response(UserCreditSerializer(user).data)
        except UserCredit.DoesNotExist:
            return Response(status=status.HTTP_404_NOT_FOUND)
        return Response()
        
    elif request.method == 'POST':
        card_id=""
        if not 'uid' in request.data:
            return Response(status=status.HTTP_406_NOT_ACCEPTABLE)
        if 'card_id' in request.data:
            card_id = request.data['card_id']
        u = UserCredit(uid=request.data['uid'], card_id=card_id, credit=0.0)
        try:
            u.save()
            state=status.HTTP_201_CREATED
        except IntegrityError as e:
            u = UserCredit.objects.get(uid=request.data['uid'])
            state=status.HTTP_409_CONFLICT
        
        serializer = UserCreditSerializer(u)
        return Response(serializer.data, status=state)
    return Response()
    

def sync_users():
    for user in LdapUser.objects.all():
        try:
            u = UserCredit.objects.get(uid=user.uid)
            if user.card_id:
                u.card_id = user.card_id
                u.save()
        except ObjectDoesNotExist:
            u = UserCredit(uid=user.uid, card_id=user.card_id, credit=0.0)
            u.save()