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