From 03d8657d530be561b321fd93d586f188cb61384b Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Fri, 29 Nov 2019 23:57:51 +0100 Subject: propper handling of URIs --- src/lib/sync_api_upload.c | 10 +++++++++ src/lib/test_sync_api.c | 13 ++++++++++++ src/lib/test_sync_api.conf | 6 ++++++ src/lib/testing_api_cmd_backup_upload.c | 37 ++++++++++++++++++++++++++++++++- src/sync/sync-httpd_backup_post.c | 6 ++---- 5 files changed, 67 insertions(+), 5 deletions(-) diff --git a/src/lib/sync_api_upload.c b/src/lib/sync_api_upload.c index 33ff381..31a7d08 100644 --- a/src/lib/sync_api_upload.c +++ b/src/lib/sync_api_upload.c @@ -219,8 +219,18 @@ handle_header (char *buffer, if (0 == strcasecmp (hdr_type, "Taler")) { + size_t len; + /* found payment URI we care about! */ uo->pay_uri = GNUNET_strdup (hdr_val); + len = strlen (uo->pay_uri); + while ( (len > 0) && + ( ('\n' == uo->pay_uri[len - 1]) || + ('\r' == uo->pay_uri[len - 1]) ) ) + { + len--; + uo->pay_uri[len] = '\0'; + } } GNUNET_free (ndup); return total; diff --git a/src/lib/test_sync_api.c b/src/lib/test_sync_api.c index 6f6ac77..fbbe0b1 100644 --- a/src/lib/test_sync_api.c +++ b/src/lib/test_sync_api.c @@ -249,6 +249,19 @@ run (void *cls, MHD_HTTP_PAYMENT_REQUIRED, "Test-1", strlen ("Test-1")), + TALER_TESTING_cmd_proposal_lookup ("fetch-proposal", + merchant_url, + MHD_HTTP_OK, + "backup-upload-1", + NULL), + TALER_TESTING_cmd_pay ("pay-account", + merchant_url, + MHD_HTTP_OK, + "fetch-proposal", + "withdraw-coin-1", + "EUR:5", + "EUR:4.99", /* must match ANNUAL_FEE in config! */ + "EUR:0.01"), TALER_TESTING_cmd_end () }; diff --git a/src/lib/test_sync_api.conf b/src/lib/test_sync_api.conf index c767b72..eb9d7ca 100644 --- a/src/lib/test_sync_api.conf +++ b/src/lib/test_sync_api.conf @@ -18,6 +18,12 @@ PORT = 8084 # Where does our payment backend run? Must match PORT under [merchant] PAYMENT_BACKEND_URL = http://localhost:8080/ +# Annual fee we charge. +ANNUAL_FEE = EUR:4.99 + +# Upload limit +UPLOAD_LIMIT_MB = 1 + [syncdb-postgres] CONFIG = postgres:///synccheck diff --git a/src/lib/testing_api_cmd_backup_upload.c b/src/lib/testing_api_cmd_backup_upload.c index 02d66fb..6ed228a 100644 --- a/src/lib/testing_api_cmd_backup_upload.c +++ b/src/lib/testing_api_cmd_backup_upload.c @@ -151,7 +151,42 @@ backup_upload_cb (void *cls, } break; case SYNC_US_PAYMENT_REQUIRED: - bus->payment_order_id = GNUNET_strdup (ud->details.payment_request); + { + const char *m; + + if (0 != strncmp (ud->details.payment_request, + "taler://pay/http", + strlen ("taler://pay/http"))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Did not find `%s' in `%s'\n", + "/-/-/", + ud->details.payment_request); + TALER_TESTING_interpreter_fail (bus->is); + return; + } + m = strstr (ud->details.payment_request, "/-/-/"); + if (NULL == m) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Did not find `%s' in `%s'\n", + "/-/-/", + ud->details.payment_request); + TALER_TESTING_interpreter_fail (bus->is); + /* NOTE: The above is a simplifying assumption for the + test-logic, hitting this code merely means that + the assumptions for the test (i.e. no instance) are + not satisfied, it is not inherently the case that + the above token must appear in the payment request! + + So if you hit this, you might just want to modify + the code here to handle this better! */return; + } + bus->payment_order_id = GNUNET_strdup (&m[strlen ("/-/-/")]); + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Order ID from Sync service is `%s'\n", + bus->payment_order_id); + } break; case SYNC_US_CONFLICTING_BACKUP: { diff --git a/src/sync/sync-httpd_backup_post.c b/src/sync/sync-httpd_backup_post.c index 8137910..6562b0e 100644 --- a/src/sync/sync-httpd_backup_post.c +++ b/src/sync/sync-httpd_backup_post.c @@ -290,12 +290,11 @@ proposal_cb (void *cls, "backend-http-status", (json_int_t) http_status); GNUNET_assert (NULL != bc->resp); - fprintf (stderr, "SET: %p - %p\n", bc, (NULL != bc) ? bc->resp : NULL); bc->response_code = MHD_HTTP_INTERNAL_SERVER_ERROR; return; } - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Storing payment request for order %s\n", + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "Storing payment request for order `%s'\n", order_id); qs = db->store_payment_TR (db->cls, &bc->account, @@ -609,7 +608,6 @@ sync_handler_backup_post (struct MHD_Connection *connection, struct BackupContext *bc; bc = *con_cls; - fprintf (stderr, "%p - %p\n", bc, (NULL != bc) ? bc->resp : NULL); if (NULL == bc) { /* first call, setup internals */ -- cgit v1.2.3