blob: de35c4c37922e437994cd80e4e0b9dfc7dba6ddf (
plain)
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
|
from time import time
from django.core.exceptions import MiddlewareNotUsed
from core import sentry
from core.models import Config
class AcceptMiddleware:
"""
Detects any Accept headers signifying a fellow AP server is trying to get JSON.
"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
accept = request.headers.get("accept", "text/html").lower()
request.ap_json = (
"application/json" in accept
or "application/ld" in accept
or "application/activity" in accept
)
response = self.get_response(request)
return response
class ConfigLoadingMiddleware:
"""
Caches the system config every request
"""
refresh_interval: float = 5.0
def __init__(self, get_response):
self.get_response = get_response
self.config_ts: float = 0.0
def __call__(self, request):
# Allow test fixtures to force and lock the config
if not getattr(Config, "__forced__", False):
if (
not getattr(Config, "system", None)
or (time() - self.config_ts) >= self.refresh_interval
):
Config.system = Config.load_system()
self.config_ts = time()
response = self.get_response(request)
return response
class SentryTaggingMiddleware:
"""
Sets Sentry tags at the start of the request if Sentry is configured.
"""
def __init__(self, get_response):
if not sentry.SENTRY_ENABLED:
raise MiddlewareNotUsed()
self.get_response = get_response
def __call__(self, request):
sentry.set_takahe_app("web")
response = self.get_response(request)
return response
|