summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMS <ms@taler.net>2022-11-02 11:20:44 +0100
committerMS <ms@taler.net>2022-11-02 11:20:44 +0100
commita80b6a5d8eada7c9d17bcc5964dd6ce3ac1478f2 (patch)
tree91f2cd7811bf62760c004f10f1f38b49c23c2b8a
parent106f4efd54df8155130af9a2b1f4ff78376e4266 (diff)
downloadtaler-merchant-demos-a80b6a5d8eada7c9d17bcc5964dd6ce3ac1478f2.tar.gz
taler-merchant-demos-a80b6a5d8eada7c9d17bcc5964dd6ce3ac1478f2.tar.bz2
taler-merchant-demos-a80b6a5d8eada7c9d17bcc5964dd6ce3ac1478f2.zip
i18n
manage unsupported languages
-rw-r--r--talermerchantdemos/blog/blog.py10
-rw-r--r--talermerchantdemos/donations/donations.py10
-rw-r--r--talermerchantdemos/httpcommon/__init__.py9
-rw-r--r--talermerchantdemos/landing/landing.py10
-rw-r--r--talermerchantdemos/survey/survey.py9
5 files changed, 47 insertions, 1 deletions
diff --git a/talermerchantdemos/blog/blog.py b/talermerchantdemos/blog/blog.py
index 90ef3b9..263c7cf 100644
--- a/talermerchantdemos/blog/blog.py
+++ b/talermerchantdemos/blog/blog.py
@@ -164,6 +164,16 @@ def favicon():
# @return response object of the index page.
@app.route("/<lang>/")
def start(lang):
+
+ # get_locale defaults to english, hence the
+ # condition below happens only when lang is
+ # wrong or unsupported, respond 404.
+ if lang != get_locale():
+ err_abort(
+ 404,
+ message="Language {} not found".format(lang),
+ )
+
if lang in ARTICLES:
translated = ARTICLES[lang]
else:
diff --git a/talermerchantdemos/donations/donations.py b/talermerchantdemos/donations/donations.py
index b522508..ea7138b 100644
--- a/talermerchantdemos/donations/donations.py
+++ b/talermerchantdemos/donations/donations.py
@@ -175,6 +175,16 @@ def index():
# @return response object of the index page.
@app.route("/<lang>/")
def start(lang):
+
+ # get_locale defaults to english, hence the
+ # condition below happens only when lang is
+ # wrong or unsupported, respond 404.
+ if lang != get_locale():
+ err_abort(
+ 404,
+ message=f"Language {lang} not found",
+ )
+
return flask.render_template(
"donations-index.html.j2",
page_title=gettext("GNU Taler Demo: Donations"),
diff --git a/talermerchantdemos/httpcommon/__init__.py b/talermerchantdemos/httpcommon/__init__.py
index 0b76111..56cfeda 100644
--- a/talermerchantdemos/httpcommon/__init__.py
+++ b/talermerchantdemos/httpcommon/__init__.py
@@ -5,6 +5,7 @@ from flask import request, url_for
from datetime import datetime
import time
from flask_babel import gettext
+import babel # used for lang sanity check
import os
import re
import logging
@@ -99,6 +100,14 @@ def get_locale():
# Totally unexpected path format, do not localize
return "en"
lang = parts[1]
+
+ # Sanity check on the language code.
+ try:
+ babel.core.Locale.parse(lang)
+ except Exception as err:
+ # Not a locale, default to english.
+ LOGGER.error(f"language {lang} did not parse, default to english")
+ return "en"
if lang == "static":
# Static resource, not a language indicator.
# Do not localize then.
diff --git a/talermerchantdemos/landing/landing.py b/talermerchantdemos/landing/landing.py
index b5142d6..23d11e8 100644
--- a/talermerchantdemos/landing/landing.py
+++ b/talermerchantdemos/landing/landing.py
@@ -23,6 +23,7 @@ import base64
import logging
import flask
import uwsgi
+import werkzeug
from flask import request, url_for
from flask_babel import Babel
from flask_babel import refresh
@@ -128,6 +129,12 @@ def index():
@app.route("/<lang>/", methods=["GET"])
def start(lang):
+ # get_locale defaults to english, hence the
+ # condition below happens only when lang is
+ # wrong or unsupported, respond 404.
+ if lang != get_locale():
+ raise werkzeug.exceptions.NotFound()
+
if x := os.environ.get("TALER_ENV_URL_BANK"):
bank_url = "/".join([x.strip("/"), f"?lang={lang}"])
bank_register_url = bank_url
@@ -162,7 +169,8 @@ def start(lang):
)
-@app.errorhandler(404)
+@app.errorhandler(404) # How to trigger this?
+@app.errorhandler(werkzeug.exceptions.NotFound)
def handler_404(e):
return flask.render_template(
"landing-error.html.j2",
diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py
index fbdbf25..1f0fffb 100644
--- a/talermerchantdemos/survey/survey.py
+++ b/talermerchantdemos/survey/survey.py
@@ -22,6 +22,7 @@ import datetime
import base64
import uwsgi
import logging
+import werkzeug
from urllib.parse import urljoin
import flask
from flask import request
@@ -159,6 +160,13 @@ def index():
@app.route("/<lang>/", methods=["GET"])
def start(lang):
LOGGER.info("Serving main page. Currency: {}".format(CURRENCY))
+
+ # get_locale defaults to english, hence the
+ # condition below happens only when lang is
+ # wrong or unsupported, respond 404.
+ if lang != get_locale():
+ raise werkzeug.exceptions.NotFound()
+
return flask.render_template(
"survey-index.html.j2",
page_title=gettext("GNU Taler Demo: Survey"),
@@ -167,6 +175,7 @@ def start(lang):
@app.errorhandler(404)
+@app.errorhandler(werkzeug.exceptions.NotFound)
def handler_404(e):
return flask.render_template(
"survey-error.html.j2",