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.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_roles = CuserRoleModel.objects.filter(mobile=mobile, mobile_verify=True) if not len(exists_cuser_roles) >= 1: raise exceptions.ValidationError({'error': "mobile not found"}) 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(mobile=mobile, mobile_verify=True, 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.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)})