diff --git a/app/cli/list.py b/app/cli/list.py index 5e4794e..9b86091 100644 --- a/app/cli/list.py +++ b/app/cli/list.py @@ -2,24 +2,16 @@ import argparse import json import logging import sys -from typing import Callable, TYPE_CHECKING, Any, Dict +from typing import Callable, TYPE_CHECKING, Any from app import app -from app.lists.bc2 import mirror_sites -from app.lists.bridgelines import bridgelines -from app.lists.mirror_mapping import mirror_mapping +from app.lists import lists if TYPE_CHECKING: _SubparserType = argparse._SubParsersAction[argparse.ArgumentParser] else: _SubparserType = Any -lists: Dict[str, Callable[[], Any]] = { - "mirror_mapping": mirror_mapping, - "bc2": mirror_sites, - "bridgelines": bridgelines, -} - def dump(list_f: Callable[[], Any]) -> None: json.dump(list_f(), sys.stdout, indent=2) diff --git a/app/lists/__init__.py b/app/lists/__init__.py index e69de29..fde31ad 100644 --- a/app/lists/__init__.py +++ b/app/lists/__init__.py @@ -0,0 +1,11 @@ +from typing import Dict, Callable, Any + +from app.lists.bc2 import mirror_sites +from app.lists.bridgelines import bridgelines +from app.lists.mirror_mapping import mirror_mapping + +lists: Dict[str, Callable[[], Any]] = { + "mirror_mapping": mirror_mapping, + "bc2": mirror_sites, + "bridgelines": bridgelines, +} diff --git a/app/models/base.py b/app/models/base.py index 17b6373..ef611a6 100644 --- a/app/models/base.py +++ b/app/models/base.py @@ -25,7 +25,7 @@ class Group(AbstractConfiguration): class MirrorList(AbstractConfiguration): provider = db.Column(db.String(255), nullable=False) format = db.Column(db.String(20), nullable=False) - # obfuscate = db.Column(db.Boolean(), nullable=False) + encoding = db.Column(db.String(20), nullable=False) container = db.Column(db.String(255), nullable=False) branch = db.Column(db.String(255), nullable=False) role = db.Column(db.String(255), nullable=True) @@ -44,6 +44,13 @@ class MirrorList(AbstractConfiguration): "bridgelines": "Tor Bridge Lines" } + encodings_supported = { + "json": "JSON (Plain)", + "jsno": "JSON (Obfuscated)", + "js": "JavaScript (Plain)", + "jso": "JavaScript (Obfuscated)" + } + def destroy(self) -> None: self.destroyed = datetime.utcnow() self.updated = datetime.utcnow() diff --git a/app/portal/list.py b/app/portal/list.py index 1f89f4a..4e80c66 100644 --- a/app/portal/list.py +++ b/app/portal/list.py @@ -29,6 +29,11 @@ def list_format_name(s: str) -> str: return MirrorList.formats_supported.get(s, "Unknown") +@bp.app_template_filter("list_encoding_name") +def list_encoding_name(s: str) -> str: + return MirrorList.encodings_supported.get(s, "Unknown") + + @bp.route('/list') def list_list() -> ResponseReturnValue: lists = MirrorList.query.filter(MirrorList.destroyed.is_(None)).all() @@ -82,6 +87,7 @@ def list_new(group_id: Optional[int] = None) -> ResponseReturnValue: form = NewMirrorListForm() form.provider.choices = [(k, v) for k, v in MirrorList.providers_supported] # type: ignore form.format.choices = [(k, v) for k, v in MirrorList.formats_supported] # type: ignore + form.encoding.choices = [(k, v) for k, v in MirrorList.encodings_supported] # type: ignore if form.validate_on_submit(): list_ = MirrorList() list_.provider = form.provider.data @@ -110,6 +116,7 @@ def list_new(group_id: Optional[int] = None) -> ResponseReturnValue: class NewMirrorListForm(FlaskForm): # type: ignore provider = SelectField('Provider', validators=[DataRequired()]) format = SelectField('Distribution Method', validators=[DataRequired()]) + encoding = SelectField('Encoding', validators=[DataRequired()]) description = StringField('Description', validators=[DataRequired()]) container = StringField('Container', validators=[DataRequired()], description="GitHub Project, GitLab Project or AWS S3 bucket name.") diff --git a/app/portal/templates/tables.html.j2 b/app/portal/templates/tables.html.j2 index 32473c8..35ef30c 100644 --- a/app/portal/templates/tables.html.j2 +++ b/app/portal/templates/tables.html.j2 @@ -506,6 +506,7 @@