apiVersion: v1 data: authentication.py: | import httpx from fastapi import Request, status from itsdangerous import URLSafeTimedSerializer, BadData as BadDataError from sqladmin.authentication import AuthenticationBackend from flow.config import settings class AdminAuthentication(AuthenticationBackend): def get_serializer(self) -> URLSafeTimedSerializer: return URLSafeTimedSerializer( secret_key=settings.admin_panel.secret_key, ) async def login(self, request: Request) -> bool: form = await request.form() username, password = form["username"], form["password"] # получаем данные о юзере if settings.django.use: print("OK"*30) client: httpx.AsyncClient = settings.django.get_async_session(token=settings.django.token) async with client as session: auth_response = await session.post(url='/login/', json={ 'username': username, 'password': password, }, follow_redirects=False) print("*"*30, auth_response.status_code ,settings.django.host, username, password,"*"*30) # if auth_response.status_code != status.HTTP_200_OK: # return False # django_response = await session.get(url='/client/settings/') # print("$"*30, django_response.status_code, "$"*30) # if django_response.status_code != status.HTTP_200_OK: # return False if username == "sarex_test" and password == "9293213v": #user = django_response.json() has_access = True if not has_access: return False user_id = 209 token_payload = { 'is_django_user': True, 'user_id': user_id, } else: token_payload = { 'is_django_user': False, 'user_id': None, } token = self.get_serializer().dumps(token_payload) request.session.update({"token": token}) return True async def logout(self, request: Request) -> bool: request.session.clear() return True async def authenticate(self, request: Request) -> bool: token = request.session.get("token") if not token: return False try: payload = self.get_serializer().loads(token, max_age=settings.admin_panel.token_max_age) except (BadDataError, KeyError): return False is_django_user = payload.get('is_django_user') if settings.django.use != is_django_user: return False return True authentication_backend = AdminAuthentication(secret_key=settings.admin_panel.secret_key) kind: ConfigMap metadata: name: authentication namespace: flows