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:
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