merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

commit 05a51df2d74ca1b56c570bc5629985d21674d184
parent 0630424c03d64eeee1f9c59ded39f31ac7ad6df2
Author: Bohdan Potuzhnyi <potub1@bfh.ch>
Date:   Sat,  5 Oct 2024 20:05:54 +0000

update of the donau functions and make files

Diffstat:
Msrc/backenddb/Makefile.am | 5+++++
Msrc/backenddb/merchant-0012.sql | 1+
Msrc/backenddb/pg_delete_donau_instance.c | 3+--
Msrc/backenddb/pg_insert_donau_instance.c | 12+++++++-----
Msrc/backenddb/pg_insert_donau_instance.h | 2++
Msrc/backenddb/pg_lookup_donau_keys.c | 1+
Msrc/backenddb/pg_lookup_donau_keys.h | 1+
Msrc/backenddb/pg_select_donau_instance.c | 6+++---
Msrc/backenddb/pg_select_donau_instance.h | 17++---------------
Msrc/backenddb/pg_upsert_donau_keys.c | 4+++-
Msrc/backenddb/pg_upsert_donau_keys.h | 3++-
Msrc/backenddb/plugin_merchantdb_postgres.c | 22++++++++++++++++++++++
Msrc/include/Makefile.am | 5+++++
Msrc/include/taler_merchant_donau.h | 15+++++++++++++++
Msrc/include/taler_merchantdb_plugin.h | 40++++++++++++++++++++++++++++++++++++++++
15 files changed, 110 insertions(+), 27 deletions(-)

