summaryrefslogtreecommitdiff
path: root/talerdonations/donations
diff options
context:
space:
mode:
Diffstat (limited to 'talerdonations/donations')
-rw-r--r--talerdonations/donations/donations.py33
1 files changed, 16 insertions, 17 deletions
diff --git a/talerdonations/donations/donations.py b/talerdonations/donations/donations.py
index 9fd28c1..22511c8 100644
--- a/talerdonations/donations/donations.py
+++ b/talerdonations/donations/donations.py
@@ -41,7 +41,7 @@ app.debug = True
app.secret_key = base64.b64encode(os.urandom(64)).decode('utf-8')
TC = TalerConfig.from_env()
-BACKEND_URL = TC["frontends"]["backend"].value_string(required=True)
+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)
@@ -78,11 +78,12 @@ def err_abort(abort_status_code, **params):
# @param params (dict type of) URL parameters to append to the request.
# @return the JSON response from the backend, or a error response
# if something unexpected happens.
-def backend_get(endpoint, params):
+def backend_instanced_get(instance, endpoint, params):
+ backend_url = urljoin(BACKEND_BASE_URL, f"instances/{instance}/")
headers = {"Authorization": "ApiKey " + APIKEY}
try:
resp = requests.get(
- urljoin(BACKEND_URL, endpoint), params=params, headers=headers
+ urljoin(backend_url, endpoint), params=params, headers=headers
)
except requests.ConnectionError:
err_abort(500, message="Could not establish connection to backend")
@@ -108,14 +109,14 @@ def backend_get(endpoint, params):
# this request.
# @param json the POST's body.
# @return the backend response (JSON format).
-def backend_post(endpoint, json):
- headers = {"Authorization": "ApiKey " + APIKEY}
+def backend_instanced_post(instance, endpoint, json):
+ backend_url = urljoin(BACKEND_BASE_URL, f"instances/{instance}/")
try:
resp = requests.post(
- urljoin(BACKEND_URL, endpoint), json=json, headers=headers
+ urljoin(backend_url, endpoint), json=json, headers=headers
)
except requests.ConnectionError:
- err_abort(500, message="Could not establish connection to backend")
+ err_abort(500, message=f"Could not establish connection to backend (url={url})")
try:
response_json = resp.json()
except ValueError:
@@ -237,10 +238,9 @@ def donate():
amount=donation_amount
),
fulfillment_url=fulfillment_url,
- instance=donation_receiver,
summary="Donation to {}".format(donation_receiver),
)
- order_resp = backend_post("order", dict(order=order))
+ order_resp = backend_instanced_post(donation_receiver, "order", dict(order=order))
order_id = order_resp["order_id"]
return flask.redirect(
flask.url_for(
@@ -252,10 +252,10 @@ def donate():
##
# This endpoint is used by the payment request page
# to check if the payment has been completed via the QR code.
-@app.route("/check-status/<order_id>")
-def check_status(order_id, session_id):
- pay_params = dict(instance=INSTANCE, order_id=order_id)
- pay_status = backend_get("check-payment", pay_params)
+@app.route("/check-status/<instance>/<order_id>")
+def check_status(instance, order_id):
+ pay_params = dict(order_id=order_id)
+ pay_status = backend_instanced_get(instance, "check-payment", pay_params)
return flask.jsonify(paid=pay_status["paid"])
@@ -276,9 +276,8 @@ def get_qrcode_svg(data):
@app.route("/donation/<receiver>")
def fulfillment(receiver):
order_id = expect_parameter("order_id")
- pay_params = dict(instance=receiver, order_id=order_id)
- pay_status = backend_get("check-payment", pay_params)
-
+ pay_params = dict(order_id=order_id)
+ pay_status = backend_instanced_get(receiver, "check-payment", pay_params)
if pay_status.get("paid"):
extra = pay_status["contract_terms"]["extra"]
@@ -294,7 +293,7 @@ def fulfillment(receiver):
taler_pay_uri = pay_status["taler_pay_uri"]
qrcode_svg = get_qrcode_svg(taler_pay_uri)
check_status_url_enc = urllib.parse.quote(
- flask.url_for("check_status", order_id=order_id)
+ flask.url_for("check_status", instance=receiver, order_id=order_id)
)
content = flask.render_template(
"templates/request_payment.html",