49 lines
1.1 KiB
Python
49 lines
1.1 KiB
Python
from rand import randint
|
|
from sqlor.dbpools import DBPools
|
|
from ahserver.serverenv import ServerEnv
|
|
from appPublic.uniqueID import getID
|
|
from appPublic.timeUtils import timestampstr
|
|
|
|
from alisms import AliSMS
|
|
from const import DBNAME, VALID_SECONDS
|
|
async def gen_validatecode(phone_no){
|
|
codes = []
|
|
while len(codes) < 6:
|
|
v = randint(0,13)
|
|
if v >= 10:
|
|
continue
|
|
codes.append(str(v))
|
|
code = ''.join(codes)
|
|
sms = AliSMS()
|
|
r = sms.send(
|
|
ns = {
|
|
'id':getID(),
|
|
'code':''.join(code),
|
|
'timestamp':timestampstr()
|
|
}
|
|
db = DBPools()
|
|
async with db.sqlorContext(DBNAME) as sor:
|
|
await sor.C('validatecode', ns)
|
|
return ns['id']
|
|
return None
|
|
|
|
async def validate_code(id:str, code:str) -> boolean:
|
|
db = DBPools()
|
|
sql = """select * from validatecode
|
|
where id= ${id}$
|
|
and code = ${code}$
|
|
and timestamp + ${valid_secords}$ >= ${curr_timestamp}$"""
|
|
ns = {
|
|
'id':id,
|
|
'code':code,
|
|
'valid_seconds':VALID_SECONDS,
|
|
'curr_timestamp':time.time()
|
|
}
|
|
async with db.sqlorContext(DBNAME) as sor:
|
|
r = await sor.sqlExe(sql, ns.copy())
|
|
if len(r) < 1:
|
|
return False
|
|
return True
|
|
return False
|
|
|