gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-taler-mdb] 49/93: intermediary commit


From: gnunet
Subject: [taler-taler-mdb] 49/93: intermediary commit
Date: Mon, 18 Nov 2019 21:13:12 +0100

This is an automated email from the git hooks/post-receive script.

marco-boss pushed a commit to branch master
in repository taler-mdb.

commit a00c467cb8d170ce49ffb9011ff79d8f817147c5
Author: Christian Grothoff <address@hidden>
AuthorDate: Mon Nov 11 22:59:01 2019 +0100

    intermediary commit
---
 src/Makefile.am |  1 +
 src/main.c      | 55 +++++++++++++++++++++++++++++--------------------------
 2 files changed, 30 insertions(+), 26 deletions(-)

diff --git a/src/Makefile.am b/src/Makefile.am
index 2feee4f..9eca344 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -10,6 +10,7 @@ taler_nfc_SOURCES = \
   main.c
 taler_nfc_LDADD = \
   -ltalermerchant \
+  -ltalerjson \
   -ltalerutil \
   -lgnunetcurl \
   -lgnunetutil \
diff --git a/src/main.c b/src/main.c
index a34353b..abf291c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -42,7 +42,9 @@ along with
 #include <errno.h>
 #include <termios.h>
 #include <nfc/nfc.h>
+#include <microhttpd.h>
 #include <gnunet/gnunet_util_lib.h>
+#include <taler/taler_json_lib.h>
 #include <taler/taler_merchant_service.h>
 
 /**
@@ -72,12 +74,6 @@ along with
  */
 #define APDU_NOT_FOUND "\x6a\x82"
 
-/* json order request keys */
-#define SNACK_JSON_REQ_ORDER "order"
-#define SNACK_JSON_REQ_SUMMARY "summary"
-#define SNACK_JSON_REQ_AMOUNT "amount"
-#define SNACK_JSON_REQ_FULFILLMENT "fulfillment_url"
-
 /* curl auth header */
 #define SNACK_CURL_AUTH_HEADER "Authorization"
 
@@ -89,13 +85,15 @@ static const uint8_t taler_aid[] = { 0xF0, 0x00, 0x54, 
0x41, 0x4c, 0x45, 0x52 };
 static const uint8_t select_file[] = { 0x00, 0xA4, 0x04, 0x00, 0x07 };
 static const uint8_t put_data[] = { 0x00, 0xDA, 0x01, 0x00, 0x7c, 0x01 };
 
+#if FUTURE_FEATURES
 /* tunneling */
 static const uint8_t get_data[] = { 0x00, 0xCA, 0x01, 0x00, 0x00, 0x00 };
+#endif
 
 
 struct Product
 {
-  const char *price;
+  struct TALER_Amount price;
   const char *description;
   char key;
 };
@@ -152,17 +150,17 @@ static struct PaymentActivity *payment_activity;
  */
 static struct Product products[] = {
   {
-    .price = "0.1",
+    //    .price = "0.1",
     .description = "Snickers",
     .key = 's'
   },
   {
-    .price = "0.1",
+    // .price = "0.1",
     .description = "Twix",
     .key = 't'
   },
   {
-    .price = NULL,
+    // .price = NULL,
     .description = NULL,
     .key = '\0'
   }
@@ -670,26 +668,31 @@ launch_payment (const struct Product *product)
 {
   struct PaymentActivity *pa;
   json_t *orderReq;
-  char *amountStr;
   char *fulflmntUrl;
-
-  /* create the string representing the amount, e.g. "KUDOS:2.5" */
-  GNUNET_asprintf (&amountStr,
-                   "%s:%s",
-                   currency,
-                   product->price);
+  struct GNUNET_ShortHashCode uuid;
+  char *uuid_s;
+
+  /* We need to ensure that every fulfillment URL is unique;
+     most easily done by adding a random nonce, as we may
+     not have a reliable counter or clock on the machine */
+  GNUNET_CRYPTO_random_block (GNUNET_CRYPTO_QUALITY_NONCE,
+                              &uuid,
+                              sizeof (uuid));
+  uuid_s = GNUNET_STRINGS_data_to_string_alloc (&uuid,
+                                                sizeof (uuid));
   /* create the fulfillment url, e.g. 
"taler://fulfillment-success/Enjoy+your+ice+cream!"; */
   GNUNET_asprintf (&fulflmntUrl,
-                   "%s%s%s!",
+                   "%s%s%s#%s",
                    fulfillmentUrl,
                    fulfillmentMsg,
-                   product->description);
+                   product->description,
+                   uuid_s);
+  GNUNET_free (uuid_s);
   /* create the json object for the order request */
   orderReq = json_pack ("{ s:s, s:s, s:s }",
-                        SNACK_JSON_REQ_SUMMARY, product->description,
-                        SNACK_JSON_REQ_AMOUNT, amountStr,
-                        SNACK_JSON_REQ_FULFILLMENT, fulflmntUrl);
-  GNUNET_free (amountStr);
+                        "summary", product->description,
+                        "amount", TALER_JSON_from_amount (&product->price),
+                        "fulfillment_url", fulflmntUrl);
   GNUNET_free (fulflmntUrl);
   if (NULL == orderReq)
   {
@@ -755,7 +758,7 @@ read_keyboard_command (void *cls)
     start_read_keyboard ();
     return;
   }
-  for (unsigned int i = 0; NULL != products[i].price; i++)
+  for (unsigned int i = 0; NULL != products[i].description; i++)
     if (((char) input) == products[i].key)
     {
       payment_activity = launch_payment (&products[i]);
@@ -775,7 +778,7 @@ start_read_keyboard ()
   struct GNUNET_DISK_FileHandle fh = { STDIN_FILENO };
 
   GNUNET_assert (NULL == keyboard_task);
-  for (unsigned int i = 0; NULL != products[i].price; i++)
+  for (unsigned int i = 0; NULL != products[i].description; i++)
     printf ("'%c' to buy %s\n",
             products[i].key,
             products[i].description);
@@ -838,7 +841,7 @@ run (void *cls,
     }
     GNUNET_asprintf (&authorization,
                      "%s: %s",
-                     SNACK_CURL_AUTH_HEADER,
+                     MHD_HTTP_HEADER_AUTHORIZATION,
                      auth);
     GNUNET_free (auth);
   }

-- 
To stop receiving notification emails like this one, please contact
address@hidden.



reply via email to

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