from datetime import datetime, timedelta from sqlor.dbpools import DBPools from appPublic.uniqueID import getID, validate_code, check_code async def generate_vcode(minutes=30): ns = { 'id':getID(), 'vcode':validate_code(getID()), 'expore_time':str(datetime.now() + timedelta(minutes=minutes)) } db = DBPools() async with db.sqlorContext('kboss') as sor: await sor.C('validatecode', ns.copy()) return ns async def check_vcode(id, code): db = DBPools() async with db.sqlorContext('kboss') as sor: recs = await sor.R('validatecode', {'id':id}) if len(recs) == 0: print(f'record not found {id=}') return False r = recs[0] n = str(datetime.now()) if n > r['expore_time']: print(f'timeout {n=}, {r["expore_time"]=}') return False if code != r['vcode']: print(f'{code=} != {r["vocode"]=}') return False return True