Refactor login method in POSDeviceViewSet to improve device activation logic and response messages
This commit is contained in:
@@ -48,36 +48,50 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
|
|||||||
headers_data = {key: request.headers.get(key) for key in self.HEADERS}
|
headers_data = {key: request.headers.get(key) for key in self.HEADERS}
|
||||||
|
|
||||||
serial = headers_data['device-serial']
|
serial = headers_data['device-serial']
|
||||||
|
mac = headers_data['device-mac']
|
||||||
sdk = headers_data['device-sdk']
|
sdk = headers_data['device-sdk']
|
||||||
psp_name = headers_data['device-provider']
|
psp_name = headers_data['device-provider']
|
||||||
|
|
||||||
# provider organization
|
# provider organization
|
||||||
organization = pos_models.Organization.objects.get(en_name=psp_name)
|
organization = pos_models.Organization.objects.get(en_name=psp_name)
|
||||||
|
|
||||||
# check if device exists
|
device = self.device_queryset.filter(serial=serial).first()
|
||||||
if 'device_identity' in request.data.keys() and request.data['device_identity'] != "":
|
|
||||||
|
if not device and 'device_identity' in request.data.keys() and request.data['device_identity'] != "":
|
||||||
device = self.device_queryset.filter(device_identity=request.data['device_identity']).first()
|
device = self.device_queryset.filter(device_identity=request.data['device_identity']).first()
|
||||||
else:
|
|
||||||
device = self.device_queryset.filter(serial=serial).first()
|
|
||||||
|
|
||||||
# activate device
|
|
||||||
if device:
|
if device:
|
||||||
if (not device.is_activated or not device.pre_registered) and device.assigned_state:
|
if not device.is_activated and device.pre_registered and device.assigned_state:
|
||||||
# when device is logged in, its has an organization owner client, if not it will show error
|
# activate device
|
||||||
device_owner_org = self.get_device_organization()
|
|
||||||
device.is_activated = True
|
device.is_activated = True
|
||||||
device.save()
|
device.save()
|
||||||
|
|
||||||
session = pos_models.Sessions.objects.create(
|
if device.is_activatedand and device.assigned_state:
|
||||||
device=device,
|
# when device is logged in, its has an organization owner client, if not it will show error
|
||||||
password=device.password,
|
device_owner_org = self.get_device_organization()
|
||||||
version=headers_data['device-version'],
|
|
||||||
mac=headers_data['device-mac'],
|
session = self.session_queryset.filter(serial=serial).first()
|
||||||
ip=get_client_ip(request),
|
if not session:
|
||||||
sdk=headers_data['device-sdk'],
|
session = pos_models.Sessions.objects.create(
|
||||||
serial=headers_data['device-serial'],
|
device=device,
|
||||||
latitude=headers_data['device-lot'],
|
name = headers_data['device-name'],
|
||||||
longitude=headers_data['device-lng'],
|
version=headers_data['device-version'],
|
||||||
)
|
mac=headers_data['device-mac'],
|
||||||
|
ip=get_client_ip(request),
|
||||||
|
sdk=headers_data['device-sdk'],
|
||||||
|
serial=headers_data['device-serial'],
|
||||||
|
latitude=headers_data['device-lot'],
|
||||||
|
longitude=headers_data['device-lng'],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
session.name = headers_data['device-name']
|
||||||
|
session.version = headers_data['device-version']
|
||||||
|
session.mac = headers_data['device-mac']
|
||||||
|
session.ip = get_client_ip(request)
|
||||||
|
session.sdk = headers_data['device-sdk']
|
||||||
|
session.latitude = headers_data['device-lot']
|
||||||
|
session.longitude = headers_data['device-lng']
|
||||||
|
session.save()
|
||||||
|
|
||||||
org_data = {
|
org_data = {
|
||||||
'id': device_owner_org.id,
|
'id': device_owner_org.id,
|
||||||
@@ -86,7 +100,7 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
"message": "login success - session activated",
|
"message": "خوش آمدید",
|
||||||
"device_identity": device.device_identity,
|
"device_identity": device.device_identity,
|
||||||
"serial": device.serial,
|
"serial": device.serial,
|
||||||
"password": device.password,
|
"password": device.password,
|
||||||
@@ -95,30 +109,32 @@ class POSDeviceViewSet(viewsets.ModelViewSet, POSDeviceMixin):
|
|||||||
"device_owner": org_data,
|
"device_owner": org_data,
|
||||||
"device_owner_users": get_users_of_organization(device_owner_org)
|
"device_owner_users": get_users_of_organization(device_owner_org)
|
||||||
}, status=status.HTTP_200_OK)
|
}, status=status.HTTP_200_OK)
|
||||||
|
|
||||||
return Response({
|
return Response({
|
||||||
"message": "device pre registered - unauthorized",
|
"message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد",
|
||||||
"device_identity": device.device_identity,
|
"device_identity": device.device_identity,
|
||||||
"password": device.password,
|
"password": "****",
|
||||||
"serial": device.serial,
|
"serial": device.serial,
|
||||||
"provider": organization.name,
|
"provider": organization.name,
|
||||||
"provider_tell": '0214021',
|
"provider_tell": '0214021',
|
||||||
}, status=status.HTTP_401_UNAUTHORIZED)
|
}, status=status.HTTP_401_UNAUTHORIZED)
|
||||||
|
|
||||||
|
else:
|
||||||
|
pre_device = pos_models.Device.objects.create(
|
||||||
|
serial=serial,
|
||||||
|
mac=mac,
|
||||||
|
organization=organization,
|
||||||
|
pre_registered=True,
|
||||||
|
is_activated=False
|
||||||
|
)
|
||||||
|
|
||||||
pre_device = pos_models.Device.objects.create(
|
return Response({
|
||||||
serial=serial,
|
"message": "دستگاه در سیستم ثبت در انتظار فعال سازی توسط پذیرنده می باشد",
|
||||||
organization=organization,
|
"device_identity": pre_device.device_identity,
|
||||||
pre_registered=True,
|
"password": "****",
|
||||||
is_activated=False
|
"provider": organization.name,
|
||||||
)
|
"provider_tell": '0214021',
|
||||||
|
}, status=status.HTTP_412_PRECONDITION_FAILED)
|
||||||
return Response({
|
|
||||||
"message": "device pre-registered",
|
|
||||||
"device_identity": pre_device.device_identity,
|
|
||||||
"password": pre_device.password,
|
|
||||||
"provider": organization.name,
|
|
||||||
"provider_tell": '0214021',
|
|
||||||
}, status=status.HTTP_412_PRECONDITION_FAILED)
|
|
||||||
|
|
||||||
@action(
|
@action(
|
||||||
methods=['post'],
|
methods=['post'],
|
||||||
|
|||||||
Reference in New Issue
Block a user