import secrets
from django.http import HttpResponse, Http404
-from django.shortcuts import get_object_or_404, redirect, render
+from django.shortcuts import get_object_or_404, render
from . import models
tf = models.TextFile(text=text, edit_key=secrets.token_urlsafe())
tf.save()
- return redirect(tf.get_absolute_url())
+ return render(
+ request,
+ 'edit.html',
+ {
+ 'text_file': tf,
+ 'text': tf.text,
+ 'edit_key': tf.edit_key,
+ },
+ )
def text_file(request, pk):
if request.method != 'GET':
tf = get_object_or_404(models.TextFile, pk=pk_int)
- return HttpResponse(tf.text)
+ if request.GET.get('raw'):
+ return HttpResponse(tf.text, content_type='text/plain')
+
+ font = request.GET.get('font', 'sans')
+
+ return render(
+ request,
+ 'text_file.html',
+ {
+ 'text_file': tf,
+ 'font': font,
+ 'text': tf.text.strip(),
+ },
+ )
+
+def edit(request, pk):
+ pk_int = int.from_bytes(base64.urlsafe_b64decode(pk), 'big')
+
+ tf = get_object_or_404(models.TextFile, pk=pk_int)
+
+ context = {
+ 'text_file': tf,
+ }
+
+ if request.method == 'POST':
+ edit_key = request.POST.get('edit_key','')
+ text = request.POST.get('text','')
+
+ context['text'] = text
+
+ if secrets.compare_digest(edit_key, tf.edit_key):
+ context['edit_key'] = edit_key
+ tf.text = text
+ tf.save()
+
+ else:
+ context['incorrect_key'] = True
+
+ elif request.method == 'GET':
+ context['text'] = tf.text
+
+ return render(
+ request,
+ 'edit.html',
+ context,
+ )