import json from pathlib import Path from flask import Flask, send_from_directory, render_template from jellyfin_accounts import config, app, g, css, data_store from jellyfin_accounts import web_log as log from jellyfin_accounts.web_api import checkInvite, validator @app.errorhandler(404) def page_not_found(e): return ( render_template( "404.html", css_href=css["href"], css_integrity=css["integrity"], css_crossorigin=css["crossorigin"], contactMessage=config["ui"]["contact_message"], ), 404, ) @app.route("/", methods=["GET", "POST"]) def admin(): # return app.send_static_file('admin.html') return render_template( "admin.html", css_href=css["href"], css_integrity=css["integrity"], css_crossorigin=css["crossorigin"], contactMessage="", email_enabled=config.getboolean("invite_emails", "enabled"), ) @app.route("/") def static_proxy(path): if "html" not in path: return app.send_static_file(path) return ( render_template( "404.html", css_href=css["href"], css_integrity=css["integrity"], css_crossorigin=css["crossorigin"], contactMessage=config["ui"]["contact_message"], ), 404, ) @app.route("/invite/") def inviteProxy(path): if checkInvite(path): log.info(f"Invite {path} used to request form") try: email = data_store.invites[path]["email"] except KeyError: email = "" return render_template( "form.html", css_href=css["href"], css_integrity=css["integrity"], css_crossorigin=css["crossorigin"], contactMessage=config["ui"]["contact_message"], helpMessage=config["ui"]["help_message"], successMessage=config["ui"]["success_message"], jfLink=config["jellyfin"]["public_server"], validate=config.getboolean("password_validation", "enabled"), requirements=validator.getCriteria(), email=email, ) elif "admin.html" not in path and "admin.html" not in path: return app.send_static_file(path) else: log.debug("Attempted use of invalid invite") return render_template( "invalidCode.html", css_href=css["href"], css_integrity=css["integrity"], css_crossorigin=css["crossorigin"], contactMessage=config["ui"]["contact_message"], )