38 lines
1.3 KiB
Python
38 lines
1.3 KiB
Python
"""Admin-only review UI for staged Alfred Developer proposals.
|
|
|
|
No web endpoint can deploy, restart, execute code or run shell commands.
|
|
"""
|
|
from flask import Blueprint, jsonify, render_template, request
|
|
from services import admin_console
|
|
from services import alfred_developer_core as dev
|
|
|
|
|
|
def register_developer_page(app):
|
|
bp=Blueprint('alfred_developer_ui',__name__)
|
|
|
|
@bp.get('/maintenance')
|
|
def maintenance_page():
|
|
return render_template('alfred_maintenance.html')
|
|
|
|
@bp.get('/api/control/developer/tasks')
|
|
@admin_console._require_admin
|
|
def tasks():
|
|
return jsonify(ok=True, tasks=dev.list_tasks())
|
|
|
|
@bp.get('/api/control/developer/tasks/<pid>')
|
|
@admin_console._require_admin
|
|
def detail(pid):
|
|
try:return jsonify(ok=True, task=dev.task_detail(pid))
|
|
except (ValueError,OSError,RuntimeError) as e:return jsonify(error=str(e)),400
|
|
|
|
@bp.post('/api/control/developer/tasks/<pid>/decision')
|
|
@admin_console._require_admin
|
|
def decide(pid):
|
|
data=request.get_json(silent=True) or {}
|
|
try:
|
|
return jsonify(ok=True, result=dev.approve(pid,data.get('decision'),data.get('diff_sha256')))
|
|
except (ValueError,OSError,RuntimeError) as e:
|
|
return jsonify(error=str(e)),400
|
|
|
|
app.register_blueprint(bp)
|