fix: sync admin password from .env on startup, add host.docker.internal for local sub2api
- _init_admin now re-hashes password if .env password differs from DB - docker-compose: add extra_hosts host.docker.internal:host-gateway so containers can reach host services via host.docker.internal
This commit is contained in:
+11
-5
@@ -12,7 +12,7 @@ from app.config import get_settings
|
|||||||
from app.database import init_db
|
from app.database import init_db
|
||||||
from app.models.admin_user import AdminUser
|
from app.models.admin_user import AdminUser
|
||||||
from app.database import SessionLocal
|
from app.database import SessionLocal
|
||||||
from app.utils.auth import hash_password, validate_password_supported
|
from app.utils.auth import hash_password, verify_password, validate_password_supported
|
||||||
from app.services.scheduler import start_scheduler, stop_scheduler
|
from app.services.scheduler import start_scheduler, stop_scheduler
|
||||||
from app.routers import auth, upstreams, webhooks, logs, custom_pages, browser_sessions, websites
|
from app.routers import auth, upstreams, webhooks, logs, custom_pages, browser_sessions, websites
|
||||||
from app.services.browser_session_service import browser_sessions as browser_session_service
|
from app.services.browser_session_service import browser_sessions as browser_session_service
|
||||||
@@ -38,8 +38,16 @@ def _init_admin() -> None:
|
|||||||
settings = get_settings()
|
settings = get_settings()
|
||||||
db = SessionLocal()
|
db = SessionLocal()
|
||||||
try:
|
try:
|
||||||
exists = db.query(AdminUser).filter(AdminUser.email == settings.admin_email).first()
|
existing = db.query(AdminUser).filter(AdminUser.email == settings.admin_email).first()
|
||||||
if not exists:
|
if existing:
|
||||||
|
# Sync password hash if .env has changed since first creation
|
||||||
|
if not verify_password(settings.admin_password, existing.password_hash):
|
||||||
|
existing.password_hash = hash_password(settings.admin_password)
|
||||||
|
db.commit()
|
||||||
|
logger.info("admin password updated: %s", settings.admin_email)
|
||||||
|
else:
|
||||||
|
logger.info("admin user already exists: %s", settings.admin_email)
|
||||||
|
else:
|
||||||
user = AdminUser(
|
user = AdminUser(
|
||||||
email=settings.admin_email,
|
email=settings.admin_email,
|
||||||
password_hash=hash_password(settings.admin_password),
|
password_hash=hash_password(settings.admin_password),
|
||||||
@@ -47,8 +55,6 @@ def _init_admin() -> None:
|
|||||||
db.add(user)
|
db.add(user)
|
||||||
db.commit()
|
db.commit()
|
||||||
logger.info("admin user created: %s", settings.admin_email)
|
logger.info("admin user created: %s", settings.admin_email)
|
||||||
else:
|
|
||||||
logger.info("admin user already exists: %s", settings.admin_email)
|
|
||||||
finally:
|
finally:
|
||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,8 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "${BIND_HOST:-0.0.0.0}:${SERVER_PORT:-8899}:8000"
|
- "${BIND_HOST:-0.0.0.0}:${SERVER_PORT:-8899}:8000"
|
||||||
|
extra_hosts:
|
||||||
|
- "host.docker.internal:host-gateway"
|
||||||
volumes:
|
volumes:
|
||||||
- ./data:/app/data
|
- ./data:/app/data
|
||||||
environment:
|
environment:
|
||||||
|
|||||||
Reference in New Issue
Block a user