Forked from
infrastruktur / warpinfra
39 commits behind the upstream repository.
-
Christian Dresen authoredChristian Dresen authored
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()