aboutsummaryrefslogtreecommitdiffstats
path: root/pysite/views/wiki
diff options
context:
space:
mode:
authorGravatar Gareth Coles <[email protected]>2018-04-04 16:09:05 +0100
committerGravatar Gareth Coles <[email protected]>2018-04-04 16:09:05 +0100
commit1d1e17f7f19203d449c8641794cd2c61705fdcd2 (patch)
tree63640306e93059a181b2af04952b0403c38ef8ee /pysite/views/wiki
parentCSRF error route doesn't do shit, sadly (diff)
Early wiki work including a WS test route for RST parsing
Diffstat (limited to 'pysite/views/wiki')
-rw-r--r--pysite/views/wiki/edit.py18
-rw-r--r--pysite/views/wiki/page.py30
2 files changed, 43 insertions, 5 deletions
diff --git a/pysite/views/wiki/edit.py b/pysite/views/wiki/edit.py
index 5c914c16..fac5532e 100644
--- a/pysite/views/wiki/edit.py
+++ b/pysite/views/wiki/edit.py
@@ -1,13 +1,25 @@
# coding=utf-8
+from flask import url_for
+from werkzeug.utils import redirect
+
from pysite.base_route import RouteView
from pysite.constants import ALL_STAFF_ROLES
-from pysite.decorators import require_roles
+from pysite.decorators import require_roles, csrf
+from pysite.mixins import DBMixin
-class EditView(RouteView):
+class EditView(RouteView, DBMixin):
path = "/edit/<path:page>" # "path" means that it accepts slashes
name = "edit"
+ table_name = "wiki"
+ table_primary_key = "slug"
+
@require_roles(*ALL_STAFF_ROLES)
def get(self, page):
- return self.render("staff/staff.html")
+ return self.render("wiki/page_edit.html", page=page)
+
+ @require_roles(*ALL_STAFF_ROLES)
+ @csrf
+ def post(self, page):
+ return redirect(url_for("wiki.page", page=page), code=303) # Redirect, ensuring a GET
diff --git a/pysite/views/wiki/page.py b/pysite/views/wiki/page.py
index 6f9f15c1..70cec002 100644
--- a/pysite/views/wiki/page.py
+++ b/pysite/views/wiki/page.py
@@ -1,10 +1,36 @@
# coding=utf-8
+from flask import url_for, redirect
+
from pysite.base_route import RouteView
+from pysite.constants import ALL_STAFF_ROLES
+from pysite.mixins import DBMixin
-class PageView(RouteView):
+class PageView(RouteView, DBMixin):
path = "/wiki/<path:page>" # "path" means that it accepts slashes
name = "page"
+ table_name = "wiki"
+ table_primary_key = "slug"
+
def get(self, page):
- return self.render("wiki/index.html")
+ obj = self.db.get(self.table_name, page)
+
+ if obj is None:
+ if self.is_staff():
+ return redirect(url_for("wiki.edit", page=page))
+
+ return self.render("wiki/page_missing.html", page=page)
+ return self.render("wiki/page_view.html", page=page, data=obj)
+
+ def is_staff(self):
+ if not self.logged_in:
+ return False
+
+ roles = self.user_data["roles"]
+
+ for role in roles:
+ if role in ALL_STAFF_ROLES:
+ return True
+
+ return False