Skip to content

decorators

django_spire.auth.sms.decorators

log = logging.getLogger(__name__) module-attribute

twilio_auth_required

Source code in django_spire/auth/sms/decorators.py
def twilio_auth_required(func: Callable[..., HttpResponse]) -> Callable[..., HttpResponse]:
    @functools.wraps(func)
    def decorated_function(request: WSGIRequest, *args, **kwargs) -> HttpResponse:
        auth_token = settings.TWILIO_AUTH_TOKEN or os.environ.get('TWILIO_AUTH_TOKEN')

        if not auth_token:
            log.error('TWILIO_AUTH_TOKEN is not configured; rejecting webhook request')
            return HttpResponseForbidden()

        request_validator = RequestValidator(auth_token)

        absolute_uri = request.build_absolute_uri().replace('http:', 'https:', 1)

        request_valid = request_validator.validate(
            absolute_uri,
            request.POST,
            request.META.get('HTTP_X_TWILIO_SIGNATURE', ''),
        )

        if request_valid:
            return func(request, *args, **kwargs)

        return HttpResponseForbidden()

    return decorated_function