diff options
Diffstat (limited to 'talermerchantdemos/donations')
-rw-r--r-- | talermerchantdemos/donations/donations.py | 58 |
1 files changed, 44 insertions, 14 deletions
diff --git a/talermerchantdemos/donations/donations.py b/talermerchantdemos/donations/donations.py index 01e8f12..1a95f45 100644 --- a/talermerchantdemos/donations/donations.py +++ b/talermerchantdemos/donations/donations.py @@ -20,16 +20,18 @@ import base64 import logging import flask -from flask import request +import uwsgi +from flask import request, url_for from flask_babel import Babel from flask_babel import refresh from flask_babel import force_locale from flask_babel import gettext +from werkzeug.middleware.proxy_fix import ProxyFix import os import time import traceback import urllib -from taler.util.talerconfig import TalerConfig, ConfigurationError +from ..util.talerconfig import TalerConfig, ConfigurationError from urllib.parse import urljoin from ..httpcommon import backend_post, backend_get, make_utility_processor, get_locale import sys @@ -43,19 +45,20 @@ if not sys.version_info.major == 3 and sys.version_info.minor >= 6: ) sys.exit(1) +logging.basicConfig() LOGGER = logging.getLogger(__name__) BASE_DIR = os.path.dirname(os.path.abspath(__file__)) app = flask.Flask(__name__, template_folder="../templates", static_folder="../static") +app.wsgi_app = ProxyFix(app.wsgi_app, x_host=1, x_prefix=1) app.debug = True app.secret_key = base64.b64encode(os.urandom(64)).decode("utf-8") -TC = TalerConfig.from_env() try: - BACKEND_BASE_URL = TC["frontends"]["backend"].value_string(required=True) - CURRENCY = TC["taler"]["currency"].value_string(required=True) - APIKEY = TC["frontends"]["backend_apikey"].value_string(required=True) + BACKEND_BASE_URL = uwsgi.opt["backend_url"].decode("utf-8") + CURRENCY = uwsgi.opt["currency"].decode("utf-8") + APIKEY = uwsgi.opt["apikey"].decode("utf-8") except ConfigurationError as ce: print(ce) exit(1) @@ -68,6 +71,8 @@ babel.localeselector(get_locale) LOGGER.info("Using translations from:" + ":".join(list(babel.translation_directories))) +LOGGER.info("backend: " + BACKEND_BASE_URL) +LOGGER.info("currency: " + CURRENCY) translations = [str(translation) for translation in babel.list_translations()] if not "en" in translations: translations.append("en") @@ -77,7 +82,7 @@ LOGGER.info( # Add context processor that will make additional variables # and functions available in the template. -app.context_processor(make_utility_processor("donations")) +app.context_processor(make_utility_processor("donations", os.environ.get ("TALER_ENV_URL_MERCHANT_DONATIONS"))) ## # Return a error response to the client. @@ -134,7 +139,10 @@ def expect_parameter(name): # (and execution stack!). @app.errorhandler(Exception) def internal_error(e): - return flask.render_template("donations-error.html.j2", message=str(e)) + return flask.render_template( + "donations-error.html.j2", + page_title=gettext("GNU Taler Demo: Error"), + message=str(e)) ## # Serve the /favicon.ico requests. @@ -158,7 +166,7 @@ def favicon(): def index(): default = "en" target = flask.request.accept_languages.best_match(translations, default) - return flask.redirect("/" + target + "/", code=302) + return flask.redirect(url_for ('index') + target + "/", code=302) ## @@ -167,7 +175,21 @@ def index(): # @return response object of the index page. @app.route("/<lang>/") def start(lang): - return flask.render_template("donations-index.html.j2", merchant_currency=CURRENCY) + + # 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"), + merchant_currency=CURRENCY + ) ## @@ -183,6 +205,7 @@ def checkout(lang): donation_donor = expect_parameter("donation_donor") return flask.render_template( "donations-checkout.html.j2", + page_title=gettext("GNU Taler Demo: Donations checkout"), donation_amount=amount, donation_receiver=donation_receiver, donation_donor=donation_donor, @@ -197,7 +220,10 @@ def checkout(lang): # @return response object about the mentioned impossibility. @app.route("/<lang>/provider-not-supported") def provider_not_supported(lang): - return flask.render_template("donations-provider-not-supported.html.j2") + return flask.render_template( + "donations-provider-not-supported.html.j2", + page_title=gettext("GNU Taler Demo: Donations"), +) ## @@ -214,7 +240,7 @@ def donate(lang): donation_donor = expect_parameter("donation_donor") payment_system = expect_parameter("payment_system") if payment_system != "taler": - return flask.redirect(flask.url_for("provider_not_supported")) + return flask.redirect(flask.url_for("provider_not_supported", lang=lang)) fulfillment_url = flask.url_for( "fulfillment", timestamp=str(time.time()), @@ -230,7 +256,8 @@ def donate(lang): ), fulfillment_url=fulfillment_url, summary="Donation to {}".format(donation_receiver), - wire_transfer_deadline=dict(t_ms=1000 * int(time.time() + 15 * 30)), + wire_transfer_deadline=dict(t_s=int(time.time() + 10)), + minimum_age = 16 ) order_resp = backend_instanced_post( donation_receiver, "private/orders", dict(order=order) @@ -269,6 +296,7 @@ def fulfillment(lang, receiver): extra = pay_status["contract_terms"]["extra"] return flask.render_template( "donations-fulfillment.html.j2", + page_title=gettext("GNU Taler Demo: Donations"), donation_receiver=extra["receiver"], donation_amount=extra["amount"], donation_donor=extra["donor"], @@ -281,5 +309,7 @@ def fulfillment(lang, receiver): @app.errorhandler(404) def handler(e): return flask.render_template( - "donations-error.html.j2", message=gettext("Page not found") + "donations-error.html.j2", + page_title=gettext("GNU Taler Demo: Error"), + message=gettext("Page not found") ) |