Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions server/auth.py
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,20 @@ async def require_auth(
return default_user
raise HTTPException(status_code=401, detail="Authentication required.")
return user


async def require_admin(
request: Request,
user: User | None = Depends(verify_auth),
db: Session = Depends(get_db),
) -> User:
"""Like require_auth but also enforces admin role."""
if user is None:
if getattr(request.state, "auth_type", "none") in {"admin_api_key", "disabled"}:
default_user = _get_default_user(db)
if default_user is not None:
return default_user
raise HTTPException(status_code=401, detail="Authentication required.")
if user.role != "admin":
raise HTTPException(status_code=403, detail="Admin role required.")
return user
6 changes: 3 additions & 3 deletions server/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from slowapi.errors import RateLimitExceeded
from sqlalchemy import func, select

from auth import ADMIN_API_KEY, AUTH_DISABLED, JWT_SECRET, verify_auth
from auth import ADMIN_API_KEY, AUTH_DISABLED, JWT_SECRET, require_admin, verify_auth
from errors import (
UpstreamError,
install_request_id_logging,
Expand Down Expand Up @@ -311,8 +311,8 @@ def list_bundled_providers(_auth=Depends(verify_auth)):


@app.post("/configure", summary="Configure Mem0")
def set_config(config: Dict[str, Any], _auth=Depends(verify_auth)):
"""Set memory configuration."""
def set_config(config: Dict[str, Any], _auth=Depends(require_admin)):
"""Set memory configuration. Requires admin role."""
_validate_bundled_providers(config)
update_config(config)
return {"message": "Configuration set successfully"}
Expand Down