65 lines
1.3 KiB
Python
65 lines
1.3 KiB
Python
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)
|