mirror of
https://github.com/pretix/pretix.git
synced 2026-08-25 13:12:00 +00:00
46 lines
1.3 KiB
Python
46 lines
1.3 KiB
Python
import hmac
|
|
|
|
from django.conf import settings
|
|
from django.http import HttpResponse
|
|
|
|
from .. import metrics
|
|
|
|
|
|
def unauthed_response():
|
|
content = "<html><title>Forbidden</title><body>You are not authorized to view this page.</body></html>"
|
|
response = HttpResponse(content, content_type="text/html")
|
|
response["WWW-Authenticate"] = 'Basic realm="metrics"'
|
|
response.status_code = 401
|
|
return response
|
|
|
|
|
|
def serve_metrics(request):
|
|
if not settings.METRICS_ENABLED:
|
|
return unauthed_response()
|
|
|
|
# check if the user is properly authorized:
|
|
if "HTTP_AUTHORIZATION" not in request.META:
|
|
return unauthed_response()
|
|
|
|
method, credentials = request.META["HTTP_AUTHORIZATION"].split(" ", 1)
|
|
if method.lower() != "basic":
|
|
return unauthed_response()
|
|
|
|
user, passphrase = credentials.strip().decode("base64").split(":", 1)
|
|
|
|
if not hmac.compare_digest(user, settings.METRICS_USER):
|
|
return unauthed_response()
|
|
if not hmac.compare_digest(passphrase, settings.METRICS_PASSPHRASE):
|
|
return unauthed_response()
|
|
|
|
# ok, the request passed the authentication-barrier, let's hand out the metrics:
|
|
m = metrics.metric_values()
|
|
|
|
output = []
|
|
for metric, value in m:
|
|
output.append("{} {}".format(metric, str(value)))
|
|
|
|
content = "\n".join(output)
|
|
|
|
return HttpResponse(content)
|