"""Channels base classes""" from channels.generic.websocket import JsonWebsocketConsumer from structlog import get_logger from passbook.api.auth import token_from_header from passbook.core.models import User LOGGER = get_logger() class AuthJsonConsumer(JsonWebsocketConsumer): """Authorize a client with a token""" user: User def connect(self): headers = dict(self.scope["headers"]) if b"authorization" not in headers: LOGGER.warning("WS Request without authorization header") self.close() return False raw_header = headers[b"authorization"] token = token_from_header(raw_header) if not token: LOGGER.warning("Failed to authenticate") self.close() return False self.user = token.user return True