import base64 import hashlib from urllib.parse import urlencode import bcrypt from fastapi import FastAPI def bcrypt_sha256_hash(password: str) -> str: digest = hashlib.sha256(password.encode("utf-8")).digest() encoded = base64.b64encode(digest) return bcrypt.hashpw(encoded, bcrypt.gensalt()).decode("utf-8") def bcrypt_sha256_verify(password: str, hashed: str) -> bool: digest = hashlib.sha256(password.encode("utf-8")).digest() encoded = base64.b64encode(digest) return bcrypt.checkpw(encoded, hashed.encode('utf-8')) def get_url_path_with_query(app: FastAPI, name: str, params: dict | None = None, /, **path_params: str): base = app.url_path_for(name, **path_params) return base + '?' + urlencode(params) if params is not None else base