#237 Unpad secret in totp url to fix issue with Google Authenticator
authorAdam Dullage <redacted>
Wed, 4 Sep 2024 05:14:15 +0000 (06:14 +0100)
committerAdam Dullage <redacted>
Wed, 4 Sep 2024 05:14:15 +0000 (06:14 +0100)
server/auth/local/local.py

index d94b1496cdf3551996ba2fa561b4f11cab95b2b6..f413806c515efe42f2b1dbc041babbd4e60c8f8b 100644 (file)
@@ -2,10 +2,11 @@ import secrets
 from base64 import b32encode\r
 from datetime import datetime, timedelta\r
 \r
-import pyotp\r
 from fastapi import Depends, HTTPException, Request\r
 from fastapi.security import OAuth2PasswordBearer\r
 from jose import JWTError, jwt\r
+from pyotp import TOTP\r
+from pyotp.utils import build_uri\r
 from qrcode import QRCode\r
 \r
 from global_config import AuthType, GlobalConfig\r
@@ -35,7 +36,7 @@ class LocalAuth(BaseAuth):
             self.is_totp_enabled = True\r
             self.totp_key = get_env("FLATNOTES_TOTP_KEY", mandatory=True)\r
             self.totp_key = b32encode(self.totp_key.encode("utf-8"))\r
-            self.totp = pyotp.TOTP(self.totp_key)\r
+            self.totp = TOTP(self.totp_key)\r
             self.last_used_totp = None\r
             self._display_totp_enrolment()\r
 \r
@@ -110,9 +111,10 @@ class LocalAuth(BaseAuth):
         return encoded_jwt\r
 \r
     def _display_totp_enrolment(self):\r
-        uri = self.totp.provisioning_uri(\r
-            issuer_name="flatnotes", name=self.username\r
-        )\r
+        # Fix for #237. Remove padding as per spec:\r
+        # https://github.com/google/google-authenticator/wiki/Key-Uri-Format#secret\r
+        unpadded_secret = self.totp_key.rstrip(b"=")\r
+        uri = build_uri(unpadded_secret, self.username, issuer="flatnotes")\r
         qr = QRCode()\r
         qr.add_data(uri)\r
         print(\r
git clone https://git.99rst.org/PROJECT