Adding sessions
This commit is contained in:
parent
3854a877bf
commit
36006ceeea
|
@ -19,6 +19,7 @@ pyyaml = "^6.0.2"
|
|||
nanoid = "^2.0.0"
|
||||
# grung-db = {git = "https://git.evilchi.li/evilchili/grung-db.git"}
|
||||
grung-db = {git = "file:///home/greg/dev/grung-db/"}
|
||||
flask-session = "^0.8.0"
|
||||
|
||||
[tool.poetry.group.dev.dependencies]
|
||||
pytest = "*"
|
||||
|
|
|
@ -4,9 +4,9 @@ from pathlib import Path
|
|||
from types import SimpleNamespace
|
||||
|
||||
from dotenv import dotenv_values
|
||||
from flask import Flask
|
||||
from flask import Flask, session
|
||||
from flask_session import Session
|
||||
from grung.db import GrungDB
|
||||
from grung.exceptions import UniqueConstraintError
|
||||
from tinydb.storages import MemoryStorage
|
||||
|
||||
from ttfrog import schema
|
||||
|
@ -78,6 +78,7 @@ VIEW_URI=/
|
|||
config=config_file,
|
||||
data_root=data_root,
|
||||
database=data_root / f"{self.config.NAME}.json",
|
||||
sessions=data_root / "session_cache"
|
||||
)
|
||||
|
||||
def initialize(self, db: GrungDB = None, force: bool = False) -> None:
|
||||
|
@ -99,6 +100,11 @@ VIEW_URI=/
|
|||
self.web.config["SEND_FILE_MAX_AGE_DEFAULT"] = 0
|
||||
self.web.config["DEBUG"] = True
|
||||
|
||||
self.web.config["SESSION_TYPE"] = "filesystem"
|
||||
self.web.config["SESSION_REFRESH_EACH_REQUEST"] = True
|
||||
self.web.config["SESSION_FILE_DIR"] = self.path.sessions
|
||||
Session(self.web)
|
||||
|
||||
self._initialized = True
|
||||
|
||||
def check_state(self) -> None:
|
||||
|
|
|
@ -5,6 +5,8 @@ from grung.types import BackReference, Collection, Pointer, Record
|
|||
|
||||
from ttfrog import schema
|
||||
|
||||
from flask import g
|
||||
|
||||
READ_ONLY_FIELD_TYPES = [Collection, Pointer, BackReference]
|
||||
|
||||
|
||||
|
@ -30,6 +32,7 @@ class Form:
|
|||
continue
|
||||
|
||||
self.record[key] = value
|
||||
self.record.author = g.user
|
||||
return self.record
|
||||
|
||||
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
{% block menu %}{% endblock %}
|
||||
</ul>
|
||||
</nav>
|
||||
Last Edited By: {{ page.author.name }}
|
||||
<br>
|
||||
|
||||
<main>
|
||||
{% for message in get_flashed_messages() %}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from flask import Response, render_template, request
|
||||
from flask import Response, render_template, request, redirect, url_for, session, g
|
||||
from tinydb import where
|
||||
|
||||
from ttfrog import app, schema, forms
|
||||
|
@ -81,11 +81,26 @@ def index():
|
|||
return rendered(get_page(create_okay=False))
|
||||
|
||||
|
||||
@app.web.route("/login")
|
||||
def login():
|
||||
app.web.session_interface.regenerate(session)
|
||||
g.user = app.db.User.search(where("name") == "admin")[0]
|
||||
session['user_id'] = g.user.doc_id
|
||||
return redirect(url_for("index"))
|
||||
|
||||
|
||||
@app.web.route("/logout")
|
||||
def logout():
|
||||
if 'user_id' in session:
|
||||
del session['user_id']
|
||||
del g.user
|
||||
|
||||
|
||||
@app.web.route(f"{app.config.VIEW_URI}/<path:table>/<path:path>", methods=["GET"])
|
||||
@app.web.route(f"{app.config.VIEW_URI}/<path:path>", methods=["GET"], defaults={'table': 'Page'})
|
||||
def view(table, path):
|
||||
parent = get_parent(table, relative_uri())
|
||||
return rendered(get_page(request.path, table=table, create_okay=parent.doc_id is not None))
|
||||
return rendered(get_page(request.path, table=table, create_okay=parent and parent.doc_id is not None))
|
||||
|
||||
|
||||
@app.web.route(f"{app.config.VIEW_URI}/<path:table>/<path:path>", methods=["POST"])
|
||||
|
@ -110,6 +125,14 @@ def edit(table, path):
|
|||
return rendered(app.add_member(parent, save_data))
|
||||
|
||||
|
||||
@app.web.before_request
|
||||
def before_request():
|
||||
if 'user_id' in session:
|
||||
g.user = app.db.User.get(doc_id=session['user_id'])
|
||||
elif request.endpoint != 'login':
|
||||
return redirect(url_for('login'))
|
||||
|
||||
|
||||
@app.web.after_request
|
||||
def add_header(r):
|
||||
r.headers["Cache-Control"] = "no-cache, no-store, must-revalidate, public, max-age=0"
|
||||
|
|
Loading…
Reference in New Issue
Block a user