aboutsummaryrefslogtreecommitdiff
path: root/src/hydrilla/proxy/web_ui/options.py
diff options
context:
space:
mode:
authorWojtek Kosior <koszko@koszko.org>2022-09-09 11:44:59 +0200
committerWojtek Kosior <koszko@koszko.org>2022-09-12 13:59:10 +0200
commit6036bad4c167633d41f01e030ec1ae919dbfab0a (patch)
tree02e164e6b7860dc69af1820fb1a53334aff1332f /src/hydrilla/proxy/web_ui/options.py
parentd6e8e36e04fc36d42f9b985c47e2cd3b35907cc8 (diff)
downloadhaketilo-hydrilla-6036bad4c167633d41f01e030ec1ae919dbfab0a.tar.gz
haketilo-hydrilla-6036bad4c167633d41f01e030ec1ae919dbfab0a.zip
[proxy] allow prompting the user when a package suitable for current site is found; add proxy's options page
This commit also causes uncached responses to be forced on all HTTP request to external servers. This is needed to make sure that changes Haketilo makes to HTTP response headers are always picked up by the browser. The drawback is that this increases network traffic causing a performance hit. We might optimize this in the future.
Diffstat (limited to 'src/hydrilla/proxy/web_ui/options.py')
-rw-r--r--src/hydrilla/proxy/web_ui/options.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/src/hydrilla/proxy/web_ui/options.py b/src/hydrilla/proxy/web_ui/options.py
new file mode 100644
index 0000000..f24c356
--- /dev/null
+++ b/src/hydrilla/proxy/web_ui/options.py
@@ -0,0 +1,69 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+# Proxy web UI options page.
+#
+# This file is part of Hydrilla&Haketilo.
+#
+# Copyright (C) 2022 Wojtek Kosior
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <https://www.gnu.org/licenses/>.
+#
+#
+# I, Wojtek Kosior, thereby promise not to sue for violation of this
+# file's license. Although I request that you do not make use this code
+# in a proprietary program, I am not going to enforce this in court.
+
+# Enable using with Python 3.7.
+from __future__ import annotations
+
+import typing as t
+
+import flask
+import werkzeug
+
+from .. import state as st
+from . import _app
+
+
+bp = flask.Blueprint('options', __package__)
+
+@bp.route('/options', methods=['GET'])
+def options(errors: t.Mapping[str, bool] = {}) -> werkzeug.Response:
+ html = flask.render_template(
+ 'options.html.jinja',
+ settings = _app.get_haketilo_state().get_settings(),
+ **errors
+ )
+ return flask.make_response(html, 200)
+
+@bp.route('/options', methods=['POST'])
+def options_post() -> werkzeug.Response:
+ action = flask.request.form['action']
+
+ state = _app.get_haketilo_state()
+
+ if action == 'use_enabled':
+ state.update_settings(mapping_use_mode=st.MappingUseMode.WHEN_ENABLED)
+ elif action == 'use_auto':
+ state.update_settings(mapping_use_mode=st.MappingUseMode.AUTO)
+ elif action == 'use_question':
+ state.update_settings(mapping_use_mode=st.MappingUseMode.QUESTION)
+ elif action == 'allow_scripts':
+ state.update_settings(default_allow_scripts=True)
+ elif action == 'block_scripts':
+ state.update_settings(default_allow_scripts=False)
+ else:
+ raise ValueError()
+
+ return flask.redirect(flask.url_for('.options'), 303)