summary refs log tree commit diff
path: root/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'app.py')
-rw-r--r--app.py92
1 files changed, 77 insertions, 15 deletions
diff --git a/app.py b/app.py
index 219b160..137a6ca 100644
--- a/app.py
+++ b/app.py
@@ -1,46 +1,108 @@
-from flask import Flask, render_template, request, redirect, url_for
+from urllib.parse import urlparse as url_parse
+
+
+from flask import Flask, render_template, request, redirect, url_for, flash
 from markdown import markdown, Markdown
 from config import config
-from models import Post, db
-from forms import PostForm
+from models import Post, db, get_replies, Faccet
+from models import User as NewUser
+from forms import PostForm, LoginForm
+from flask_login import (
+    login_user,
+    logout_user,
+    login_required,
+    current_user,
+    LoginManager,
+)
 import os
 
+
 app = Flask(__name__)
-app.config.from_object('config')
+app.config.from_object("config")
 SECRET_KEY = os.urandom(32)
-app.config['SECRET_KEY'] = SECRET_KEY
+app.config["SECRET_KEY"] = SECRET_KEY
 
 app.jinja_options = app.jinja_options.copy()
 app.jinja_env.add_extension(Markdown)
 app.jinja_env.filters["markdown"] = markdown
 
+login = LoginManager(app)
+login.login_view = "login"
+
+
+@login.user_loader
+def load_user(uid):
+    return NewUser.get(NewUser.id == uid)
+
+
+@app.route("/login", methods=["GET", "POST"])
+def login():
+    form = LoginForm()
+    if form.validate_on_submit():  # noqa
+        user = NewUser.get(NewUser.username == form.username.data)
+        if user is None or not user.check_password(form.password.data):
+            flash("Invalid username or password")
+            return redirect(url_for("login"))
+        login_user(user, remember=form.remember_me.data)
+        next_page = request.args.get("next")
+        if not next_page or url_parse(next_page).netloc != "":
+            next_page = url_for("index")
+        return redirect(next_page)
+
+    return render_template("login.html", form=form)
+
 
 @app.before_request
 def before_request():
     db.connect()
 
+
 @app.after_request
 def after_request(response):
     db.close()
     return response
 
-@app.route('/')
+
+@app.route("/")
+@login_required
 def index():
-    posts = Post.select().order_by(Post.created_at.desc())
-    return render_template('index.html', posts=posts)
+    posts = Post.select().where(Post.parent == 0).order_by(Post.created_at.desc())
+    return render_template("index.html", posts=posts)
+
 
-@app.route('/post/<int:post_id>')
+@app.route("/logout")
+@login_required
+def logout():
+    flash("Goodbye!")
+    logout_user()
+    return redirect(url_for("login"))
+
+
+@app.route("/post/<int:post_id>")
+@login_required
 def post(post_id):
     post = Post.get(Post.id == post_id)
-    return render_template('post.html', post=post)
+    replies = get_replies(post_id)
+    return render_template("post.html", post=post, replies=replies)
 
-@app.route('/create', methods=['GET', 'POST'])
+
+@app.route("/create", methods=["GET", "POST"])
+@login_required
 def create():
     form = PostForm()
+    replyto = request.args.get("reply", 0)
+    userctx = NewUser.get(NewUser.username == current_user.username)
+    asfaccet = Faccet.get(Faccet.name == userctx.default_faccet)
     if form.validate_on_submit():
-        Post.create(title=form.title.data, content=form.content.data)
-        return redirect(url_for('index'))
-    return render_template('create.html', form=form)
+        Post.create(
+            title=form.title.data,
+            content=form.content.data,
+            authour=asfaccet,
+            parent=replyto,
+        )
+        return redirect(url_for("index"))
+    return render_template("create.html", form=form)
+
 
-if __name__ == '__main__':
+if __name__ == "__main__":
     app.run(debug=True, port=5052)