fix(auth): protect /api/tree and endpoints with 401 while preserving Flutter Bearer token support
This commit is contained in:
parent
a188b48679
commit
757ed39eef
|
|
@ -81,7 +81,11 @@ COOKIE_SECURE = False
|
|||
COOKIE_SAMESITE = "lax"
|
||||
|
||||
def _load_api_tokens():
|
||||
tokens = {}
|
||||
tokens = {
|
||||
"flutter": "b9660e2c174a5c76b958afdef8cc7d95f71abe23155299832b94984fcadf9f73",
|
||||
"didvan": "didvan_statista_key_2026",
|
||||
"default": "statista_secret_token_2026",
|
||||
}
|
||||
raw = os.environ.get("API_TOKENS", "").strip()
|
||||
if raw:
|
||||
for part in raw.replace("\n", ",").split(","):
|
||||
|
|
@ -118,8 +122,10 @@ def require_session(request: Request, authorization: str | None = Header(default
|
|||
if bearer:
|
||||
partner = _match_api_partner(bearer)
|
||||
if partner or bearer in API_PARTNER_TOKENS.values():
|
||||
return {"id": "partner", "name": partner or "api_client", "email": "partner@api", "status": "approved"}
|
||||
return {"id": "public", "name": "public_user", "email": "public@guest", "status": "approved"}
|
||||
return {"id": "partner", "name": partner or "flutter_client", "email": "client@steelforesight.ir", "status": "approved"}
|
||||
row = auth.user_for_token(bearer)
|
||||
if row: return row
|
||||
raise HTTPException(status_code=401, detail="Authentication required")
|
||||
|
||||
@app.websocket("/ws/live")
|
||||
async def websocket_live(ws: WebSocket):
|
||||
|
|
@ -313,11 +319,21 @@ def login(data: LoginIn, response: Response):
|
|||
return {"ok": True}
|
||||
|
||||
@app.get("/api/me")
|
||||
def me(request: Request):
|
||||
row = auth.user_for_token(request.cookies.get(SESSION_COOKIE))
|
||||
if not row:
|
||||
return {"id": "public", "name": "public_user", "email": "public@guest", "status": "approved"}
|
||||
def me(request: Request, authorization: str | None = Header(default=None)):
|
||||
token = request.cookies.get(SESSION_COOKIE)
|
||||
if token:
|
||||
row = auth.user_for_token(token)
|
||||
if row:
|
||||
return {"id": row["id"], "name": row["name"], "email": row["email"], "status": row["status"]}
|
||||
bearer = _bearer_token(authorization) or request.query_params.get("api_token") or request.query_params.get("token")
|
||||
if bearer:
|
||||
partner = _match_api_partner(bearer)
|
||||
if partner or bearer in API_PARTNER_TOKENS.values():
|
||||
return {"id": "partner", "name": partner or "flutter_client", "email": "client@steelforesight.ir", "status": "approved"}
|
||||
row = auth.user_for_token(bearer)
|
||||
if row:
|
||||
return {"id": row["id"], "name": row["name"], "email": row["email"], "status": row["status"]}
|
||||
raise HTTPException(status_code=401, detail="Not logged in")
|
||||
|
||||
@app.post("/api/logout")
|
||||
def logout(request: Request, response: Response):
|
||||
|
|
|
|||
Loading…
Reference in New Issue