from flask import Blueprint, jsonify, render_template, abort, request, redirect, url_for, current_app
from .utils import request_wants_json, ActiveStatus, ActiveStatusv14
from .auth import httpauth
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
active.set_new_state(value=new_state, trigger_person=trigger_person)
activev14.set_new_state(value=new_state, trigger_person=trigger_person)
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 '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)
active.save_last_state()
activev14.save_last_state()
return redirect(url_for('root.index'))
return render_template('present.html')