Skip to content

Commit 7148408

Browse files
author
Marat Akhmetov
committed
[DOP-29537] added setting for OAuth2GatewayProvider
1 parent 29e6e24 commit 7148408

File tree

2 files changed

+37
-3
lines changed

2 files changed

+37
-3
lines changed

syncmaster/server/providers/auth/oauth2_gateway_provider.py

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,43 @@
1-
# SPDX-FileCopyrightText: 2023-2024 MTS PJSC
1+
# SPDX-FileCopyrightText: 2023-2025 MTS PJSC
22
# SPDX-License-Identifier: Apache-2.0
33
import logging
4-
from typing import Any
4+
from typing import Annotated, Any
55

6-
from fastapi import Request
6+
from fastapi import Depends, FastAPI, Request
77

88
from syncmaster.db.models import User
99
from syncmaster.exceptions import EntityNotFoundError
1010
from syncmaster.exceptions.auth import AuthorizationError
11+
from syncmaster.server.dependencies import Stub
12+
from syncmaster.server.providers.auth.base_provider import AuthProvider
1113
from syncmaster.server.providers.auth.keycloak_provider import (
1214
KeycloakAuthProvider,
1315
KeycloakOperationError,
1416
)
17+
from syncmaster.server.services.unit_of_work import UnitOfWork
18+
from syncmaster.server.settings.auth.oauth2_gateway import OAuth2GatewayProviderSettings
1519

1620
log = logging.getLogger(__name__)
1721

1822

1923
class OAuth2GatewayProvider(KeycloakAuthProvider):
24+
def __init__(
25+
self,
26+
settings: Annotated[OAuth2GatewayProviderSettings, Depends(Stub(OAuth2GatewayProviderSettings))],
27+
unit_of_work: Annotated[UnitOfWork, Depends()],
28+
) -> None:
29+
super().__init__(settings, unit_of_work) # type: ignore[arg-type]
30+
31+
@classmethod
32+
def setup(cls, app: FastAPI) -> FastAPI:
33+
settings = OAuth2GatewayProviderSettings.model_validate(
34+
app.state.settings.auth.model_dump(exclude={"provider"}),
35+
)
36+
log.info("Using %s provider with settings:\n%s", cls.__name__, settings)
37+
app.dependency_overrides[AuthProvider] = cls
38+
app.dependency_overrides[OAuth2GatewayProviderSettings] = lambda: settings
39+
return app
40+
2041
async def get_current_user(self, access_token: str | None, request: Request) -> User: # noqa: WPS231, WPS217
2142

2243
if not access_token:
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# SPDX-FileCopyrightText: 2023-2025 MTS PJSC
2+
# SPDX-License-Identifier: Apache-2.0
3+
from pydantic import BaseModel, Field
4+
5+
from syncmaster.server.settings.auth.keycloak import KeycloakSettings
6+
7+
8+
class OAuth2GatewayProviderSettings(BaseModel):
9+
"""Settings related to Keycloak interaction."""
10+
11+
keycloak: KeycloakSettings = Field(
12+
description="Keycloak settings",
13+
)

0 commit comments

Comments
 (0)