Guest User

Untitled

a guest
May 6th, 2018
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.58 KB | None | 0 0
  1. views.py
  2.  
  3. from rest_framework_mongoengine import generics
  4. from rest_framework.response import Response
  5. from .serializers import LoginSerializer
  6. from configuration.models import User
  7. #from captive_portal.models import SessionHistory, Voucher
  8. from .models import SessionHistory
  9. from rest_framework import serializers
  10.  
  11. from rest_framework import status
  12.  
  13.  
  14. class LoginView(generics.GenericAPIView):
  15. serializer_class = LoginSerializer
  16. authentication_classes = ()
  17. permission_classes = ()
  18.  
  19. def post(self, request):
  20. serializer = self.get_serializer(data=request.data)
  21.  
  22. # validate username, password, session_start and end date
  23. serializer.is_valid(raise_exception=True)
  24.  
  25. # validate voucher data limit
  26. serializer.validate_voucher_data_limit()
  27.  
  28. # create new session history
  29. serializer.create_session_history()
  30. user = User.objects.get(username=serializer.data.get('username'))
  31. serializer = self.get_serializer(user)
  32. return Response(serializer.data)
  33.  
  34.  
  35.  
  36. serializer.py
  37.  
  38.  
  39. from rest_framework.exceptions import AuthenticationFailed
  40. from rest_framework import serializers
  41. from django.contrib.auth import authenticate
  42. from .models import Token, SessionHistory
  43. from configuration.models import User, UserRole, RolePermission
  44. from rest_framework_mongoengine.serializers import DocumentSerializer
  45. from django.utils import timezone
  46. from captive_portal.models import Voucher
  47.  
  48. import datetime
  49. from rest_framework.exceptions import ValidationError
  50.  
  51. class LoginSerializer(serializers.Serializer):
  52.  
  53. username = serializers.CharField()
  54. password = serializers.CharField(write_only=True)
  55. first_name = serializers.CharField(read_only=True)
  56. last_name = serializers.CharField(read_only=True)
  57. email = serializers.EmailField(read_only=True)
  58. phone = serializers.CharField(read_only=True)
  59. token = serializers.CharField(read_only=True)
  60. is_superuser = serializers.BooleanField(read_only=True)
  61. roles = serializers.SerializerMethodField(read_only=True)
  62. address = serializers.CharField(read_only=True)
  63. state = serializers.CharField(read_only=True)
  64. city = serializers.CharField(read_only=True)
  65. country = serializers.CharField(read_only=True)
  66.  
  67. start_datetime = serializers.DateTimeField()
  68. end_datetime = serializers.DateTimeField()
  69. voucher_id = serializers.CharField()
  70.  
  71. class Meta:
  72. fields = '__all__'
  73.  
  74. def __init__(self, *args, **kwargs):
  75. try:
  76. self.user = args[0]
  77. except:
  78. self.user = None
  79.  
  80. super().__init__(*args, **kwargs)
  81.  
  82. def validate(self, data):
  83. super().validate(data)
  84. username = data.get('username')
  85. password = data.get('password')
  86.  
  87. if data['start_datetime'] >= data['end_datetime']:
  88. raise ValidationError('session history start date must be behind end date')
  89.  
  90. if username and password:
  91. user = authenticate(self.context['request'], username=username, password=password)
  92. if not user:
  93. raise AuthenticationFailed(detail='invalid username or password')
  94.  
  95. if not user.token:
  96. user.token = Token()
  97. user.save()
  98.  
  99. self.user = User.objects.get(username=username)
  100.  
  101. return data
  102.  
  103. # check data usage....
  104. def validate_voucher_data_limit(self):
  105. data = self.validated_data
  106. voucher = Voucher.objects.get(id=data['voucher_id'])
  107. user_sessions = SessionHistory.objects.filter(user=self.user, voucher=voucher)
  108. data_usage = 0
  109. for session in user_sessions:
  110. data_usage = data_usage + session['data_usage']
  111. if data_usage >= voucher.data_limit:
  112. raise ValidationError('voucher data limit expired.')
  113.  
  114. def create_session_history(self):
  115. data = self.validated_data
  116. voucher = Voucher.objects.get(id=data['voucher_id'])
  117. # pata ni ... sessionHistory k liye device kahan se ayega... baqi fields tu mil rahe
  118. SessionHistory.objects.create(user=self.user, voucher=voucher, start_datetime=data['start_datetime'], end_datetime=data['end_datetime'])
  119.  
  120. @staticmethod
  121. def get_permissions(role):
  122. return [perm.get_perm_dict() for perm in RolePermission.objects.filter(role=role.to_dbref())]
  123.  
  124. def get_role_dict(self, role):
  125. return {
  126. "name": role.name,
  127. "permissions": self.get_permissions(role)
  128. }
  129.  
  130. def get_roles(self, obj):
  131. return [self.get_role_dict(userRole.role) for userRole in UserRole.objects().filter(user=self.user.to_dbref())]
Add Comment
Please, Sign In to add comment