Get editing working
[txt.house] / txt_house / views.py
index 5a8f922..7a1f078 100644 (file)
@@ -2,7 +2,7 @@ import base64
 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
 
@@ -21,7 +21,15 @@ def create(request):
     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':
@@ -31,4 +39,49 @@ def text_file(request, pk):
 
     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,
+    )