[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [taler-merchant-frontend-examples] branch master updated: C
From: |
gnunet |
Subject: |
[GNUnet-SVN] [taler-merchant-frontend-examples] branch master updated: Completing tutorial code. |
Date: |
Tue, 21 Feb 2017 16:35:46 +0100 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a commit to branch master
in repository merchant-frontend-examples.
The following commit(s) were added to refs/heads/master by this push:
new 31f311e Completing tutorial code.
31f311e is described below
commit 31f311e2813e9f20f36c2710d5f3a343685b8235
Author: Marcello Stanisci <address@hidden>
AuthorDate: Tue Feb 21 16:35:39 2017 +0100
Completing tutorial code.
---
Python/lib/Makefile | 4 +-
.../lib/pytaler/__pycache__/amounts.cpython-35.pyc | Bin 1712 -> 0 bytes
Python/tutorial/tutorial.py | 80 +++++++++++++++++----
3 files changed, 67 insertions(+), 17 deletions(-)
diff --git a/Python/lib/Makefile b/Python/lib/Makefile
index a4740f6..26cdbc4 100644
--- a/Python/lib/Makefile
+++ b/Python/lib/Makefile
@@ -1,6 +1,4 @@
-# TALER_PREFIX must point to 'site-packages' dir.
-
-all:
+install:
pip3 install . --install-option="--prefix=$(TALER_PREFIX)"
check:
diff --git a/Python/lib/pytaler/__pycache__/amounts.cpython-35.pyc
b/Python/lib/pytaler/__pycache__/amounts.cpython-35.pyc
deleted file mode 100644
index 5f665fb..0000000
Binary files a/Python/lib/pytaler/__pycache__/amounts.cpython-35.pyc and
/dev/null differ
diff --git a/Python/tutorial/tutorial.py b/Python/tutorial/tutorial.py
index 4238fd1..9fa7575 100644
--- a/Python/tutorial/tutorial.py
+++ b/Python/tutorial/tutorial.py
@@ -1,41 +1,61 @@
import flask
-from urllib.parse import urljoin
+import requests
+from urllib.parse import urljoin, urlencode
from pytaler import amounts
+import base64
+import os
app = flask.Flask(__name__)
-
-CURRENCY = "KUDOS"
+app.secret_key = base64.b64encode(os.urandom(64)).decode('utf-8')
+CURRENCY = "PUDOS"
BACKEND_URL = "http://backend.test.taler.net/"
address@hidden('/')
+def make_url(page, *query_params):
+ """
+ Return a URL to a page in the current Flask application with the given
+ query parameters (sequence of key/value pairs).
+ """
+ query = urlencode(query_params)
+ if page.startswith("/"):
+ root = flask.request.url_root
+ page = page.lstrip("/")
+ else:
+ root = flask.request.base_url
+ url = urljoin(root, "%s?%s" % (page, query))
+ # urlencode is overly eager with quoting, the wallet right now
+ # needs some characters unquoted.
+ return url.replace("%24", "$").replace("%7B", "{").replace("%7D", "}")
+
address@hidden("/")
def index():
- return flask.render_template('index.html')
+ return flask.render_template("index.html")
address@hidden('/donate')
address@hidden("/donate")
def donate():
resp = flask.Response(status=402)
- resp.headers['X-Taler-Contract-Url'] = '/generate-contract'
+ resp.headers["X-Taler-Contract-Url"] = "/generate-contract"
return resp
address@hidden('/generate-contract')
address@hidden("/generate-contract")
def generate_contract():
-
+ DONATION = amounts.string_to_amount("0.1:%s" % CURRENCY)
+ MAX_FEE = amounts.string_to_amount("0.05:%s" % CURRENCY)
order = dict(
nonce=flask.request.args.get("nonce"),
- amount=amounts.string_to_amount("1.0:%s" % CURRENCY),
- max_fee=amounts.string_to_amount("1.0:%s" % CURRENCY),
+ amount=DONATION,
+ max_fee=MAX_FEE,
products=[
dict(
description="Donation",
quantity=1,
product_id=0,
- price=amount,
+ price=DONATION,
),
],
- fulfillment_url=make_url("/fulfillment/"),
+ fulfillment_url=make_url("/fulfillment"),
merchant=dict(
address="nowhere",
name="Donation tutorial",
@@ -43,7 +63,7 @@ def generate_contract():
),
)
- url = urljoin(BACKEND_URL, 'proposal')
+ url = urljoin(BACKEND_URL, "proposal")
r = requests.post(url, json=dict(order=order))
if r.status_code != 200:
@@ -51,3 +71,35 @@ def generate_contract():
return r.status_code, r.text
proposal_resp = r.json()
return flask.jsonify(**proposal_resp)
+
+
address@hidden("/fulfillment")
+def fulfillment():
+ paid = flask.session.get("paid", False)
+ if paid:
+ return "Thank you!"
+
+ response = flask.Response(status=402)
+ response.headers["X-Taler-Contract-Url"] = make_url("/generate-contract")
+ response.headers["X-Taler-Contract-Query"] = "fulfillment_url"
+ response.headers["X-Taler-Pay-Url"] = make_url("/pay")
+ response.headers["X-Taler-Offer-Url"] = make_url("/donate")
+
+ return response
+
+
address@hidden("/pay", methods=["POST"])
+def pay():
+ deposit_permission = flask.request.get_json()
+ if deposit_permission is None:
+ e = flask.jsonify(error="no json in body")
+ return e, 400
+
+ r = requests.post(urljoin(BACKEND_URL, 'pay'), json=deposit_permission)
+ if 200 != r.status_code:
+ return r.text, r.status_code
+
+ flask.session["paid"] = True
+
+ return flask.Response(status=200)
+
--
To stop receiving notification emails like this one, please contact
address@hidden
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] [taler-merchant-frontend-examples] branch master updated: Completing tutorial code.,
gnunet <=