You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
2.9 KiB
Python

from osinacore.models import *
from .serializers import *
from rest_framework.decorators import api_view
from .utils import *
import calendar
from django.contrib.auth.hashers import check_password
from datetime import datetime
import datetime as datetime2
from fcm_django.models import FCMDevice
@api_view(['POST'])
def login_user(request):
try:
username = request.data.get('username')
password = request.data.get('password')
if(not password or not username):
raise ValueError("Missing fields")
user = User.objects.get(username=username)
serial = LoginSerializer(user)
passwordValid = check_password(password, serial.data['password'])
if passwordValid and StaffProfile.objects.filter(user=user):
future = datetime.utcnow() + datetime2.timedelta(days=183)
futuretime = calendar.timegm(future.timetuple())
encoded_jwt = jwt.encode({"username": username, "exp": futuretime, "is_superuser": serial.data['is_superuser'], "userid":serial.instance.id}, "ibiye4700", algorithm="HS256")
#encoded_jwt = encoded_jwt.decode('utf-8')
return successRes(msg={"token": encoded_jwt,"first_name":user.first_name,"last_name":user.last_name,"email":user.email, "id":user.id})
else:
raise ValueError("Incorrect password!")
except User.DoesNotExist:
return errorRes(msg="User doesn't exist!")
except ValueError as err:
return errorRes(msg=str(err))
except Exception as e:
print(e)
return errorRes(msg=str(e))
@api_view(['POST'])
def register_device(request):
try:
registration_token = request.data.get('registration_token')
device_type = request.data.get('device_type')
# Check if the device already exists
existing_device = FCMDevice.objects.get(registration_id=registration_token)
return errorRes(msg='Device already registered')
except FCMDevice.DoesNotExist:
# Create a new device
device = FCMDevice(registration_id=registration_token, type=device_type)
device.save()
return successRes(msg="Device registered successfully.")
except Exception as e:
return errorRes(str(e))
@api_view(['POST'])
def update_device(request):
try:
registration_token = request.data.get('registration_token')
token_data = verify(request.headers.get("Authorization"))
user_id = token_data['userid']
user = User.objects.get(id=user_id)
existing_device = FCMDevice.objects.get(registration_id=registration_token)
existing_device.user = user
existing_device.save()
return successRes(msg='Device updated')
except FCMDevice.DoesNotExist:
return errorRes(msg='Device is not registered')
except TokenError as terr:
return errorRes(msg=str(terr), status=450)
except Exception as e:
return errorRes(str(e))