Skip to content

Commit d5fc4bc

Browse files
committed
tokens update
1 parent aa98fb3 commit d5fc4bc

File tree

5 files changed

+35
-23
lines changed

5 files changed

+35
-23
lines changed

api/specs/web-server/_users.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
MyProfileGet,
1313
MyProfilePatch,
1414
MyTokenCreate,
15+
MyTokenGet,
1516
UserGet,
1617
UsersSearchQueryParams,
17-
UserThirdPartyToken,
1818
)
1919
from models_library.api_schemas_webserver.users_preferences import PatchRequestBody
2020
from models_library.generics import Envelope
@@ -73,15 +73,15 @@ async def set_frontend_preference(
7373

7474
@router.get(
7575
"/me/tokens",
76-
response_model=Envelope[list[UserThirdPartyToken]],
76+
response_model=Envelope[list[MyTokenGet]],
7777
)
7878
async def list_tokens():
7979
...
8080

8181

8282
@router.post(
8383
"/me/tokens",
84-
response_model=Envelope[UserThirdPartyToken],
84+
response_model=Envelope[MyTokenGet],
8585
status_code=status.HTTP_201_CREATED,
8686
)
8787
async def create_token(_token: MyTokenCreate):
@@ -90,7 +90,7 @@ async def create_token(_token: MyTokenCreate):
9090

9191
@router.get(
9292
"/me/tokens/{service}",
93-
response_model=Envelope[UserThirdPartyToken],
93+
response_model=Envelope[MyTokenGet],
9494
)
9595
async def get_token(_params: Annotated[_TokenPathParams, Depends()]):
9696
...

packages/models-library/src/models_library/api_schemas_webserver/users.py

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ class MyTokenCreate(InputSchemaWithoutCamelCase):
213213
str,
214214
Field(description="uniquely identifies the service where this token is used"),
215215
]
216-
token_key: Annotated[UUID, Field(..., description="basic token key")]
217-
token_secret: UUID | None = None
216+
token_key: UUID
217+
token_secret: UUID
218218

219219
def to_model(self) -> UserThirdPartyToken:
220220
return UserThirdPartyToken(
@@ -224,6 +224,18 @@ def to_model(self) -> UserThirdPartyToken:
224224
)
225225

226226

227+
class MyTokenGet(OutputSchema):
228+
service: str
229+
token_key: UUID
230+
token_secret: Annotated[
231+
UUID | None, Field(deprecated=True, description="Will be removed")
232+
] = None
233+
234+
@classmethod
235+
def from_model(cls, token: UserThirdPartyToken) -> Self:
236+
return cls(service=token.service, token_key=token.token_key, token_secret=None)
237+
238+
227239
#
228240
# PERMISSIONS
229241
#

services/web/server/src/simcore_service_webserver/users/_notifications_handlers.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,5 @@ async def list_user_permissions(request: web.Request) -> web.Response:
129129
request.app, user_id=req_ctx.user_id, product_name=req_ctx.product_name
130130
)
131131
return envelope_json_response(
132-
[
133-
MyPermissionGet.model_construct(
134-
_fields_set=p.model_fields_set, **p.model_dump()
135-
)
136-
for p in list_permissions
137-
]
132+
[MyPermissionGet.from_model(p) for p in list_permissions]
138133
)

services/web/server/src/simcore_service_webserver/users/_tokens.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@
44
"""
55
import sqlalchemy as sa
66
from aiohttp import web
7-
from models_library.api_schemas_webserver.users import (
8-
MyTokenCreate,
9-
UserThirdPartyToken,
10-
)
11-
from models_library.users import UserID
7+
from models_library.api_schemas_webserver.users import UserThirdPartyToken
8+
from models_library.users import UserID, UserThirdPartyToken
129
from models_library.utils.fastapi_encoders import jsonable_encoder
1310
from sqlalchemy import and_, literal_column
1411

@@ -18,7 +15,7 @@
1815

1916

2017
async def create_token(
21-
app: web.Application, user_id: UserID, token: MyTokenCreate
18+
app: web.Application, user_id: UserID, token: UserThirdPartyToken
2219
) -> UserThirdPartyToken:
2320
async with get_database_engine(app).acquire() as conn:
2421
await conn.execute(

services/web/server/src/simcore_service_webserver/users/_tokens_handlers.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import logging
33

44
from aiohttp import web
5-
from models_library.api_schemas_webserver.users import MyTokenCreate
5+
from models_library.api_schemas_webserver.users import MyTokenCreate, MyTokenGet
66
from pydantic import BaseModel
77
from servicelib.aiohttp import status
88
from servicelib.aiohttp.requests_validation import (
@@ -46,7 +46,7 @@ async def _wrapper(request: web.Request) -> web.StreamResponse:
4646
async def list_tokens(request: web.Request) -> web.Response:
4747
req_ctx = UsersRequestContext.model_validate(request)
4848
all_tokens = await _tokens.list_tokens(request.app, req_ctx.user_id)
49-
return envelope_json_response(all_tokens)
49+
return envelope_json_response([MyTokenGet.from_model(t) for t in all_tokens])
5050

5151

5252
@routes.post(f"/{API_VTAG}/me/tokens", name="create_token")
@@ -56,8 +56,12 @@ async def list_tokens(request: web.Request) -> web.Response:
5656
async def create_token(request: web.Request) -> web.Response:
5757
req_ctx = UsersRequestContext.model_validate(request)
5858
token_create = await parse_request_body_as(MyTokenCreate, request)
59-
await _tokens.create_token(request.app, req_ctx.user_id, token_create)
60-
return envelope_json_response(token_create, web.HTTPCreated)
59+
60+
token = await _tokens.create_token(
61+
request.app, req_ctx.user_id, token_create.to_model()
62+
)
63+
64+
return envelope_json_response(MyTokenGet.from_model(token), web.HTTPCreated)
6165

6266

6367
class _TokenPathParams(BaseModel):
@@ -71,10 +75,12 @@ class _TokenPathParams(BaseModel):
7175
async def get_token(request: web.Request) -> web.Response:
7276
req_ctx = UsersRequestContext.model_validate(request)
7377
req_path_params = parse_request_path_parameters_as(_TokenPathParams, request)
78+
7479
token = await _tokens.get_token(
7580
request.app, req_ctx.user_id, req_path_params.service
7681
)
77-
return envelope_json_response(token)
82+
83+
return envelope_json_response(MyTokenGet.from_model(token))
7884

7985

8086
@routes.delete(f"/{API_VTAG}/me/tokens/{{service}}", name="delete_token")
@@ -84,5 +90,7 @@ async def get_token(request: web.Request) -> web.Response:
8490
async def delete_token(request: web.Request) -> web.Response:
8591
req_ctx = UsersRequestContext.model_validate(request)
8692
req_path_params = parse_request_path_parameters_as(_TokenPathParams, request)
93+
8794
await _tokens.delete_token(request.app, req_ctx.user_id, req_path_params.service)
95+
8896
return web.json_response(status=status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)