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