aboutsummaryrefslogtreecommitdiffstats
path: root/packages/meshbay-hub/src/meshbay_hub/api/users.py
diff options
context:
space:
mode:
Diffstat (limited to 'packages/meshbay-hub/src/meshbay_hub/api/users.py')
-rw-r--r--packages/meshbay-hub/src/meshbay_hub/api/users.py10
1 files changed, 8 insertions, 2 deletions
diff --git a/packages/meshbay-hub/src/meshbay_hub/api/users.py b/packages/meshbay-hub/src/meshbay_hub/api/users.py
index 05f58cd..9150909 100644
--- a/packages/meshbay-hub/src/meshbay_hub/api/users.py
+++ b/packages/meshbay-hub/src/meshbay_hub/api/users.py
@@ -78,6 +78,10 @@ async def _verify_captcha_or_raise(token: str | None, request: Request) -> None:
# ── Models ────────────────────────────────────────────────────────────────────
+# Mirrored by USERNAME_MIN_LEN in static/auth-page.js; test_username_floor.py
+# holds the two equal.
+USERNAME_MIN_LEN = 8
+
class RegisterRequest(BaseModel):
username: str
email: str
@@ -92,9 +96,11 @@ class RegisterRequest(BaseModel):
@field_validator("username")
@classmethod
def username_valid(cls, v: str) -> str:
+ # Registration only. Login, reset and deletion take the name as stored,
+ # so accounts created under the older 3-character floor keep working.
v = v.strip()
- if len(v) < 3 or len(v) > 64:
- raise ValueError("username must be 3-64 chars")
+ if len(v) < USERNAME_MIN_LEN or len(v) > 64:
+ raise ValueError(f"username must be {USERNAME_MIN_LEN}-64 chars")
if not v.replace("_", "").replace("-", "").replace(".", "").isalnum():
raise ValueError("username: only letters, digits, -, _, .")
return v