"""This is the main flask distribusi page""" from datetime import timedelta from flask import ( render_template, redirect, url_for, session, send_from_directory, ) from flask_login import ( logout_user, login_required, current_user, ) from flask_wtf.csrf import CSRFError from app import create_app, login_manager from usermodel import User # Use upload form to populate filters from forms.uploadform import UploadForm # Interface! these are seperate files in main folder from adminpage import AdminPage from editor import Editor from themeselector import ThemeSelector from distribusiworkflow import DistribusiWorkflow from distribusiselector import DistribusiSelector from uploadpage import UploadPage # UserPengguna from statuspengguna.helper import ResetUserState from statuspengguna.loginuser import LoginUser from statuspengguna.registeruser import RegisterUser from distribusisinfo import DistribusisInfo APP = create_app() @APP.before_request def session_handler(): session.permanent = True APP.permanent_session_lifetime = timedelta(minutes=30) @APP.route("/") def index(): ResetUserState() uploadform = UploadForm() distribusis = DistribusisInfo.visibledistribusis() distribusies = {} for distribusi in distribusis: user = User.query.filter_by(id=distribusi.userid).first() singledistribusi = { "username": user.username, "term": distribusi.term, "course": distribusi.course, "year": distribusi.year, "tags": distribusi.tags.split(","), } distribusies[distribusi.distribusiname] = singledistribusi years = uploadform.academicyear.choices terms = uploadform.term.choices courses = uploadform.course.choices adminuser = isadminuser() template = render_template( "index.html", distribusies=distribusies, years=years, terms=terms, courses=courses, adminuser=adminuser, ) return template @APP.route("/distribusi", methods=["GET", "POST"]) @login_required def distribusi(): return DistribusiWorkflow() @APP.route("/upload", methods=["POST"]) @login_required def upload(): uploadfolder = APP.config["UPLOAD_FOLDER"] return UploadPage(uploadfolder) @APP.route("/theme", methods=["GET", "POST"]) @login_required def theme(): return ThemeSelector() @APP.route("/editor", methods=["GET", "POST"]) @login_required def editor(): return Editor() @APP.route("/selector", methods=["GET", "POST"]) @login_required def selector(): return DistribusiSelector() @APP.route("/stash/") def distribusistash(path): return send_from_directory("stash", path) @APP.route("/admin", methods=["GET", "POST"]) @login_required def admin(): if not isadminuser(): return redirect(url_for("index")) return AdminPage() @APP.route("/logout") @login_required def logout(): logout_user() return redirect(url_for("index")) @APP.route("/login", methods=["GET", "POST"]) def login(): result = LoginUser() return result @APP.route("/register", methods=["GET", "POST"]) def register(): result = RegisterUser() return result @APP.errorhandler(CSRFError) def handle_csrf_error(e): return render_template("csrf_error.html", reason=e.description), 400 @login_manager.user_loader def load_user(user_id): return User.query.get(int(user_id)) def isadminuser(): if not current_user.is_authenticated: return False user = User.query.filter_by(email=current_user.email).first() return user.admin if __name__ == "__main__": APP.debug = True APP.run(port=5000)