Coverage for benefits/oauth/middleware.py: 100%
23 statements
« prev ^ index » next coverage.py v7.6.7, created at 2024-11-22 18:00 +0000
« prev ^ index » next coverage.py v7.6.7, created at 2024-11-22 18:00 +0000
1import logging
3from django.shortcuts import redirect
4import sentry_sdk
6from benefits.routes import routes
7from benefits.core import session
8from benefits.core.middleware import FlowSessionRequired, user_error
10from . import analytics
13logger = logging.getLogger(__name__)
16class FlowUsesClaimsVerificationSessionRequired(FlowSessionRequired):
17 """Middleware raises an exception for sessions lacking an enrollment flow that uses claims verification."""
19 def process_request(self, request):
20 result = super().process_request(request)
21 if result:
22 # from the base middleware class, the session didn't have an enrollment flow
23 return result
25 flow = session.flow(request)
27 if flow.uses_claims_verification:
28 # all good, the chosen flow is configured correctly
29 return None
30 elif not (flow.eligibility_api_url or flow.eligibility_form_class):
31 # the chosen flow doesn't have Eligibility API config OR claims provider config
32 # this is likely a misconfiguration on the backend, not a user error
33 message = f"Flow with no API or claims config: {flow.system_name} (id={flow.id})"
34 analytics.error(request, message=message, operation=request.path)
35 sentry_sdk.capture_exception(Exception(message))
36 return redirect(routes.OAUTH_SYSTEM_ERROR)
37 else:
38 # the chosen flow was for Eligibility API
39 logger.debug("Session not configured with enrollment flow that uses claims verification")
40 return user_error(request)