Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix
Browse files Browse the repository at this point in the history
Zimovchik committed Sep 30, 2024
1 parent 88c296d commit e3cdbae
Showing 16 changed files with 28 additions and 33 deletions.
2 changes: 0 additions & 2 deletions auth_backend/auth_method/base.py
Original file line number Diff line number Diff line change
@@ -8,7 +8,6 @@

from fastapi import APIRouter
from sqlalchemy.orm import Session as DbSession

from auth_backend.models.db import AuthMethod, User, UserSession
from auth_backend.settings import get_settings

@@ -24,7 +23,6 @@ class AuthPluginMeta(metaclass=ABCMeta):
router: APIRouter
prefix: str
tags: list[str] = []
loginable: bool

@classmethod
def get_name(cls) -> str:
6 changes: 5 additions & 1 deletion auth_backend/auth_method/oauth.py
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@
from fastapi_sqlalchemy import db
from sqlalchemy.orm import Session as DbSession

from auth_backend.auth_method import AUTH_METHODS
from auth_backend.auth_method import AUTH_METHODS, LoginableMixin
from auth_backend.base import Base
from auth_backend.exceptions import LastAuthMethodDelete
from auth_backend.models.db import AuthMethod, User, UserSession
@@ -31,6 +31,10 @@ def __init__(self):
self.router.add_api_route("/auth_url", self._auth_url, methods=["GET"], response_model=self.UrlSchema)
self.router.add_api_route("", self._unregister, methods=["DELETE"])

def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
cls.loginable = issubclass(cls, LoginableMixin)

@staticmethod
@abstractmethod
async def _redirect_url(*args, **kwargs) -> UrlSchema:
5 changes: 5 additions & 0 deletions auth_backend/auth_method/outer.py
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@
from starlette.status import HTTP_403_FORBIDDEN, HTTP_404_NOT_FOUND, HTTP_409_CONFLICT, HTTP_424_FAILED_DEPENDENCY

from auth_backend.auth_method.base import AuthPluginMeta
from auth_backend.auth_method import LoginableMixin
from auth_backend.base import Base
from auth_backend.models.db import AuthMethod, UserSession
from auth_backend.utils.security import UnionAuth
@@ -77,6 +78,10 @@ def __init__(self):
self.router.add_api_route("/{user_id}/link", self._link, methods=["POST"])
self.router.add_api_route("/{user_id}/link", self._unlink, methods=["DELETE"])

def __init_subclass__(cls, **kwargs):
super().__init_subclass__(**kwargs)
cls.loginable = issubclass(cls, LoginableMixin)

@classmethod
def get_scope(cls):
"""Права, необходимые пользователю для получения данных о внешнем аккаунте"""
1 change: 0 additions & 1 deletion auth_backend/auth_plugins/airflow.py
Original file line number Diff line number Diff line change
@@ -19,7 +19,6 @@ class AirflowOuterAuthSettings(Settings):
class AirflowOuterAuth(OuterAuthMeta):
prefix = '/airflow'
settings = AirflowOuterAuthSettings()
loginable = False

@classmethod
async def _is_outer_user_exists(cls, username: str) -> bool:
1 change: 0 additions & 1 deletion auth_backend/auth_plugins/coder.py
Original file line number Diff line number Diff line change
@@ -18,7 +18,6 @@ class CoderOuterAuthSettings(Settings):
class CoderOuterAuth(OuterAuthMeta):
prefix = '/coder'
settings = CoderOuterAuthSettings()
loginable = False

@classmethod
async def _is_outer_user_exists(cls, username: str) -> bool:
5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/github.py
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
from fastapi_sqlalchemy import db
from pydantic import BaseModel, Field

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -28,11 +28,10 @@ class GithubSettings(Settings):
GITHUB_CLIENT_SECRET: str | None = None


class GithubAuth(OauthMeta):
class GithubAuth(OauthMeta, LoginableMixin):
"""Вход в приложение по аккаунту GitHub"""

prefix = '/github'
loginable = True
tags = ['github']
settings = GithubSettings()

5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/google.py
Original file line number Diff line number Diff line change
@@ -12,7 +12,7 @@
from google.oauth2.id_token import verify_oauth2_token
from pydantic import BaseModel, Field, Json

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed, OauthCredentialsIncorrect
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -36,11 +36,10 @@ class GoogleSettings(Settings):
GOOGLE_BLACKLIST_DOMAINS: list[str] | None = ['physics.msu.ru']


class GoogleAuth(OauthMeta):
class GoogleAuth(OauthMeta, LoginableMixin):
"""Вход в приложение по аккаунту гугл"""

prefix = '/google'
loginable = True
tags = ['Google']
settings = GoogleSettings()

5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/keycloak.py
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
from fastapi_sqlalchemy import db
from pydantic import BaseModel, Field

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -29,11 +29,10 @@ class KeycloakSettings(Settings):
KEYCLOAK_CLIENT_SECRET: str | None = None


