donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

commit 11aea1a7977dceda58a1b8906f812e202dcbb055
parent 8af16247e16ed628391ead3ac53fee938fd824bf
Author: Matyja Lukas Adam <lukas.matyja@students.bfh.ch>
Date:   Fri, 12 Apr 2024 16:21:17 +0200

[donaudb] work on insert issued receipt

Diffstat:
Msrc/donau/donau-httpd_keys.c | 1+
Msrc/donau/donau-httpd_keys.h | 2+-
Msrc/donau/donau-httpd_post-batch-issue.c | 24++++++++++++++----------
Msrc/donaudb/0002-donau_receipts_issued.sql | 4++--
Msrc/donaudb/pg_insert_issued_receipt.c | 52+++++++++++++++++++++++++---------------------------
Msrc/donaudb/pg_insert_issued_receipt.h | 2+-
Msrc/pq/pq_query_helper.c | 8++++++--
7 files changed, 50 insertions(+), 43 deletions(-)

diff --git a/src/donau/donau-httpd_keys.c b/src/donau/donau-httpd_keys.c @@ -1443,4 +1443,5 @@ DH_keys_donation_unit_by_hash ( return dk; } + /* end of donau-httpd_keys.c */ diff --git a/src/donau/donau-httpd_keys.h b/src/donau/donau-httpd_keys.h @@ -114,7 +114,7 @@ DH_keys_donau_sign_ ( * @return #TALER_EC_NONE on success */ #define DH_keys_donau_sign(ps,pub,sig) \ - ({ \ + ({ \ /* check size is set correctly */ \ GNUNET_assert (htonl ((ps)->purpose.size) == \ sizeof (*ps)); \ diff --git a/src/donau/donau-httpd_post-batch-issue.c b/src/donau/donau-httpd_post-batch-issue.c @@ -339,8 +339,10 @@ start: &charity_meta.receipts_to_date); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "new_receipts_to_date: %lu.%u, receipts_sum: %lu.%u, charity_max_per_year: %lu.%u\n", - new_receipts_to_date.value, new_receipts_to_date.fraction, receipts_sum.value, - receipts_sum.fraction, charity_meta.max_per_year.value, charity_meta.max_per_year.fraction); + new_receipts_to_date.value, new_receipts_to_date.fraction, + receipts_sum.value, + receipts_sum.fraction, charity_meta.max_per_year.value, + charity_meta.max_per_year.fraction); // new_receipts_to_date has to be smaller or equal as max_per_year if (0 < TALER_amount_cmp (&new_receipts_to_date, &charity_meta.max_per_year)) return TALER_MHD_reply_with_error (rc->connection, @@ -354,15 +356,17 @@ start: struct DONAU_BlindedDonationUnitSignature du_sigs[num_bkp]; struct BUDIKeyPair_sign_data bkps_sign_data[num_bkp]; - for (int i = 0; i < num_bkp; i++) { - bkps_sign_data[i].h_donation_unit_pub = &irc.bkp[i].h_donation_unit_pub; - bkps_sign_data[i].budi = &irc.bkp[i].blinded_udi; + for (int i = 0; i < num_bkp; i++) + { + bkps_sign_data[i].h_donation_unit_pub = &irc.bkp[i].h_donation_unit_pub; + bkps_sign_data[i].budi = &irc.bkp[i].blinded_udi; } - if (TALER_EC_NONE != DH_keys_donation_batch_sign (num_bkp, bkps_sign_data, du_sigs)) - return TALER_MHD_reply_with_error (rc->connection, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_DB_FETCH_FAILED, // TODO:other EC - NULL); + if (TALER_EC_NONE != DH_keys_donation_batch_sign (num_bkp, bkps_sign_data, + du_sigs)) + return TALER_MHD_reply_with_error (rc->connection, + MHD_HTTP_INTERNAL_SERVER_ERROR, + TALER_EC_GENERIC_DB_FETCH_FAILED, // TODO:other EC + NULL); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "made blind signatures!\n"); /* save new receipts to date and save receipts Request (blinded signatures, diff --git a/src/donaudb/0002-donau_receipts_issued.sql b/src/donaudb/0002-donau_receipts_issued.sql @@ -30,8 +30,8 @@ COMMENT ON COLUMN receipts_issued.receipt_hash CREATE FUNCTION transaction_save_issue_receipts_request( - IN blinded_sig BYTEA[] -- blinded signatures - ,IN charity_id BIGINT -- charity id which made the issue receitps request + IN charity_id BIGINT -- charity id which made the issue receitps request + ,IN blinded_sig BYTEA[] -- blinded signatures ,IN receipt_hash BYTEA -- hash over all budi key pairs (primary key) ,IN amount taler_amount -- total amount of the requested receipts ,IN new_total_amount taler_amount -- new total amount of a charity diff --git a/src/donaudb/pg_insert_issued_receipt.c b/src/donaudb/pg_insert_issued_receipt.c @@ -33,19 +33,22 @@ enum GNUNET_DB_QueryStatus DH_PG_insert_issued_receipt (void *cls, const size_t num_blinded_sig, const struct - DONAU_BlindedDonationUnitSignature *signatures, + DONAU_BlindedDonationUnitSignature signatures[num_blinded_sig], const uint64_t charity_id, const struct DONAU_DonationReceiptHashP *h_receipt, const struct TALER_Amount *amount_receipts_request, const struct TALER_Amount *charity_new_amount) { struct PostgresClosure *pc = cls; - enum GNUNET_GenericReturnValue ret = GNUNET_OK; - // struct GNUNET_PQ_Context *conn; + + struct GNUNET_PQ_ResultSpec rs[] = { + GNUNET_PQ_result_spec_end + }; + struct GNUNET_PQ_QueryParam params[] = { - DONAU_PQ_query_param_array_blinded_donation_unit_sig (num_blinded_sig, - signatures, pc->conn), GNUNET_PQ_query_param_uint64 (&charity_id), + DONAU_PQ_query_param_array_blinded_donation_unit_sig (num_blinded_sig, + signatures, pc->conn), GNUNET_PQ_query_param_fixed_size (&h_receipt->hash, sizeof(struct DONAU_DonationReceiptHashP)), TALER_PQ_query_param_amount_with_currency (pc->conn, @@ -53,27 +56,22 @@ DH_PG_insert_issued_receipt (void *cls, TALER_PQ_query_param_amount_with_currency (pc->conn, charity_new_amount), GNUNET_PQ_query_param_end }; + + enum GNUNET_DB_QueryStatus qs; + PREPARE (pc, - "donation_unit_insert", - "SELECT" - " receipts_issued.transaction_update_current_amount_receipts_save_issue_receipts_request" - " ($1, $2, $3, $4, $5);"); - if (0 > - GNUNET_PQ_eval_prepared_non_select (pc->conn, - "transaction_update_current_amount_receipts_save_issue_receipts_request", - params)) - { - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Failed to run 'transaction_update_current_amount_receipts_save_issue_receipts_request' prepared statement\n"); - ret = GNUNET_SYSERR; - } - if (GNUNET_OK == ret) - { - ret = GNUNET_PQ_exec_sql (pc->conn, - "procedures"); - if (GNUNET_OK != ret) - GNUNET_log (GNUNET_ERROR_TYPE_WARNING, - "Failed to load stored procedures\n"); - } - return ret; + "insert_issued_receipts_request", + "SELECT" + " transaction_save_issue_receipts_request" + " ($1,$2,$3,$4,$5);"); + + GNUNET_log (GNUNET_ERROR_TYPE_INFO, + "pg: insert issued receipt. Number of paramameters: %ld\n", (sizeof(params) / sizeof(params[0]))); + + qs = GNUNET_PQ_eval_prepared_singleton_select (pc->conn, + "insert_issued_receipts_request", + params, + rs); + GNUNET_PQ_cleanup_query_params_closures (params); + return qs; } diff --git a/src/donaudb/pg_insert_issued_receipt.h b/src/donaudb/pg_insert_issued_receipt.h @@ -41,7 +41,7 @@ enum GNUNET_DB_QueryStatus DH_PG_insert_issued_receipt (void *cls, const size_t num_blinded_sig, const struct - DONAU_BlindedDonationUnitSignature *signatures, + DONAU_BlindedDonationUnitSignature signatures[num_blinded_sig], const uint64_t charity_id, const struct DONAU_DonationReceiptHashP *h_receipt, const struct TALER_Amount *amount_receipts_request, diff --git a/src/pq/pq_query_helper.c b/src/pq/pq_query_helper.c @@ -360,7 +360,10 @@ qconv_array ( len = sizeof (bs->details.blinded_cs_answer); break; default: - GNUNET_assert (0); + //FIXME (set to zero) + GNUNET_assert (1); + len = 0; + break; } /* for the cipher and marker */ @@ -505,7 +508,8 @@ qconv_array ( sz); break; default: - GNUNET_assert (0); + //FIXME (set to zero) + GNUNET_assert (1); } // break; // }