admin / Synapse-Cortex
publicSelf Hosted ITSM Tool with RBAC/Tenanting and MFA
Synapse-Cortex / Synapse-Cortexv2 / app / mfa.py
773 B · main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import base64 from io import BytesIO import pyotp import qrcode ISSUER = "Synapse-Cortex" def generate_secret() -> str: return pyotp.random_base32() def provisioning_uri(secret: str, email: str) -> str: return pyotp.TOTP(secret).provisioning_uri(name=email, issuer_name=ISSUER) def qr_data_url(uri: str) -> str: img = qrcode.make(uri) buf = BytesIO() img.save(buf, format="PNG") encoded = base64.b64encode(buf.getvalue()).decode("ascii") return f"data:image/png;base64,{encoded}" def verify_code(secret: str, code: str) -> bool: if not secret or not code: return False # valid_window=1 tolerates minor clock drift between server and authenticator app. return pyotp.TOTP(secret).verify(code.strip(), valid_window=1) |