from dataclasses import dataclass from sendgrid.helpers.eventwebhook import EventWebhook from app.exceptions import AuthException from app.models import Request @dataclass(kw_only=True) class Auth: sendgrid_validators: dict[str, EventWebhook] def validate(self, request: Request) -> None: self._validate_signature(request) def _validate_signature(self, request: Request) -> None: try: validator = self.sendgrid_validators[request.path] signature_correct = validator.verify_signature( payload=request.body, signature=request.headers.signature, timestamp=request.headers.timestamp, ) except Exception as exc: raise AuthException from exc if signature_correct is not True: raise AuthException