Skip to content

Commit 894e86f

Browse files
committed
update according to recommendation
1 parent bf5b515 commit 894e86f

File tree

2 files changed

+10
-55
lines changed

2 files changed

+10
-55
lines changed

dojo/middleware.py

Lines changed: 8 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
from django.shortcuts import redirect
1717
from django.urls import reverse
1818
from django.utils.functional import SimpleLazyObject
19+
from social_core.exceptions import AuthCanceled, AuthFailed
20+
from social_django.middleware import SocialAuthExceptionMiddleware
1921
from watson.middleware import SearchContextMiddleware
2022
from watson.search import search_context_manager
2123

@@ -78,58 +80,12 @@ def __call__(self, request):
7880
return self.get_response(request)
7981

8082

81-
class AuthProviderHealthCheckMiddleware:
82-
def __init__(self, get_response):
83-
self.get_response = get_response
84-
self.providers = {
85-
"/login/oidc/": {
86-
"name": "OIDC",
87-
"endpoint": getattr(settings, "SOCIAL_AUTH_OIDC_OIDC_ENDPOINT", None),
88-
},
89-
"/login/google-oauth2/": {
90-
"name": "Google",
91-
"endpoint": "https://accounts.google.com/.well-known/openid-configuration",
92-
},
93-
"/login/okta-oauth2/": {
94-
"name": "Okta",
95-
"endpoint": getattr(settings, "SOCIAL_AUTH_OKTA_OAUTH2_API_URL", None),
96-
},
97-
"/login/azuread-tenant-oauth2/": {
98-
"name": "Azure AD",
99-
"endpoint": f"https://login.microsoftonline.com/{getattr(settings, 'SOCIAL_AUTH_AZUREAD_TENANT_OAUTH2_TENANT_ID', '')}/v2.0/.well-known/openid-configuration",
100-
},
101-
"/login/keycloak-oauth2/": {
102-
"name": "Keycloak",
103-
"endpoint": getattr(settings, "SOCIAL_AUTH_KEYCLOAK_OAUTH2_API_URL", None),
104-
},
105-
"/login/auth0/": {
106-
"name": "Auth0",
107-
"endpoint": getattr(settings, "SOCIAL_AUTH_AUTH0_DOMAIN", None),
108-
},
109-
"/login/gitlab/": {
110-
"name": "GitLab",
111-
"endpoint": getattr(settings, "SOCIAL_AUTH_GITLAB_API_URL", None),
112-
},
113-
"/login/github/": {
114-
"name": "GitHub Enterprise",
115-
"endpoint": getattr(settings, "SOCIAL_AUTH_GITHUB_ENTERPRISE_URL", None),
116-
},
117-
}
118-
119-
def __call__(self, request):
120-
for path, config in self.providers.items():
121-
if request.path.startswith(path) and config["endpoint"]:
122-
try:
123-
response = requests.get(config["endpoint"], timeout=3, allow_redirects=False)
124-
if response.status_code >= 500:
125-
raise requests.exceptions.RequestException(config["name"] + " returned " + str(response.status_code))
126-
except requests.exceptions.RequestException:
127-
messages.error(
128-
request,
129-
f"Login via {config['name']} is temporarily unavailable. Please use the standard login below. ",
130-
)
131-
return redirect("/login")
132-
return self.get_response(request)
83+
class CustomSocialAuthExceptionMiddleware(SocialAuthExceptionMiddleware):
84+
def process_exception(self, request, exception):
85+
if isinstance(exception, (requests.exceptions.RequestException, AuthCanceled, AuthFailed)):
86+
messages.error(request, "Login via social authentication is temporarily unavailable. Please use the standard login below.")
87+
return redirect("/login")
88+
return super().process_exception(request, exception)
13389

13490

13591
class DojoSytemSettingsMiddleware:

dojo/settings/settings.dist.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -929,15 +929,14 @@ def generate_url(scheme, double_slashes, user, password, host, port, path, param
929929
"dojo.middleware.APITrailingSlashMiddleware",
930930
"dojo.middleware.DojoSytemSettingsMiddleware",
931931
"django.contrib.sessions.middleware.SessionMiddleware",
932-
"django.contrib.messages.middleware.MessageMiddleware",
933-
"dojo.middleware.AuthProviderHealthCheckMiddleware",
934932
"django.middleware.csrf.CsrfViewMiddleware",
935933
"django.middleware.security.SecurityMiddleware",
936934
"django.contrib.auth.middleware.AuthenticationMiddleware",
935+
"django.contrib.messages.middleware.MessageMiddleware",
937936
"django.middleware.clickjacking.XFrameOptionsMiddleware",
938937
"dojo.middleware.LoginRequiredMiddleware",
939938
"dojo.middleware.AdditionalHeaderMiddleware",
940-
"social_django.middleware.SocialAuthExceptionMiddleware",
939+
"dojo.middleware.CustomSocialAuthExceptionMiddleware",
941940
"crum.CurrentRequestUserMiddleware",
942941
"dojo.middleware.AuditlogMiddleware",
943942
"dojo.middleware.AsyncSearchContextMiddleware",

0 commit comments

Comments
 (0)