import io import pyotp import qrcode import qrcode.image.svg def totp_provisioning_uri(secret, email): return pyotp.TOTP(secret).provisioning_uri(name=email, issuer_name="Forge Engine") def totp_qrcode_svg(secret, email): """SVG (pas PNG) : la variante "image factory" par défaut de qrcode a besoin de Pillow pour produire un PNG — SvgImage, elle, est du pur Python, sans dépendance supplémentaire à installer juste pour un QR code affiché une seule fois par compte, à l'inscription.""" uri = totp_provisioning_uri(secret, email) img = qrcode.make(uri, image_factory=qrcode.image.svg.SvgImage) buf = io.BytesIO() img.save(buf) return buf.getvalue().decode("utf-8")