added admin login redirect to admin dashboard
This commit is contained in:
@@ -16,6 +16,7 @@ class LoginResponse(BaseModel):
|
|||||||
message: str
|
message: str
|
||||||
username: str
|
username: str
|
||||||
access_token: str
|
access_token: str
|
||||||
|
is_admin: bool
|
||||||
token_type: str = "bearer"
|
token_type: str = "bearer"
|
||||||
|
|
||||||
|
|
||||||
@@ -33,4 +34,5 @@ class RegisterResponse(BaseModel):
|
|||||||
message: str
|
message: str
|
||||||
username: str
|
username: str
|
||||||
access_token: str
|
access_token: str
|
||||||
|
is_admin: bool
|
||||||
token_type: str = "bearer"
|
token_type: str = "bearer"
|
||||||
|
|||||||
@@ -57,15 +57,24 @@ def verify_admin(
|
|||||||
],
|
],
|
||||||
) -> int:
|
) -> int:
|
||||||
"""Verify the user is an admin and return user_id."""
|
"""Verify the user is an admin and return user_id."""
|
||||||
|
# First try to get user from database
|
||||||
user = user_repo.get_by_id(user_id)
|
user = user_repo.get_by_id(user_id)
|
||||||
|
|
||||||
if not user:
|
if user:
|
||||||
raise HTTPException(status_code=401, detail="User not found")
|
# Database user - check is_admin field
|
||||||
|
if not user.get("is_admin", False):
|
||||||
|
raise HTTPException(
|
||||||
|
status_code=403, detail="Admin access required"
|
||||||
|
)
|
||||||
|
return user_id
|
||||||
|
|
||||||
if not user.get("is_admin", False):
|
# If not in database but has valid token with user_id=1,
|
||||||
raise HTTPException(status_code=403, detail="Admin access required")
|
# it's the environment-based admin (only assigned during env admin login)
|
||||||
|
if user_id == 1:
|
||||||
|
return user_id
|
||||||
|
|
||||||
return user_id
|
# User not found and not environment admin
|
||||||
|
raise HTTPException(status_code=401, detail="User not found")
|
||||||
|
|
||||||
|
|
||||||
@router.post("/login", response_model=LoginResponse)
|
@router.post("/login", response_model=LoginResponse)
|
||||||
@@ -101,6 +110,7 @@ def login(
|
|||||||
message="Login successful",
|
message="Login successful",
|
||||||
username=credentials.username,
|
username=credentials.username,
|
||||||
access_token=access_token,
|
access_token=access_token,
|
||||||
|
is_admin=user.get("is_admin", False),
|
||||||
)
|
)
|
||||||
|
|
||||||
# Fallback to admin credentials from environment
|
# Fallback to admin credentials from environment
|
||||||
@@ -116,6 +126,7 @@ def login(
|
|||||||
message="Login successful",
|
message="Login successful",
|
||||||
username=credentials.username,
|
username=credentials.username,
|
||||||
access_token=access_token,
|
access_token=access_token,
|
||||||
|
is_admin=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
@@ -200,6 +211,7 @@ def register(
|
|||||||
message="Registration successful",
|
message="Registration successful",
|
||||||
username=user["username"],
|
username=user["username"],
|
||||||
access_token=access_token,
|
access_token=access_token,
|
||||||
|
is_admin=user.get("is_admin", False),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -209,12 +221,21 @@ def get_current_user(
|
|||||||
user_repo: Annotated[
|
user_repo: Annotated[
|
||||||
UserRepositoryInterface, Depends(get_user_repository)
|
UserRepositoryInterface, Depends(get_user_repository)
|
||||||
],
|
],
|
||||||
|
creds_repo: Annotated[
|
||||||
|
CredentialsRepositoryInterface, Depends(get_credentials_repository)
|
||||||
|
],
|
||||||
) -> dict:
|
) -> dict:
|
||||||
"""Get current user info including admin status."""
|
"""Get current user info including admin status."""
|
||||||
user = user_repo.get_by_id(user_id)
|
user = user_repo.get_by_id(user_id)
|
||||||
|
|
||||||
|
# If user not found in DB, might be env-based admin
|
||||||
if not user:
|
if not user:
|
||||||
raise HTTPException(status_code=404, detail="User not found")
|
# Return admin info from environment
|
||||||
|
return {
|
||||||
|
"id": user_id,
|
||||||
|
"username": creds_repo.get_admin_username(),
|
||||||
|
"is_admin": True, # Env-based admin is always admin
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
"id": user["id"],
|
"id": user["id"],
|
||||||
|
|||||||
@@ -112,9 +112,14 @@
|
|||||||
// Store token in localStorage
|
// Store token in localStorage
|
||||||
localStorage.setItem("access_token", data.access_token);
|
localStorage.setItem("access_token", data.access_token);
|
||||||
localStorage.setItem("username", data.username);
|
localStorage.setItem("username", data.username);
|
||||||
// Redirect to home page
|
|
||||||
|
// Redirect based on is_admin from login response
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
window.location.href = "/";
|
if (data.is_admin === true) {
|
||||||
|
window.location.href = "/admin.html";
|
||||||
|
} else {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
}, 1000);
|
}, 1000);
|
||||||
} else {
|
} else {
|
||||||
showMessage(data.detail || "Login failed", "error");
|
showMessage(data.detail || "Login failed", "error");
|
||||||
|
|||||||
Reference in New Issue
Block a user