60 lines
1.7 KiB
Python
60 lines
1.7 KiB
Python
import uuid
|
|
|
|
from django.shortcuts import render
|
|
|
|
from .branding import is_trial_expired, is_trial_mode_enabled
|
|
from .logging_utils import clear_request_id, set_request_id
|
|
from .roles import ROLE_PLATFORM_OWNER, get_user_role_key
|
|
|
|
|
|
class RequestIDMiddleware:
|
|
HEADER_NAME = 'X-Request-ID'
|
|
|
|
def __init__(self, get_response):
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
request_id = (
|
|
request.META.get('HTTP_X_REQUEST_ID')
|
|
or request.META.get('HTTP_X_CORRELATION_ID')
|
|
or uuid.uuid4().hex
|
|
)
|
|
request.request_id = request_id
|
|
set_request_id(request_id)
|
|
try:
|
|
response = self.get_response(request)
|
|
finally:
|
|
clear_request_id()
|
|
response[self.HEADER_NAME] = request_id
|
|
return response
|
|
|
|
|
|
class TrialModeMiddleware:
|
|
EXEMPT_PREFIXES = (
|
|
'/healthz/',
|
|
'/i18n/',
|
|
'/accounts/login/',
|
|
'/accounts/logout/',
|
|
'/accounts/password_reset/',
|
|
'/accounts/reset/',
|
|
'/static/',
|
|
'/media/',
|
|
)
|
|
|
|
def __init__(self, get_response):
|
|
self.get_response = get_response
|
|
|
|
def __call__(self, request):
|
|
if not is_trial_mode_enabled() or not is_trial_expired():
|
|
return self.get_response(request)
|
|
|
|
path = request.path or '/'
|
|
if any(path.startswith(prefix) for prefix in self.EXEMPT_PREFIXES):
|
|
return self.get_response(request)
|
|
|
|
user = getattr(request, 'user', None)
|
|
if getattr(user, 'is_authenticated', False) and get_user_role_key(user) == ROLE_PLATFORM_OWNER:
|
|
return self.get_response(request)
|
|
|
|
return render(request, 'workflows/trial_expired.html', status=403)
|