majuna/app/portal/proxy.py

74 lines
2.5 KiB
Python
Raw Permalink Normal View History

2024-12-06 18:15:47 +00:00
from flask import Blueprint, Response, flash, redirect, render_template, url_for
2022-05-16 11:44:03 +01:00
from flask.typing import ResponseReturnValue
from sqlalchemy import desc
from app.extensions import db
from app.models.mirrors import Proxy
from app.portal.util import LifecycleForm
bp = Blueprint("proxy", __name__)
@bp.route("/list")
2022-05-16 11:44:03 +01:00
def proxy_list() -> ResponseReturnValue:
2024-12-06 18:15:47 +00:00
proxies = (
Proxy.query.filter(Proxy.destroyed.is_(None)).order_by(desc(Proxy.added)).all()
)
return render_template(
"list.html.j2", section="proxy", title="Proxies", item="proxy", items=proxies
)
2024-12-06 18:15:47 +00:00
@bp.route("/expire/<proxy_id>", methods=["GET", "POST"])
def proxy_expire(proxy_id: int) -> ResponseReturnValue:
proxy = Proxy.query.filter(Proxy.id == proxy_id, Proxy.destroyed.is_(None)).first()
if proxy is None:
2024-12-06 18:15:47 +00:00
return Response(
render_template(
"error.html.j2",
header="404 Proxy Not Found",
message="The requested proxy could not be found. It may have already been "
"destroyed.",
)
)
form = LifecycleForm()
if form.validate_on_submit():
proxy.destroy()
db.session.commit()
flash("Proxy will be shortly retired.", "success")
return redirect(url_for("portal.origin.origin_edit", origin_id=proxy.origin.id))
2024-12-06 18:15:47 +00:00
return render_template(
"lifecycle.html.j2",
header=f"Expire proxy for {proxy.origin.domain_name} immediately?",
message=proxy.url,
section="proxy",
form=form,
)
2024-12-06 18:15:47 +00:00
@bp.route("/block/<proxy_id>", methods=["GET", "POST"])
2022-05-16 11:44:03 +01:00
def proxy_block(proxy_id: int) -> ResponseReturnValue:
2022-05-16 13:29:48 +01:00
proxy = Proxy.query.filter(Proxy.id == proxy_id, Proxy.destroyed.is_(None)).first()
if proxy is None:
2024-12-06 18:15:47 +00:00
return Response(
render_template(
"error.html.j2",
header="404 Proxy Not Found",
message="The requested proxy could not be found. It may have already been "
"destroyed.",
)
)
form = LifecycleForm()
if form.validate_on_submit():
proxy.deprecate(reason="manual")
db.session.commit()
flash("Proxy will be shortly replaced.", "success")
return redirect(url_for("portal.origin.origin_edit", origin_id=proxy.origin.id))
2024-12-06 18:15:47 +00:00
return render_template(
"lifecycle.html.j2",
header=f"Mark proxy for {proxy.origin.domain_name} as blocked?",
message=proxy.url,
section="proxy",
form=form,
)