-
Notifications
You must be signed in to change notification settings - Fork 1.9k
Expand file tree
/
Copy pathcontext_processors.py
More file actions
127 lines (106 loc) · 4.93 KB
/
context_processors.py
File metadata and controls
127 lines (106 loc) · 4.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import contextlib
import time
# import the settings file
from django.conf import settings
from django.contrib import messages
from dojo.announcement.os_message import get_os_banner
from dojo.labels import get_labels
from dojo.models import Alerts, System_Settings, UserAnnouncement
def globalize_vars(request):
# return the value you want as a dictionnary. you may add multiple values in there.
context = {
"SHOW_LOGIN_FORM": settings.SHOW_LOGIN_FORM,
"FORGOT_PASSWORD": settings.FORGOT_PASSWORD,
"FORGOT_USERNAME": settings.FORGOT_USERNAME,
"CLASSIC_AUTH_ENABLED": settings.CLASSIC_AUTH_ENABLED,
"OIDC_ENABLED": settings.OIDC_AUTH_ENABLED,
"SOCIAL_AUTH_OIDC_LOGIN_BUTTON_TEXT": settings.SOCIAL_AUTH_OIDC_LOGIN_BUTTON_TEXT,
"AUTH0_ENABLED": settings.AUTH0_OAUTH2_ENABLED,
"GOOGLE_ENABLED": settings.GOOGLE_OAUTH_ENABLED,
"OKTA_ENABLED": settings.OKTA_OAUTH_ENABLED,
"GITLAB_ENABLED": settings.GITLAB_OAUTH2_ENABLED,
"AZUREAD_TENANT_OAUTH2_ENABLED": settings.AZUREAD_TENANT_OAUTH2_ENABLED,
"AZUREAD_TENANT_OAUTH2_GET_GROUPS": settings.AZUREAD_TENANT_OAUTH2_GET_GROUPS,
"AZUREAD_TENANT_OAUTH2_GROUPS_FILTER": settings.AZUREAD_TENANT_OAUTH2_GROUPS_FILTER,
"AZUREAD_TENANT_OAUTH2_CLEANUP_GROUPS": settings.AZUREAD_TENANT_OAUTH2_CLEANUP_GROUPS,
"KEYCLOAK_ENABLED": settings.KEYCLOAK_OAUTH2_ENABLED,
"SOCIAL_AUTH_KEYCLOAK_LOGIN_BUTTON_TEXT": settings.SOCIAL_AUTH_KEYCLOAK_LOGIN_BUTTON_TEXT,
"GITHUB_ENTERPRISE_ENABLED": settings.GITHUB_ENTERPRISE_OAUTH2_ENABLED,
"SAML2_ENABLED": settings.SAML2_ENABLED,
"SAML2_LOGIN_BUTTON_TEXT": settings.SAML2_LOGIN_BUTTON_TEXT,
"SAML2_LOGOUT_URL": settings.SAML2_LOGOUT_URL,
"DOCUMENTATION_URL": settings.DOCUMENTATION_URL,
"API_TOKENS_ENABLED": settings.API_TOKENS_ENABLED,
"API_TOKEN_AUTH_ENDPOINT_ENABLED": settings.API_TOKEN_AUTH_ENDPOINT_ENABLED,
"SHOW_PLG_LINK": True,
# V3 Feature Flags
"V3_FEATURE_LOCATIONS": settings.V3_FEATURE_LOCATIONS,
}
additional_banners = []
if (os_banner := get_os_banner()) is not None:
additional_banners.append({
"source": "os",
"message": os_banner["message"],
"style": "info",
"url": "",
"link_text": "",
"expanded_html": os_banner["expanded_html"],
})
if hasattr(request, "session"):
for banner in request.session.pop("_product_banners", []):
additional_banners.append(banner)
if additional_banners:
context["additional_banners"] = additional_banners
return context
def bind_system_settings(request):
"""Load system settings and display warning if there's a database error."""
try:
system_settings = System_Settings.objects.get()
# Check if there was an error stored on the request (from middleware)
if hasattr(request, "system_settings_error"):
error_msg = request.system_settings_error
messages.add_message(
request,
messages.WARNING,
f"Warning: Unable to load system settings from database: {error_msg}. "
"Default values are being used. Please check your database configuration and run migrations if needed.",
extra_tags="alert-warning",
)
# Clear after adding message
delattr(request, "system_settings_error")
except Exception:
# If we can't get settings, return empty dict (will cause errors elsewhere, but that's expected)
return {}
return {"system_settings": system_settings}
def bind_alert_count(request):
if not settings.DISABLE_ALERT_COUNTER:
if hasattr(request, "user") and request.user.is_authenticated:
return {"alert_count": Alerts.objects.filter(user_id=request.user).count()}
return {}
def bind_announcement(request):
with contextlib.suppress(Exception): # TODO: this should be replaced with more meaningful exception
if request.user.is_authenticated:
user_announcement = UserAnnouncement.objects.select_related(
"announcement",
).get(user=request.user)
return {"announcement": user_announcement.announcement}
return {}
def session_expiry_notification(request):
try:
if request.user.is_authenticated:
last_activity = request.session.get("_last_activity", time.time())
expiry_time = last_activity + settings.SESSION_COOKIE_AGE # When the session will expire
warning_time = settings.SESSION_EXPIRE_WARNING # Show warning X seconds before expiry
notify_time = expiry_time - warning_time
else:
notify_time = None
except Exception:
return {}
else:
return {
"session_notify_time": notify_time,
}
def labels(request):
return {
"labels": get_labels(),
}