2022-07-04 00:35:01 +02:00
|
|
|
import json
|
|
|
|
|
|
|
|
from django.http import HttpResponse, HttpRequest, HttpResponseBadRequest, JsonResponse
|
2021-09-11 19:09:22 +02:00
|
|
|
from django.shortcuts import render
|
2022-04-11 22:43:06 +02:00
|
|
|
from django.views.decorators.http import condition
|
2021-09-14 17:32:51 +02:00
|
|
|
from django.views.generic import TemplateView
|
2021-09-24 18:36:51 +02:00
|
|
|
from ipware import get_client_ip
|
2021-09-11 19:09:22 +02:00
|
|
|
from sentry_sdk import last_event_id
|
2021-08-22 20:10:29 +02:00
|
|
|
|
2024-08-07 23:37:26 +02:00
|
|
|
from characters.models import Character
|
2022-07-04 00:35:01 +02:00
|
|
|
from common.models import Draft
|
2024-08-07 23:37:26 +02:00
|
|
|
from factions.models import Faction
|
|
|
|
from locations.models import Location
|
|
|
|
from loot.models import Loot
|
|
|
|
from notes.models import Note
|
2021-09-11 19:09:22 +02:00
|
|
|
from rpg_notes.secrets import SENTRY_DSN
|
2022-04-11 22:43:06 +02:00
|
|
|
from utils.assets import get_css, get_file_hash
|
2021-08-22 20:10:29 +02:00
|
|
|
|
2021-09-11 19:09:22 +02:00
|
|
|
|
2021-09-14 17:32:51 +02:00
|
|
|
class PublicHomepageView(TemplateView):
|
2021-10-15 20:10:50 +02:00
|
|
|
template_name = "common/homepage.jinja"
|
2021-09-14 17:32:51 +02:00
|
|
|
|
|
|
|
|
2021-09-25 20:31:08 +02:00
|
|
|
class LanguageSelectView(TemplateView):
|
2021-10-15 21:47:49 +02:00
|
|
|
template_name = "common/languageselect.jinja"
|
2021-09-25 20:31:08 +02:00
|
|
|
|
|
|
|
|
2022-07-04 00:35:01 +02:00
|
|
|
def print_ip(request: HttpRequest) -> HttpResponse:
|
2021-09-24 18:36:51 +02:00
|
|
|
client_ip, is_routable = get_client_ip(request)
|
2021-09-24 18:41:30 +02:00
|
|
|
return HttpResponse(repr(client_ip), content_type="text/plain")
|
2021-09-24 18:36:51 +02:00
|
|
|
|
|
|
|
|
2022-04-11 22:43:06 +02:00
|
|
|
def calc_etag(*args, **kwargs):
|
|
|
|
return get_file_hash()[:6]
|
|
|
|
|
|
|
|
|
2022-07-04 00:35:01 +02:00
|
|
|
def save_draft(request: HttpRequest) -> HttpResponse:
|
|
|
|
body = json.loads(request.body)
|
|
|
|
draft_md = body.get("draft_md", None)
|
2022-07-04 00:42:18 +02:00
|
|
|
if draft_md is None:
|
2022-07-04 00:35:01 +02:00
|
|
|
return HttpResponseBadRequest()
|
|
|
|
try:
|
|
|
|
last_draft = Draft.objects.filter(author=request.user).latest()
|
|
|
|
if last_draft.description_md == draft_md:
|
|
|
|
return JsonResponse({
|
|
|
|
"message": "saved (unchanged)"
|
|
|
|
})
|
|
|
|
except Draft.DoesNotExist:
|
|
|
|
pass
|
|
|
|
draft = Draft()
|
|
|
|
draft.description_md = draft_md
|
|
|
|
draft.author = request.user
|
|
|
|
draft.save()
|
|
|
|
return JsonResponse({
|
|
|
|
"message": "saved"
|
|
|
|
})
|
|
|
|
|
|
|
|
|
2024-08-07 23:37:26 +02:00
|
|
|
def name_completions(request: HttpRequest) -> HttpResponse:
|
|
|
|
response_data = []
|
|
|
|
|
|
|
|
for obj in (list(Location.objects.all()) +
|
|
|
|
list(Note.objects.all()) +
|
|
|
|
list(Faction.objects.all()) +
|
|
|
|
list(Loot.objects.all())):
|
|
|
|
response_data.append({
|
|
|
|
"name": obj.name
|
|
|
|
})
|
|
|
|
if obj.aliases:
|
|
|
|
for alias in obj.aliases:
|
|
|
|
response_data.append({
|
|
|
|
"name": alias,
|
|
|
|
"details":obj.name
|
|
|
|
})
|
|
|
|
for char in Character.objects.all():
|
|
|
|
response_data.append({
|
|
|
|
"name": char.name,
|
|
|
|
"details": char.subtitle
|
|
|
|
})
|
|
|
|
if char.aliases:
|
|
|
|
for alias in char.aliases:
|
|
|
|
response_data.append({
|
|
|
|
"name": alias,
|
|
|
|
"details":char.name
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
response = JsonResponse({
|
|
|
|
"suggestions": response_data
|
|
|
|
})
|
|
|
|
response['Cache-Control'] = f'max-age={24 * 60 * 60}'
|
|
|
|
return response
|
|
|
|
|
|
|
|
|
2022-04-11 22:43:06 +02:00
|
|
|
@condition(etag_func=calc_etag)
|
2022-11-30 14:05:37 +01:00
|
|
|
def debug_css(request: HttpRequest) -> HttpResponse:
|
2021-08-22 20:10:29 +02:00
|
|
|
css, source_map = get_css(debug=True)
|
|
|
|
return HttpResponse(css, content_type="text/css")
|
|
|
|
|
2021-09-11 19:09:22 +02:00
|
|
|
|
2022-04-11 22:43:06 +02:00
|
|
|
@condition(etag_func=calc_etag)
|
2022-11-30 14:05:37 +01:00
|
|
|
def debug_css_sourcemap(request: HttpRequest) -> HttpResponse:
|
2021-08-22 20:10:29 +02:00
|
|
|
css, source_map = get_css(debug=True)
|
|
|
|
return HttpResponse(source_map, content_type="application/json")
|
2021-09-11 19:09:22 +02:00
|
|
|
|
2022-04-11 22:43:06 +02:00
|
|
|
|
2021-09-11 19:09:22 +02:00
|
|
|
def handler500(request, *args, **argv):
|
2021-10-15 21:47:49 +02:00
|
|
|
return render(request, "500.jinja", {
|
2021-09-11 19:09:22 +02:00
|
|
|
"sentry_event_id": last_event_id(),
|
|
|
|
"sentry_dsn": SENTRY_DSN
|
|
|
|
}, status=500)
|