Coverage for benefits/oauth/hooks.py: 100%
54 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-22 21:13 +0000
« prev ^ index » next coverage.py v7.8.0, created at 2025-04-22 21:13 +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 verified, 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 return verified(request)
58 @classmethod
59 @method_decorator(
60 [
61 decorator_from_middleware(AgencySessionRequired),
62 decorator_from_middleware(FlowSessionRequired),
63 ]
64 )
65 def claims_verified_not_eligible(cls, request, claims_request, claims_result):
66 super().claims_verified_not_eligible(request, claims_request, claims_result)
67 session.update(request, logged_in=True)
68 analytics.finished_sign_in(request, error=claims_result.errors)
70 flow = session.flow(request)
71 eligibility_analytics.started_eligibility(request, flow)
73 return redirect(routes.ELIGIBILITY_UNVERIFIED)
75 @classmethod
76 def system_error(cls, request, exception, operation):
77 super().system_error(request, exception, operation)
78 analytics.error(request, message=str(exception), operation=str(operation))
79 sentry_sdk.capture_exception(exception)
80 return redirect(routes.OAUTH_SYSTEM_ERROR)