111 lines
4.0 KiB
Python
111 lines
4.0 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
|
|
import requests
|
|
from datetime import timedelta
|
|
|
|
CUser = get_user_model()
|
|
|
|
def login_by_username(username: str, password: str) -> CUserRoleLoginOpt:
|
|
try:
|
|
print(username)
|
|
user = CUser.objects.get(username=username)
|
|
|
|
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
|
|
|
|
expire_time = timezone.now() + timedelta(minutes=3)
|
|
opt_code = SmsOptModel(mobile=mobile, opt=random_number, expire=expire_time)
|
|
opt_code.save()
|
|
|
|
sms_text = f' کد ورود شما: {random_number}'
|
|
|
|
payload = {
|
|
'USERNAME': 'vsms7937',
|
|
'PASSWORD': '335577775533',
|
|
'FROM': '30005367',
|
|
'TO': int(mobile),
|
|
'TEXT': f'{sms_text}'
|
|
}
|
|
r = requests.get('http://www.0098sms.com/sendsmslink.aspx', params=payload)
|
|
|
|
except Exception as exp:
|
|
raise exceptions.ValidationError({'error': "mobile not found"})
|
|
|
|
|
|
def verify_mobile_and_get_token(mobile: int, opt: int) -> CUserRoleLoginOpt:
|
|
try:
|
|
time_now = timezone.now()
|
|
opt_obj = SmsOptModel.objects.filter(mobile=mobile, opt=opt, expire__gte=time_now)[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:
|
|
try:
|
|
SmsOptModel.objects.filter(mobile=mobile).delete()
|
|
except Exception as exp:
|
|
pass
|
|
raise exceptions.ValidationError({'error': "cannot verify this mobile and opt code:"+str(exp)})
|