Coverage for benefits / oauth / hooks.py: 100%
56 statements
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-13 19:35 +0000
« prev ^ index » next coverage.py v7.13.4, created at 2026-02-13 19:35 +0000
1import sentry_sdk
2from cdt_identity.hooks import DefaultHooks
3from django.shortcuts import redirect
4from django.utils.decorators import decorator_from_middleware, method_decorator
6from benefits.core import session
7from benefits.core.middleware import AgencySessionRequired, FlowSessionRequired
8from benefits.eligibility.views import analytics as eligibility_analytics
9from benefits.routes import routes
11from . import analytics
14class OAuthHooks(DefaultHooks):
15 @classmethod
16 def pre_login(cls, request):
17 super().pre_login(request)
18 analytics.started_sign_in(request)
20 @classmethod
21 def cancel_login(cls, request):
22 super().cancel_login(request)
23 analytics.canceled_sign_in(request)
24 return redirect(routes.ELIGIBILITY_UNVERIFIED)
26 @classmethod
27 def pre_logout(cls, request):
28 super().pre_logout(request)
29 analytics.started_sign_out(request)
31 # the user is signed out of the app
32 session.logout(request)
34 @classmethod
35 def post_logout(cls, request):
36 super().post_logout(request)
37 analytics.finished_sign_out(request)
39 origin = session.origin(request)
40 return redirect(origin)
42 @classmethod
43 @method_decorator(
44 [
45 decorator_from_middleware(AgencySessionRequired),
46 decorator_from_middleware(FlowSessionRequired),
47 ]
48 )
49 def claims_verified_eligible(cls, request, claims_request, claims_result):
50 super().claims_verified_eligible(request, claims_request, claims_result)
51 session.update(request, logged_in=True)
52 analytics.finished_sign_in(request)
54 flow = session.flow(request)
55 eligibility_analytics.started_eligibility(request, flow)
57 session.update(request, eligible=True)
58 eligibility_analytics.returned_success(request, flow)
60 return redirect(routes.ENROLLMENT_INDEX)
62 @classmethod
63 @method_decorator(
64 [
65 decorator_from_middleware(AgencySessionRequired),
66 decorator_from_middleware(FlowSessionRequired),
67 ]
68 )
69 def claims_verified_not_eligible(cls, request, claims_request, claims_result):
70 super().claims_verified_not_eligible(request, claims_request, claims_result)
71 session.update(request, logged_in=True)
72 analytics.finished_sign_in(request, error=claims_result.errors)
74 flow = session.flow(request)
75 eligibility_analytics.started_eligibility(request, flow)
77 return redirect(routes.ELIGIBILITY_UNVERIFIED)
79 @classmethod
80 def system_error(cls, request, exception, operation):
81 super().system_error(request, exception, operation)
82 analytics.error(request, message=str(exception), operation=str(operation))
83 sentry_sdk.capture_exception(exception)
84 return redirect(routes.OAUTH_SYSTEM_ERROR)