summaryrefslogtreecommitdiff
path: root/talermerchantdemos/survey/survey.py
diff options
context:
space:
mode:
Diffstat (limited to 'talermerchantdemos/survey/survey.py')
-rw-r--r--talermerchantdemos/survey/survey.py225
1 files changed, 0 insertions, 225 deletions
diff --git a/talermerchantdemos/survey/survey.py b/talermerchantdemos/survey/survey.py
deleted file mode 100644
index 1f0fffb..0000000
--- a/talermerchantdemos/survey/survey.py
+++ /dev/null
@@ -1,225 +0,0 @@
-##
-# This file is part of GNU TALER.
-# Copyright (C) 2017, 2020 Taler Systems SA
-#
-# TALER is free software; you can redistribute it and/or modify it under the
-# terms of the GNU Lesser General Public License as published by the Free Software
-# Foundation; either version 2.1, or (at your option) any later version.
-#
-# TALER 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 Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public License along with
-# GNU TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
-#
-# @author Marcello Stanisci
-# @brief Minimal Website to tip users who fill the survey.
-
-import os
-import re
-import datetime
-import base64
-import uwsgi
-import logging
-import werkzeug
-from urllib.parse import urljoin
-import flask
-from flask import request
-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 traceback
-from taler.util.talerconfig import TalerConfig, ConfigurationError
-from ..httpcommon import (
- backend_get,
- backend_post,
- self_localized,
- BackendException,
- make_utility_processor,
- get_locale,
-)
-import sys
-
-if not sys.version_info.major == 3 and sys.version_info.minor >= 6:
- print("Python 3.6 or higher is required.")
- print(
- "You are using Python {}.{}.".format(
- sys.version_info.major, sys.version_info.minor
- )
- )
- sys.exit(1)
-
-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")
-
-logging.basicConfig()
-LOGGER = logging.getLogger(__name__)
-LOGGER.setLevel(logging.DEBUG)
-try:
- BACKEND_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)
-
-BABEL_TRANSLATION_DIRECTORIES = "../translations"
-
-app.config.from_object(__name__)
-babel = Babel(app)
-babel.localeselector(get_locale)
-
-INSTANCED_URL = urljoin(BACKEND_URL, f"instances/survey/")
-LOGGER.info("bankend URL: {url}, currency: {c}, apikey: {key}".format(
- url=BACKEND_URL, c=CURRENCY, key=APIKEY
-))
-LOGGER.info("Using translations from:" + ":".join(list(babel.translation_directories)))
-translations = [str(translation) for translation in babel.list_translations()]
-if not "en" in translations:
- translations.append("en")
-LOGGER.info(
- "Operating with the following translations available: " + " ".join(translations)
-)
-
-app.add_template_global(self_localized)
-
-
-# Add context processor that will make additional variables
-# and functions available in the template.
-app.context_processor(make_utility_processor("survey", os.environ.get ("TALER_ENV_URL_MERCHANT_SURVEY")))
-
-
-##
-# Exception handler to capture all the unmanaged errors.
-#
-# @param e the Exception object, currently unused.
-# @return flask-native response object carrying the error message
-# (and execution stack!).
-@app.errorhandler(Exception)
-def internal_error(e):
- return flask.render_template("survey-error.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message=str(e)
- )
-
-##
-# Serve the /favicon.ico requests.
-#
-# @return the favicon.ico file.
-@app.route("/favicon.ico")
-def favicon():
- LOGGER.info("will look into: " + os.path.join(app.root_path, "static"))
- return flask.send_from_directory(
- os.path.join(app.root_path, "static"),
- "favicon.ico",
- mimetype="image/vnd.microsoft.ico",
- )
-
-
-##
-# Tell the backend to 'authorize' a tip; this means that
-# the backend will allocate a certain amount to be later
-# picked up by the wallet.
-#
-# @return the URL where to redirect the browser, in order
-# for the wallet to pick the tip up, or a error page
-# otherwise.
-@app.route("/<lang>/submit-survey", methods=["POST"])
-def submit_survey(lang):
- tip_spec = dict(
- amount=CURRENCY + ":1.0",
- next_url=os.environ.get("TALER_ENV_URL_INTRO", "https://taler.net/"),
- justification="Payment methods survey",
- )
- backend_resp = backend_post(
- INSTANCED_URL, "private/tips", tip_spec, auth_token=APIKEY
- )
- return flask.redirect(backend_resp["tip_status_url"])
-
-
-##
-# Serve the main index page, redirecting to /<lang>/
-#
-# @return response object of the index page.
-@app.route("/")
-def index():
- default = "en"
- target = flask.request.accept_languages.best_match(translations, default)
- return flask.redirect(target + "/", code=302)
-
-
-##
-# Serve the internationalized main index page.
-#
-# @return response object of the index page.
-@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"),
- merchant_currency=CURRENCY,
- )
-
-
-@app.errorhandler(404)
-@app.errorhandler(werkzeug.exceptions.NotFound)
-def handler_404(e):
- return flask.render_template(
- "survey-error.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message=gettext("Page not found"),
- )
-
-
-@app.errorhandler(405)
-def handler_405(e):
- return flask.render_template(
- "survey-error.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message=gettext("HTTP method not allowed for this page"),
- )
-
-
-@app.errorhandler(BackendException)
-def handler_backend_exception(e):
-
- # The tip reserve was never created
- if e.backend_json.get("code") == 2753:
- t = flask.render_template(
- "survey-error-graceful.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message="Tip money were never invested, we are sorry!"
- )
- return flask.make_response(t, 500)
-
- # The tip reserve was never created
- if e.backend_json.get("code") == 2752:
- t = flask.render_template(
- "survey-error-graceful.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message="Tip money got all given, please return later!"
- )
- return flask.make_response(t, 500)
-
-
- t = flask.render_template(
- "survey-error.html.j2",
- page_title=gettext("GNU Taler Demo: Error"),
- message=e.args[0],
- json=e.backend_json,
- status_code=e.backend_status,
- )
- return flask.make_response(t, 500)