gnunet-svn
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]