91 lines
3.2 KiB
Python
91 lines
3.2 KiB
Python
from pathlib import Path
|
|
from flask import Blueprint, request, redirect, flash, session
|
|
import auth
|
|
import config_utils
|
|
|
|
_PAGE = Path(__file__).parent.name
|
|
|
|
bp = Blueprint(_PAGE, __name__)
|
|
|
|
@bp.route('/action/actions/pending_save', methods=['POST'])
|
|
@auth.require_level('administrator')
|
|
def pending_save():
|
|
session['apply_changes_immediately'] = 'apply_changes_immediately' in request.form
|
|
flash('Preference saved.', 'success')
|
|
return redirect(f'/{_PAGE}')
|
|
|
|
|
|
@bp.route('/action/actions/pending_apply', methods=['POST'])
|
|
@auth.require_level('administrator')
|
|
def pending_apply():
|
|
pending = config_utils.get_dashboard_pending()
|
|
if not pending:
|
|
flash('No pending changes to apply.', 'info')
|
|
return redirect(f'/{_PAGE}')
|
|
config_utils.flush_pending_to_queue()
|
|
if any(cmd != 'fix problems' for _, _, cmd, _ in pending):
|
|
flash('Changes queued.', 'success')
|
|
return redirect(f'/{_PAGE}')
|
|
|
|
|
|
@bp.route('/action/actions/history_revert', methods=['POST'])
|
|
@auth.require_level('administrator')
|
|
def history_revert():
|
|
selected_uuids = request.form.getlist('selected_uuids')
|
|
if not selected_uuids:
|
|
flash('No items selected.', 'info')
|
|
return redirect(f'/{_PAGE}')
|
|
if len(selected_uuids) != 1:
|
|
flash('Please select exactly one change to revert.', 'error')
|
|
return redirect(f'/{_PAGE}')
|
|
|
|
behavior = request.form.get('revert_behavior', 'revert_subsequent')
|
|
errors, succeeded, failed = config_utils.revert_group_chain(selected_uuids[0])
|
|
|
|
for msg in errors:
|
|
flash(msg, 'error')
|
|
if succeeded:
|
|
s = 's' if succeeded != 1 else ''
|
|
if behavior == 'restore_state':
|
|
flash(f'Config restored to selected state ({succeeded} change{s} reverted).', 'success')
|
|
else:
|
|
flash(f'{succeeded} change{s} reverted.', 'success')
|
|
return redirect(f'/{_PAGE}')
|
|
|
|
|
|
@bp.route('/action/actions/history_clear', methods=['POST'])
|
|
@auth.require_level('manager')
|
|
def history_clear():
|
|
selected_uuids = request.form.getlist('selected_uuids')
|
|
if not selected_uuids:
|
|
flash('No items selected.', 'info')
|
|
return redirect(f'/{_PAGE}')
|
|
count = 0
|
|
conn = config_utils._db()
|
|
try:
|
|
for uid in selected_uuids:
|
|
conn.execute('DELETE FROM changes WHERE group_id=?', (uid,))
|
|
result = conn.execute('DELETE FROM groups WHERE uuid=?', (uid,))
|
|
count += result.rowcount
|
|
conn.commit()
|
|
finally:
|
|
conn.close()
|
|
plural = 's' if count != 1 else ''
|
|
flash(f'{count} history record{plural} cleared.', 'success')
|
|
return redirect(f'/{_PAGE}')
|
|
|
|
|
|
@bp.route('/action/actions/pending_dismiss', methods=['POST'])
|
|
@auth.require_level('manager')
|
|
def pending_dismiss():
|
|
pending = config_utils.get_dashboard_pending()
|
|
dismissible = [(u, t, c, usr) for u, t, c, usr in pending if c != 'fix problems']
|
|
if not dismissible:
|
|
flash('No pending changes to dismiss.', 'info')
|
|
return redirect(f'/{_PAGE}')
|
|
keep = [(u, t, c, usr) for u, t, c, usr in pending if c == 'fix problems']
|
|
with open(config_utils.DASHBOARD_PENDING, 'w') as f:
|
|
for u, t, c, usr in keep:
|
|
f.write(f'{u} {t} [{c}] ({usr})\n')
|
|
flash('Pending changes dismissed.', 'success')
|
|
return redirect(f'/{_PAGE}')
|