Files
crmApi/apps/jwt_auth/services.py
T
2024-01-23 09:54:38 +03:30

91 lines
3.4 KiB
Python

import uuid
import random
from django.contrib.auth import get_user_model
from apps.jwt_auth.models import CUserRoleLoginOpt
from apps.cuser.models import CuserRole as CuserRoleModel, SmsOpt as SmsOptModel
from django.utils import timezone
from rest_framework import exceptions
CUser = get_user_model()
def login_by_username(username: str, password: str) -> CUserRoleLoginOpt:
try:
print(username)
user = CUser.objects.get(username=username)
print(user)
if user and user.check_password(password):
cuser_roles = CuserRoleModel.objects.filter(cuser=user)
CUserRoleLoginOpt.objects.filter(cuser_role__cuser=user).delete()
if cuser_roles:
for user_role_obj in cuser_roles:
if not (user_role_obj.is_active and user_role_obj.mobile_verify):
raise exceptions.ValidationError({"error": 'Not a valid user'})
expire_datetime = timezone.datetime.now() + timezone.timedelta(minutes=5)
user_role_opt = CUserRoleLoginOpt()
user_role_opt.cuser_role = user_role_obj
user_role_opt.cuser = user_role_obj.cuser
user_role_opt.expire = expire_datetime
user_role_opt.uuid = uuid.uuid4()
user_role_opt.save()
login_opts = CUserRoleLoginOpt.objects.filter(cuser_role__cuser=user)
return login_opts
else:
raise exceptions.ValidationError({'error': "User not have role"})
else:
raise exceptions.ValidationError({'error': "Username or password is not correct"})
except CUser.DoesNotExist:
raise exceptions.ValidationError({'error': "Username or password is not correct"})
def login_by_mobile(mobile: int):
try:
exists_cuser = CUser.objects.get(mobile=mobile)
random_number = random.randint(100000, 999999)
try:
SmsOptModel.objects.filter(mobile=mobile).delete()
except Exception as exp:
pass
opt_code = SmsOptModel(mobile=mobile, opt=123456)
opt_code.save()
except Exception as exp:
raise exceptions.ValidationError({'error': "mobile not found"})
def verify_mobile_and_get_token(mobile: int, opt: int) -> CUserRoleLoginOpt:
try:
opt_obj = SmsOptModel.objects.filter(mobile=mobile, opt=opt)[0]
if opt_obj:
cuser_roles = CuserRoleModel.objects.filter(cuser__mobile=mobile, is_active=True)
CUserRoleLoginOpt.objects.filter(cuser_role__in=cuser_roles).delete()
if cuser_roles:
for user_role_obj in cuser_roles:
expire_datetime = timezone.datetime.now() + timezone.timedelta(minutes=5)
user_role_opt = CUserRoleLoginOpt()
user_role_opt.cuser_role = user_role_obj
user_role_opt.cuser = user_role_obj.cuser
user_role_opt.expire = expire_datetime
user_role_opt.uuid = uuid.uuid4()
user_role_opt.save()
login_opts = CUserRoleLoginOpt.objects.filter(cuser_role__in=cuser_roles)
SmsOptModel.objects.filter(mobile=mobile).delete()
return login_opts
except Exception as exp:
raise exceptions.ValidationError({'error': "cannot verify this mobile and opt code:"+str(exp)})