import base64 import binascii import hypercorn.logging from starlette.authentication import AuthenticationBackend, AuthenticationError, AuthCredentials, SimpleUser from pillar_tool.db.queries.auth_queries import verify_user class BasicAuthBackend(AuthenticationBackend): async def authenticate(self, conn): print("test 2") if "Authorization" not in conn.headers: raise AuthenticationError('No Authorization Header') auth = conn.headers["Authorization"] try: scheme, creds = auth.split() if scheme.lower() != "basic": raise AuthenticationError('Invalid Auth Scheme') decoded = base64.b64decode(creds).decode("utf-8") except (ValueError, UnicodeDecodeError, binascii.Error): raise AuthenticationError('Invalid basic auth credentials') username, _, password = decoded.partition(":") user = verify_user(conn.state.db, username, password) if user is None: raise AuthenticationError('Invalid basic auth credentials') conn.state.user = user