From c6f131d2e90f4e4271576ec722dc108ccfa19f5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oj=C4=81rs=20Kapteinis?= Date: Tue, 18 Nov 2025 21:04:07 +0200 Subject: [PATCH] Fix admin user script: use bcrypt directly to handle password length --- surfsense_backend/scripts/update_admin_user.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/surfsense_backend/scripts/update_admin_user.py b/surfsense_backend/scripts/update_admin_user.py index 31bfd7d1d..8ed493cd6 100644 --- a/surfsense_backend/scripts/update_admin_user.py +++ b/surfsense_backend/scripts/update_admin_user.py @@ -26,19 +26,24 @@ from dotenv import load_dotenv # Load environment variables load_dotenv() -from passlib.context import CryptContext +import bcrypt from sqlalchemy import select, update from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker -# Password hashing context (same as FastAPI-Users uses) -pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto") - # Configuration ADMIN_EMAIL = "ojars@kapteinis.lv" NEW_PASSWORD = "^&U0yXLK1ypZOwLDGFeLT35kCrblITYyAVdVmF3!iJ%kkY1Nl^IS!P" +def hash_password(password: str) -> str: + """Hash password using bcrypt directly (same as FastAPI-Users).""" + # Encode to bytes and truncate to 72 bytes (bcrypt limit) + password_bytes = password.encode('utf-8')[:72] + salt = bcrypt.gensalt() + return bcrypt.hashpw(password_bytes, salt).decode('utf-8') + + async def update_admin_user(): """Update admin user password and status.""" @@ -64,7 +69,7 @@ async def update_admin_user(): async with async_session() as session: try: # Hash the new password - hashed_password = pwd_context.hash(NEW_PASSWORD) + hashed_password = hash_password(NEW_PASSWORD) # Update the user result = await session.execute(