class KeycloakAuth(OauthMeta):
class KeycloakAuth(OauthMeta, LoginableMixin):
"""Вход в приложение по аккаунту Keycloak"""

prefix = '/keycloak'
loginable = True
tags = ['keycloak']
settings = KeycloakSettings()

5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/lkmsu.py
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
from pydantic import BaseModel, Field
from starlette.background import BackgroundTasks

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -30,11 +30,10 @@ class LkmsuSettings(Settings):
LKMSU_FACULTY_NAME: str = 'Физический факультет'


class LkmsuAuth(OauthMeta):
class LkmsuAuth(OauthMeta, LoginableMixin):
"""Вход в приложение по аккаунту гугл"""

prefix = '/lk-msu'
loginable = True
tags = ['lk_msu']
settings = LkmsuSettings()

1 change: 0 additions & 1 deletion auth_backend/auth_plugins/mailu.py
Original file line number Diff line number Diff line change
@@ -18,7 +18,6 @@ class MailuOuterAuthSettings(Settings):
class MailuOuterAuth(OuterAuthMeta):
prefix = '/mailu'
settings = MailuOuterAuthSettings()
loginable = False

@classmethod
async def _is_outer_user_exists(cls, username: str) -> bool:
5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/mymsu.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from pydantic import Field

Check failure on line 1 in auth_backend/auth_plugins/mymsu.py

GitHub Actions / linting

Imports are incorrectly sorted and/or formatted.

from auth_backend.settings import Settings

from auth_backend.auth_method import LoginableMixin
from .yandex import YandexAuth


@@ -16,9 +16,8 @@ class MyMsuSettings(Settings):
YANDEX_BLACKLIST_DOMAINS: list[str] | None = None


class MyMsuAuth(YandexAuth):
class MyMsuAuth(YandexAuth, LoginableMixin):
"""Вход в приложение по почте @my.msu.ru"""

prefix = '/my-msu'
loginable = True
settings = MyMsuSettings()
4 changes: 2 additions & 2 deletions auth_backend/auth_plugins/physics.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from pydantic import Field, Json

Check failure on line 1 in auth_backend/auth_plugins/physics.py

GitHub Actions / linting

Imports are incorrectly sorted and/or formatted.

from auth_backend.settings import Settings
from auth_backend.auth_method import LoginableMixin

from .google import GoogleAuth

@@ -23,9 +24,8 @@ class PhysicsSettings(Settings):
GOOGLE_BLACKLIST_DOMAINS: list[str] | None = None


class PhysicsAuth(GoogleAuth):
class PhysicsAuth(GoogleAuth, LoginableMixin):
"""Вход в приложение по почте @physics.msu.ru"""

prefix = '/physics-msu'
loginable = True
settings = PhysicsSettings()
1 change: 0 additions & 1 deletion auth_backend/auth_plugins/postgres.py
Original file line number Diff line number Diff line change
@@ -21,7 +21,6 @@ class PostgresOuterAuthSettings(Settings):
class PostgresOuterAuth(OuterAuthMeta):
prefix = '/postgres'
settings = PostgresOuterAuthSettings()
loginable = False
__sessionmaker: type[Session] | None = None

@classmethod
5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/telegram.py
Original file line number Diff line number Diff line change
@@ -11,7 +11,7 @@
from fastapi_sqlalchemy import db
from pydantic import BaseModel, Field

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -29,9 +29,8 @@ class TelegramSettings(Settings):
TELEGRAM_BOT_TOKEN: str | None = None


class TelegramAuth(OauthMeta):
class TelegramAuth(OauthMeta, LoginableMixin):
prefix = '/telegram'
loginable = True
tags = ['Telegram']
settings = TelegramSettings()

5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/vk.py
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
from fastapi_sqlalchemy import db
from pydantic import BaseModel, Field

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -44,9 +44,8 @@ class VkSettings(Settings):
] # Другие данные https://dev.vk.com/ru/reference/objects/user


class VkAuth(OauthMeta):
class VkAuth(OauthMeta, LoginableMixin):
prefix = '/vk'
loginable = True
tags = ['vk']
settings = VkSettings()

5 changes: 2 additions & 3 deletions auth_backend/auth_plugins/yandex.py
Original file line number Diff line number Diff line change
@@ -10,7 +10,7 @@
from fastapi_sqlalchemy import db
from pydantic import BaseModel, Field

from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session
from auth_backend.auth_method import AuthPluginMeta, OauthMeta, Session, LoginableMixin
from auth_backend.exceptions import AlreadyExists, OauthAuthFailed
from auth_backend.kafka.kafka import get_kafka_producer
from auth_backend.models.db import User, UserSession
@@ -31,9 +31,8 @@ class YandexSettings(Settings):
YANDEX_BLACKLIST_DOMAINS: list[str] | None = ['my.msu.ru']


class YandexAuth(OauthMeta):
class YandexAuth(OauthMeta, LoginableMixin):
prefix = '/yandex'
loginable = True
tags = ['Yandex']
settings = YandexSettings()

0 comments on commit e3cdbae

Please sign in to comment.