portal: additional buttons on list pages
link to onion services page from origin page link to previews of distribution lists from lists
This commit is contained in:
parent
928edc46c2
commit
d54fae7423
9 changed files with 151 additions and 74 deletions
|
@ -1,18 +1,32 @@
|
|||
import json
|
||||
from datetime import datetime
|
||||
|
||||
from flask import render_template, url_for, flash, redirect, Blueprint
|
||||
from flask import render_template, url_for, flash, redirect, Blueprint, Response
|
||||
from flask_wtf import FlaskForm
|
||||
from sqlalchemy import exc
|
||||
from wtforms import SelectField, StringField, SubmitField
|
||||
from wtforms.validators import DataRequired
|
||||
|
||||
from app import db
|
||||
from app.extensions import db
|
||||
from app.lists.bc2 import mirror_sites
|
||||
from app.lists.bridgelines import bridgelines
|
||||
from app.lists.mirror_mapping import mirror_mapping
|
||||
from app.models.base import MirrorList
|
||||
from app.portal.util import response_404, view_lifecycle
|
||||
|
||||
bp = Blueprint("list", __name__)
|
||||
|
||||
|
||||
@bp.app_template_filter("provider_name")
|
||||
def list_provider_name(s: str) -> str:
|
||||
return MirrorList.providers_supported.get(s, "Unknown")
|
||||
|
||||
|
||||
@bp.app_template_filter("format_name")
|
||||
def list_format_name(s: str) -> str:
|
||||
return MirrorList.formats_supported.get(s, "Unknown")
|
||||
|
||||
|
||||
@bp.route('/list')
|
||||
def list_list():
|
||||
lists = MirrorList.query.filter(MirrorList.destroyed == None).all()
|
||||
|
@ -21,7 +35,27 @@ def list_list():
|
|||
title="Mirror Lists",
|
||||
item="mirror list",
|
||||
new_link=url_for("portal.list.list_new"),
|
||||
items=lists)
|
||||
items=lists,
|
||||
extra_buttons=[
|
||||
{
|
||||
"link": url_for("portal.list.list_preview", format_=k),
|
||||
"text": f"Preview {v}",
|
||||
"style": "secondary"
|
||||
}
|
||||
for k, v in MirrorList.formats_supported.items()
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
@bp.route('/preview/<format_>')
|
||||
def list_preview(format_: str):
|
||||
if format_ == "bca":
|
||||
return Response(json.dumps(mirror_mapping()), content_type="application/json")
|
||||
if format_ == "bc2":
|
||||
return Response(json.dumps(mirror_sites()), content_type="application/json")
|
||||
if format_ == "bridgelines":
|
||||
return Response(json.dumps(bridgelines()), content_type="application/json")
|
||||
return response_404(message="Format not found")
|
||||
|
||||
|
||||
@bp.route("/destroy/<list_id>", methods=['GET', 'POST'])
|
||||
|
@ -44,17 +78,8 @@ def list_destroy(list_id: int):
|
|||
@bp.route("/new/<group_id>", methods=['GET', 'POST'])
|
||||
def list_new(group_id=None):
|
||||
form = NewMirrorListForm()
|
||||
form.provider.choices = [
|
||||
("github", "GitHub"),
|
||||
("gitlab", "GitLab"),
|
||||
("s3", "AWS S3"),
|
||||
]
|
||||
form.format.choices = [
|
||||
("bc2", "Bypass Censorship v2"),
|
||||
("bc3", "Bypass Censorship v3"),
|
||||
("bca", "Bypass Censorship Analytics"),
|
||||
("bridgelines", "Tor Bridge Lines")
|
||||
]
|
||||
form.provider.choices = [(k, v) for k, v in MirrorList.providers_supported]
|
||||
form.format.choices = [(k, v) for k, v in MirrorList.formats_supported]
|
||||
if form.validate_on_submit():
|
||||
list_ = MirrorList()
|
||||
list_.provider = form.provider.data
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue