From a3cb73da3df0c3aa2d1be22b45cc0d4b3dae76b8 Mon Sep 17 00:00:00 2001 From: Mark Paronyan Date: Tue, 29 Sep 2026 21:48:33 +0300 Subject: [PATCH] fix(typing): resolve mypy errors in api.routes.controller.dependencies.authentication --- .../api/routes/controller/dependencies/authentication.py | 7 ++++--- gns3server/db/models/api_keys.py | 9 +++++++-- gns3server/schemas/controller/tokens.py | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/gns3server/api/routes/controller/dependencies/authentication.py b/gns3server/api/routes/controller/dependencies/authentication.py index 1043db717..1517e0572 100644 --- a/gns3server/api/routes/controller/dependencies/authentication.py +++ b/gns3server/api/routes/controller/dependencies/authentication.py @@ -55,7 +55,7 @@ async def get_user_from_token( user_repo: UsersRepository = Depends(get_repository(UsersRepository)), api_keys_repo: ApiKeysRepository = Depends(get_repository(ApiKeysRepository)), token: Optional[str] = Query(None, include_in_schema=False), -) -> schemas.User: +) -> models.User: if bearer_token: # bearer token is used first, then any token passed as a URL parameter @@ -169,7 +169,7 @@ async def get_current_active_user_from_websocket( websocket: WebSocket, token: str = Query(...), user_repo: UsersRepository = Depends(get_repository(UsersRepository)), -) -> Optional[schemas.User]: +) -> Optional[models.User]: # Extract requested subprotocols from headers for proper WebSocket negotiation # This is critical for protocols like xpra that require specific subprotocols @@ -238,4 +238,5 @@ async def get_current_active_user_from_websocket( websocket_error = {"action": "log.error", "event": {"message": err_msg}} await websocket.send_json(websocket_error) log.error(err_msg) - return await websocket.close(code=1008) + await websocket.close(code=1008) + return None diff --git a/gns3server/db/models/api_keys.py b/gns3server/db/models/api_keys.py index 5cc40eb0b..ec320f9dd 100644 --- a/gns3server/db/models/api_keys.py +++ b/gns3server/db/models/api_keys.py @@ -14,7 +14,10 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see . +import uuid + from sqlalchemy import Column, String, Boolean, DateTime, ForeignKey, func +from sqlalchemy.orm import Mapped, mapped_column from .base import BaseTable, GUID @@ -22,8 +25,10 @@ from .base import BaseTable, GUID class ApiKey(BaseTable): __tablename__ = "api_keys" - api_key_id = Column(GUID, primary_key=True) - user_id = Column(GUID, ForeignKey("users.user_id", ondelete="CASCADE"), nullable=False, index=True) + api_key_id: Mapped[uuid.UUID] = mapped_column(GUID, primary_key=True) + user_id: Mapped[uuid.UUID] = mapped_column( + GUID, ForeignKey("users.user_id", ondelete="CASCADE"), nullable=False, index=True + ) name = Column(String(128), nullable=False) key_hash = Column(String(128), nullable=False) key_prefix = Column(String(8), nullable=False) diff --git a/gns3server/schemas/controller/tokens.py b/gns3server/schemas/controller/tokens.py index 29197acfa..2ac14dda6 100644 --- a/gns3server/schemas/controller/tokens.py +++ b/gns3server/schemas/controller/tokens.py @@ -25,7 +25,7 @@ class Token(BaseModel): class TokenData(BaseModel): - username: Optional[str] = None + username: str token_version: int = 0 token_use: str = "access"