Files @ 275690f3bbdc
Branch filter:

Location: C3L-NOC/spaceapi/spaceapi/views.py

Dennis Fink
Black autoformat
from flask import (
    Blueprint,
    abort,
    current_app,
    jsonify,
    redirect,
    render_template,
    request,
    url_for,
)

from .auth import httpauth
from .utils import ActiveStatus, ActiveStatusv14, request_wants_json

root_views = Blueprint("root", __name__)


@root_views.route("/")
def index():
    if request_wants_json():
        return jsonify(ActiveStatus())
    return render_template("index.html", status=ActiveStatus())


@root_views.route("/status.json")
def status_json():
    return jsonify(ActiveStatus())


@root_views.route("/v14/status.json")
def v14_json():
    return jsonify(ActiveStatusv14())


@root_views.route("/reload")
@httpauth.login_required
def reload():
    active = ActiveStatus()
    active.reload()
    return jsonify(active)


@root_views.route("/v14/reload")
@httpauth.login_required
def v14_reload():
    active = ActiveStatusv14()
    active.reload()
    return jsonify(active)


@root_views.route("/open", methods=("GET", "POST"))
@httpauth.login_required
def open():
    if request.method == "POST":
        active = ActiveStatus()
        activev14 = ActiveStatusv14()

        try:
            if (
                httpauth.username()
                in current_app.config["STATE_TRIGGER_PERSON_ALLOWED"]
            ):
                trigger_person = httpauth.username()
            else:
                trigger_person = None
        except KeyError:
            trigger_person = None

        if "close" in request.form:
            new_state = False
        elif "open" in request.form:
            new_state = True

        if "message" in request.form:
            message = request.form.get("message")
        else:
            message = None

        active.set_new_state(
            value=new_state, trigger_person=trigger_person, message=message
        )
        activev14.set_new_state(
            value=new_state, trigger_person=trigger_person, message=message
        )
        active.save_last_state()
        activev14.save_last_state()
        return redirect(url_for("root.index"))

    return render_template("open.html")


@root_views.route("/present", methods=("GET", "POST"))
@httpauth.login_required
def present():
    if request.method == "POST":

        active = ActiveStatus()
        activev14 = ActiveStatusv14()

        if active["state"]["open"]:
            user = (
                httpauth.username()
                if "user" not in request.form
                else request.form["user"]
            )
            if "present" in request.form:
                active.add_user_present(user)
                activev14.add_user_present(user)
            elif "leave" in request.form:
                active.remove_user_present(user)
                activev14.remove_user_present(user)
            else:
                return redirect(url_for("root.index"))

            active.save_last_state()
            activev14.save_last_state()

        return redirect(url_for("root.index"))

    return render_template("present.html")