import hashlib import random import uuid import time import math import re USERNAME_PATTERN: re.Pattern = re.compile("^[0-9A-Za-z]+$") PASSWORD_PATTERN: re.Pattern = re.compile("^[!-~]+$") def IsValidUsername(strl: str) -> bool: return USERNAME_PATTERN.match(strl) is not None def IsValidPassword(strl: str) -> bool: return PASSWORD_PATTERN.match(strl) is not None def ComputePasswordHash(password: str) -> str: s = hashlib.sha256() s.update(password.encode("utf-8")) return s.hexdigest() def GenerateUUID() -> str: return str(uuid.uuid1()) def GenerateToken(username: str) -> str: s = hashlib.sha256() s.update(username.encode("utf-8")) s.update(GenerateUUID().encode("utf-8")) return s.hexdigest() def GenerateSalt() -> int: return random.randint(0, 6172748) def ComputePasswordHashWithSalt(passwordHashed: str, salt: int) -> str: s = hashlib.sha256() s.update((passwordHashed + str(salt)).encode("utf-8")) return s.hexdigest() def GetCurrentTimestamp() -> int: return int(time.time()) def GetTokenExpireOn() -> int: return GetCurrentTimestamp() + 60 * 60 * 24 * 2 # add 2 day from now def Str2Bool(strl: str) -> bool: return strl.lower() == "true" def GCD(a: int, b: int) -> int: return math.gcd(a, b) def LCM(a: int, b: int) -> int: return (a * b) // GCD(a, b)