Paramjit Singh commited on
Commit
484ce06
·
unverified ·
2 Parent(s): 55c39bc0fc52a6

Merge pull request #198 from rishab11250/feature/hf-token-endpoint

Browse files
backend/app/routes/auth.py CHANGED
@@ -14,6 +14,7 @@ from app.database import get_db
14
  from app.models import User, ApiKey
15
  from app.schemas import (
16
  GoogleLoginRequest,
 
17
  RefreshRequest,
18
  TokenResponse,
19
  UpdatePassword,
@@ -279,6 +280,34 @@ def get_me(user: User = Depends(get_current_user)):
279
  """
280
  return UserResponse.model_validate(user)
281
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
282
  @router.put("/update")
283
  def update_user_info(payload:UserUpdate,
284
  user: User = Depends(get_current_user),
 
14
  from app.models import User, ApiKey
15
  from app.schemas import (
16
  GoogleLoginRequest,
17
+ HFTokenUpdate,
18
  RefreshRequest,
19
  TokenResponse,
20
  UpdatePassword,
 
280
  """
281
  return UserResponse.model_validate(user)
282
 
283
+ @router.put("/hf-token", response_model=UserResponse)
284
+ def update_hf_token(
285
+ payload: HFTokenUpdate,
286
+ user: User = Depends(get_current_user),
287
+ db: Session = Depends(get_db),
288
+ ):
289
+ """Update the HuggingFace token for the authenticated user.
290
+
291
+ Stores the provided HF token in the user's profile so it can be used
292
+ for HuggingFace API calls (e.g. InferenceClient) in place of the
293
+ globally configured ``HF_TOKEN`` environment variable.
294
+
295
+ Args:
296
+ payload: HFTokenUpdate object containing the new ``hf_token`` value.
297
+ user: The currently authenticated user, obtained from the
298
+ ``get_current_user`` dependency.
299
+ db: SQLAlchemy database session, obtained from the dependency.
300
+
301
+ Returns:
302
+ UserResponse: The updated user profile including the new ``hf_token``
303
+ field.
304
+ """
305
+ user.hf_token = payload.hf_token
306
+ db.commit()
307
+ db.refresh(user)
308
+ return UserResponse.model_validate(user)
309
+
310
+
311
  @router.put("/update")
312
  def update_user_info(payload:UserUpdate,
313
  user: User = Depends(get_current_user),
backend/tests/test_auth.py CHANGED
@@ -79,3 +79,39 @@ def test_refresh_token_success(client, refresh_token):
79
  assert payload["access_token"]
80
  assert payload["refresh_token"]
81
  assert payload["token_type"] == "bearer"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
79
  assert payload["access_token"]
80
  assert payload["refresh_token"]
81
  assert payload["token_type"] == "bearer"
82
+
83
+
84
+ def test_update_hf_token_success(client, auth_headers):
85
+ response = client.put(
86
+ "/api/v1/auth/hf-token",
87
+ json={"hf_token": "hf_new_token_value"},
88
+ headers=auth_headers,
89
+ )
90
+
91
+ assert response.status_code == 200
92
+ payload = response.json()
93
+ assert payload["hf_token"] == "hf_new_token_value"
94
+
95
+
96
+ def test_update_hf_token_requires_auth(client):
97
+ response = client.put(
98
+ "/api/v1/auth/hf-token",
99
+ json={"hf_token": "hf_unauth"},
100
+ )
101
+
102
+ assert response.status_code in (401, 403)
103
+
104
+
105
+ def test_hf_token_appears_in_user_response(client, auth_headers, user, db_session):
106
+ # First update the token
107
+ put_resp = client.put(
108
+ "/api/v1/auth/hf-token",
109
+ json={"hf_token": "hf_persist_token"},
110
+ headers=auth_headers,
111
+ )
112
+ assert put_resp.status_code == 200
113
+
114
+ # Then verify it shows up in GET /me
115
+ me_resp = client.get("/api/v1/auth/me", headers=auth_headers)
116
+ assert me_resp.status_code == 200
117
+ assert me_resp.json()["hf_token"] == "hf_persist_token"