diff --git a/src/backenddb/Makefile.am b/src/backenddb/Makefile.am @@ -195,6 +195,11 @@ libtaler_plugin_merchantdb_postgres_la_SOURCES = \ pg_insert_spent_token.h pg_insert_spent_token.c \ pg_insert_issued_token.h pg_insert_issued_token.c \ pg_lookup_spent_tokens_by_order.h pg_lookup_spent_tokens_by_order.c \ + pg_lookup_donau_keys.h pg_lookup_donau_keys.c \ + pg_upsert_donau_keys.h pg_upsert_donau_keys.c \ + pg_insert_donau_instance.h pg_insert_donau_instance.c \ + pg_select_donau_instance.h pg_select_donau_instance.c \ + pg_delete_donau_instance.h pg_delete_donau_instance.c \ plugin_merchantdb_postgres.c \ pg_helper.h pg_helper.c libtaler_plugin_merchantdb_postgres_la_LIBADD = \ diff --git a/src/backenddb/merchant-0012.sql b/src/backenddb/merchant-0012.sql @@ -44,6 +44,7 @@ COMMENT ON COLUMN merchant_donau_keys.keys_json CREATE TABLE IF NOT EXISTS merchant_donau_instances (donau_instances_serial BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY ,donau_url TEXT NOT NULL + ,charity_name TEXT NOT NULL ,charity_pub_key BYTEA CHECK (LENGTH(charity_pub_key)=32) ,charity_id BIGINT NOT NULL ,charity_max_per_year taler_amount_currency NOT NULL diff --git a/src/backenddb/pg_delete_donau_instance.c b/src/backenddb/pg_delete_donau_instance.c @@ -33,7 +33,7 @@ TMH_PG_delete_donau_instance ( { struct PostgresClosure *pg = cls; struct GNUNET_PQ_QueryParam params[] = { - GNUNET_PQ_query_param_uint64 (charity_id), + GNUNET_PQ_query_param_uint64 (&charity_id), GNUNET_PQ_query_param_end }; @@ -41,7 +41,6 @@ TMH_PG_delete_donau_instance ( PREPARE (pg, "delete_donau_instance", "DELETE FROM donau_instance WHERE charity_id = $1"); - " WHERE charity_id = $1;"); return GNUNET_PQ_eval_prepared_non_select (pg->conn, "delete_donau_instance", params); diff --git a/src/backenddb/pg_insert_donau_instance.c b/src/backenddb/pg_insert_donau_instance.c @@ -23,33 +23,35 @@ #include <taler/taler_error_codes.h> #include <taler/taler_dbevents.h> #include <taler/taler_pq_lib.h> +#include "donau/donau_service.h" #include "pg_insert_donau_instance.h" #include "pg_helper.h" enum GNUNET_DB_QueryStatus TMH_PG_insert_donau_instance ( void *cls, + const char *donau_url, const struct DONAU_Charity *charity, const uint64_t charity_id ) { struct PostgresClosure *pg = cls; struct GNUNET_PQ_QueryParam params[] = { - GNUNET_PQ_query_param_string (&charity->donau_url), + GNUNET_PQ_query_param_string (donau_url), GNUNET_PQ_query_param_string (charity->name), - GNUNET_PQ_query_param_auto_from_type (charity->charity_pub), - GNUNET_PQ_query_param_uint64 (charity_id), + GNUNET_PQ_query_param_auto_from_type (charity->charity_pub.eddsa_pub.q_y), + GNUNET_PQ_query_param_uint64 (&charity_id), TALER_PQ_query_param_amount_with_currency (pg->conn, &charity->max_per_year), TALER_PQ_query_param_amount_with_currency (pg->conn, &charity->receipts_to_date), - GNUNET_PQ_query_param_uint64 (charity->current_year), + GNUNET_PQ_query_param_uint64 (&charity->current_year), GNUNET_PQ_query_param_end }; check_connection(pg); PREPARE (pg, "insert_donau_instance", - "INSERT INTO merchant_donau_instances", + "INSERT INTO merchant_donau_instances" "(donau_url" ",charity_name" ",charity_pub_key" diff --git a/src/backenddb/pg_insert_donau_instance.h b/src/backenddb/pg_insert_donau_instance.h @@ -25,6 +25,7 @@ #include <taler/taler_util.h> #include <taler/taler_json_lib.h> #include "taler_merchantdb_plugin.h" +#include "donau/donau_service.h" /** * Insert information about a Donau charity instance. @@ -37,6 +38,7 @@ enum GNUNET_DB_QueryStatus TMH_PG_insert_donau_instance ( void *cls, + const char *donau_url, const struct DONAU_Charity *charity, const uint64_t charity_id); diff --git a/src/backenddb/pg_lookup_donau_keys.c b/src/backenddb/pg_lookup_donau_keys.c @@ -23,6 +23,7 @@ #include <taler/taler_error_codes.h> #include <taler/taler_dbevents.h> #include <taler/taler_pq_lib.h> +#include "donau/donau_service.h" #include "pg_lookup_donau_keys.h" #include "pg_helper.h" diff --git a/src/backenddb/pg_lookup_donau_keys.h b/src/backenddb/pg_lookup_donau_keys.h @@ -25,6 +25,7 @@ #include <taler/taler_util.h> #include <taler/taler_json_lib.h> #include "taler_merchantdb_plugin.h" +#include "donau/donau_service.h" /** * Retrieve donau's keys from the database. diff --git a/src/backenddb/pg_select_donau_instance.c b/src/backenddb/pg_select_donau_instance.c @@ -36,9 +36,9 @@ TMH_PG_select_donau_instances (void *cls, }; struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_auto_from_type ("donau_url", &di->donau_url), - GNUNET_PQ_result_spec_auto_from_type ("charity_name", &di->charity_name), - GNUNET_PQ_result_spec_auto_from_type ("charity_pub_key", &di->charity_pub_key), + GNUNET_PQ_result_spec_string ("donau_url", &di->donau_url), + GNUNET_PQ_result_spec_string ("charity_name", &di->charity_name), + GNUNET_PQ_result_spec_auto_from_type ("charity_pub_key", &di->charity_pub_key->eddsa_pub.q_y), GNUNET_PQ_result_spec_uint64 ("charity_id", &di->charity_id), TALER_PQ_result_spec_amount_with_currency ("charity_max_per_year", &di->charity_max_per_year), TALER_PQ_result_spec_amount_with_currency ("charity_receipts_to_date", &di->charity_receipts_to_date), diff --git a/src/backenddb/pg_select_donau_instance.h b/src/backenddb/pg_select_donau_instance.h @@ -25,21 +25,8 @@ #include <taler/taler_util.h> #include <taler/taler_json_lib.h> #include "taler_merchantdb_plugin.h" - -/** - * Structure to hold Donau instance details from the database. - */ -struct TALER_MERCHANTDB_DonauInstance -{ - const char *donau_url; - const char *charity_name; - const DONAU_CharityPublicKeyP *charity_pub_key; - uint64_t charity_id; - struct TALER_Amount charity_max_per_year; - struct TALER_Amount charity_receipts_to_date; - int64_t current_year; - json_t *donau_keys_json; // Added the keys_json field here -}; +#include "taler_merchant_donau.h" +#include "donau/donau_util.h" /** * Retrieve details of a Donau instance. diff --git a/src/backenddb/pg_upsert_donau_keys.c b/src/backenddb/pg_upsert_donau_keys.c @@ -23,6 +23,7 @@ #include <taler/taler_error_codes.h> #include <taler/taler_dbevents.h> #include <taler/taler_pq_lib.h> +#include "donau/donau_service.h" #include "pg_upsert_donau_keys.h" #include "pg_helper.h" @@ -31,11 +32,12 @@ TMH_PG_upsert_donau_keys ( void *cls, const struct DONAU_Keys *keys) { + enum GNUNET_DB_QueryStatus qs; struct PostgresClosure *pg = cls; json_t *jkeys = DONAU_keys_to_json(keys); struct GNUNET_PQ_QueryParam params[] = { TALER_PQ_query_param_json(jkeys), - GNUNET_PQ_query_param_string(&keys->donau_url), + GNUNET_PQ_query_param_string(keys->donau_url), GNUNET_PQ_query_param_end }; diff --git a/src/backenddb/pg_upsert_donau_keys.h b/src/backenddb/pg_upsert_donau_keys.h @@ -25,6 +25,7 @@ #include <taler/taler_util.h> #include <taler/taler_json_lib.h> #include "taler_merchantdb_plugin.h" +#include "donau/donau_service.h" /** * Function to insert or update Donau keys in the merchant_donau_keys table. @@ -34,7 +35,7 @@ * @return GNUNET_DB_QueryStatus transaction status */ enum GNUNET_DB_QueryStatus -TMH_PG_insert_donau_keys(void *cls, +TMH_PG_upsert_donau_keys(void *cls, const struct DONAU_Keys *keys); diff --git a/src/backenddb/plugin_merchantdb_postgres.c b/src/backenddb/plugin_merchantdb_postgres.c @@ -154,6 +154,14 @@ #include "pg_insert_issued_token.h" #include "pg_lookup_spent_tokens_by_order.h" +#ifdef HAVE_DONAU_DONAU_SERVICE_H +#include "donau/donau_service.h" +#include "pg_insert_donau_instance.h" +#include "pg_select_donau_instance.h" +#include "pg_delete_donau_instance.h" +#include "pg_lookup_donau_keys.h" +#include "pg_upsert_donau_keys.h" +#endif /** * How often do we re-try if we run into a DB serialization error? @@ -627,6 +635,20 @@ libtaler_plugin_merchantdb_postgres_init (void *cls) plugin->lookup_spent_tokens_by_order = &TMH_PG_lookup_spent_tokens_by_order; + if(HAVE_DONAU_DONAU_SERVICE_H) + { + plugin->insert_donau_instance + = &TMH_PG_insert_donau_instance; + plugin->select_donau_instance + = &TMH_PG_select_donau_instance; + plugin->delete_donau_instance + = &TMH_PG_delete_donau_instance; + plugin->lookup_donau_keys + = &TMH_PG_lookup_donau_keys; + plugin->upsert_donau_keys + = &TMH_PG_upsert_donau_keys; + } + return plugin; } diff --git a/src/include/Makefile.am b/src/include/Makefile.am @@ -10,3 +10,8 @@ talerinclude_HEADERS = \ taler_merchantdb_plugin.h \ taler_merchant_service.h \ taler_merchant_testing_lib.h + +if HAVE_DONAU +talerinclude_HEADERS += \ + taler_merchant_donau.h +endif diff --git a/src/include/taler_merchant_donau.h b/src/include/taler_merchant_donau.h @@ -64,4 +64,19 @@ struct TALER_MERCHANT_DONAU_Charity uint64_t charity_id; }; +/** + * Structure to hold Donau instance details from the database. + */ +struct TALER_MERCHANTDB_DonauInstance +{ + char *donau_url; + char *charity_name; + struct DONAU_CharityPublicKeyP *charity_pub_key; + uint64_t charity_id; + struct TALER_Amount charity_max_per_year; + struct TALER_Amount charity_receipts_to_date; + int64_t current_year; + json_t *donau_keys_json; +}; + #endif \ No newline at end of file diff --git a/src/include/taler_merchantdb_plugin.h b/src/include/taler_merchantdb_plugin.h @@ -30,6 +30,11 @@ #include <taler/taler_exchange_service.h> #include <jansson.h> +#ifdef HAVE_DONAU_DONAU_SERVICE_H +#include <donau/donau_service.h> +#include "taler_merchant_donau.h" +#endif + /** * Handle to interact with the database. */ @@ -3821,6 +3826,41 @@ struct TALER_MERCHANTDB_Plugin struct GNUNET_TIME_Timestamp future_retry, struct GNUNET_TIME_Relative retry_backoff, const char *emsg); + + #ifdef HAVE_DONAU_DONAU_SERVICE_H + enum GNUNET_DB_QueryStatus + (*upsert_donau_keys)( + void *cls, + const struct DONAU_Keys *keys + ); + + enum GNUNET_DB_QueryStatus + (*lookup_donau_keys)( + void *cls, + const char *donau_url, + struct DONAU_Keys **keys + ); + + enum GNUNET_DB_QueryStatus + (*insert_donau_instance)( + void *cls, + const char *donau_url, + const struct DONAU_Charity *charity, + const uint64_t charity_id + ); + + enum GNUNET_DB_QueryStatus + (*select_donau_instance)( + void *cls, + struct TALER_MERCHANTDB_DonauInstance *di + ); + + enum GNUNET_DB_QueryStatus + (*delete_donau_instance)( + void *cls, + const uint64_t charity_id + ); + #endif }; #endif