118 lines
3.3 KiB
Python
118 lines
3.3 KiB
Python
import logging
|
|
|
|
from django.conf import settings
|
|
from django.contrib import messages
|
|
from django.core.mail import EmailMessage
|
|
from django.db import connection
|
|
from django.http import HttpResponse, JsonResponse
|
|
from django.shortcuts import redirect, render
|
|
from django.urls import reverse
|
|
|
|
from .forms import ContactForm
|
|
from accounts.leaderboard import build_leaderboard
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def home(request):
|
|
rows, current_row, _ = build_leaderboard(
|
|
period="week",
|
|
current_user=request.user if request.user.is_authenticated else None,
|
|
)
|
|
preview_user = current_row or {
|
|
"rank": 24,
|
|
"name": "Akhmed",
|
|
"band": 7.5,
|
|
"trend": "up",
|
|
"initial": "A",
|
|
"is_current": True,
|
|
"demo": True,
|
|
}
|
|
return render(
|
|
request,
|
|
"home.html",
|
|
{"leaderboard_preview": rows[:5], "leaderboard_preview_user": preview_user},
|
|
)
|
|
|
|
|
|
def faq(request):
|
|
return render(request, "faq.html")
|
|
|
|
|
|
def privacy(request):
|
|
return render(request, "privacy.html")
|
|
|
|
|
|
def terms(request):
|
|
return render(request, "terms.html")
|
|
|
|
|
|
def contact(request):
|
|
form = ContactForm(request.POST or None)
|
|
if request.method == "POST" and form.is_valid():
|
|
body = (
|
|
f"Name: {form.cleaned_data['name']}\n"
|
|
f"Email: {form.cleaned_data['email']}\n\n"
|
|
f"{form.cleaned_data['message']}"
|
|
)
|
|
email = EmailMessage(
|
|
subject=f"Testpoint support: {form.cleaned_data['subject']}",
|
|
body=body,
|
|
from_email=settings.DEFAULT_FROM_EMAIL,
|
|
to=[settings.SUPPORT_EMAIL],
|
|
reply_to=[form.cleaned_data["email"]],
|
|
)
|
|
try:
|
|
email.send(fail_silently=False)
|
|
except Exception:
|
|
logger.exception("Support contact email could not be sent")
|
|
messages.error(
|
|
request,
|
|
"We could not send your message. Please try again shortly.",
|
|
)
|
|
else:
|
|
messages.success(
|
|
request,
|
|
"Your message has been sent. We'll reply as soon as possible.",
|
|
)
|
|
return redirect("contact")
|
|
return render(
|
|
request,
|
|
"contact.html",
|
|
{"form": form, "support_email": settings.SUPPORT_EMAIL},
|
|
)
|
|
|
|
|
|
def health(request):
|
|
"""Lightweight process and database readiness check for the host."""
|
|
try:
|
|
connection.ensure_connection()
|
|
except Exception:
|
|
return JsonResponse(
|
|
{"status": "unhealthy", "database": "unavailable"}, status=503
|
|
)
|
|
return JsonResponse({"status": "ok", "database": "ok"})
|
|
|
|
|
|
def robots(request):
|
|
sitemap_url = request.build_absolute_uri(reverse("sitemap"))
|
|
body = f"User-agent: *\nAllow: /\nDisallow: /admin/\nSitemap: {sitemap_url}\n"
|
|
return HttpResponse(body, content_type="text/plain")
|
|
|
|
|
|
def sitemap(request):
|
|
urls = [
|
|
request.build_absolute_uri(reverse("home")),
|
|
request.build_absolute_uri(reverse("faq")),
|
|
request.build_absolute_uri(reverse("privacy")),
|
|
request.build_absolute_uri(reverse("terms")),
|
|
request.build_absolute_uri(reverse("contact")),
|
|
]
|
|
return render(
|
|
request,
|
|
"sitemap.xml",
|
|
{"urls": urls},
|
|
content_type="application/xml",
|
|
)
|