exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

commit e6b6340f23f98d5e8889c43448d90df79720f7c8
parent 37ea4561017d4e7e486bb25dbd040adef50108b7
Author: Christian Grothoff <christian@grothoff.org>
Date:   Sat,  8 Aug 2026 22:09:43 +0200

kill dead denomination_pending table, endpoint, etc.

Diffstat:
Msrc/auditor/meson.build | 1-
Msrc/auditor/taler-auditor-httpd.c | 10+---------
Dsrc/auditor/taler-auditor-httpd_get-monitoring-denomination-pending.c | 129-------------------------------------------------------------------------------
Asrc/auditordb/0004-auditor_denomination_pending.sql | 18++++++++++++++++++
Dsrc/auditordb/insert_denomination_pending.c | 59-----------------------------------------------------------
Dsrc/auditordb/iterate_denomination_pending.c | 169-------------------------------------------------------------------------------
Msrc/auditordb/meson.build | 3+--
Dsrc/include/auditor-database/insert_denomination_pending.h | 36------------------------------------
Dsrc/include/auditor-database/iterate_denomination_pending.h | 65-----------------------------------------------------------------
Msrc/lib/auditor_api_get_config.c | 2+-
10 files changed, 21 insertions(+), 471 deletions(-)

diff --git a/src/auditor/meson.build b/src/auditor/meson.build @@ -251,7 +251,6 @@ taler_auditor_httpd_SOURCES = [ 'taler-auditor-httpd_get-monitoring-reserves.c', 'taler-auditor-httpd_get-monitoring-purses.c', 'taler-auditor-httpd_get-monitoring-historic-denomination-revenue.c', - 'taler-auditor-httpd_get-monitoring-denomination-pending.c', 'taler-auditor-httpd_get-monitoring-historic-reserve-summary.c', 'taler-auditor-httpd_get-monitoring-wire-format-inconsistency.c', 'taler-auditor-httpd_get-monitoring-wire-out-inconsistency.c', diff --git a/src/auditor/taler-auditor-httpd.c b/src/auditor/taler-auditor-httpd.c @@ -86,7 +86,7 @@ * release version, and the format is NOT the same that semantic * versioning uses either. */ -#define AUDITOR_PROTOCOL_VERSION "1:0:1" +#define AUDITOR_PROTOCOL_VERSION "3:0:0" /** * Salt we use when doing the KDF for access. @@ -826,14 +826,6 @@ handle_mhd_request (void *cls, .response_code = MHD_HTTP_OK, .requires_auth = true }, { .url = "/monitoring/denomination-pending", - .method = MHD_HTTP_METHOD_GET, - .mime_type = "application/json", - .data = NULL, - .data_size = 0, - .handler = &TAH_get_monitoring_denomination_pending, - .response_code = MHD_HTTP_OK, - .requires_auth = true }, - { .url = "/monitoring/denomination-pending", .method = MHD_HTTP_METHOD_DELETE, .mime_type = "application/json", .data = NULL, diff --git a/src/auditor/taler-auditor-httpd_get-monitoring-denomination-pending.c b/src/auditor/taler-auditor-httpd_get-monitoring-denomination-pending.c @@ -1,129 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2024 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ -#include <gnunet/gnunet_util_lib.h> -#include <gnunet/gnunet_json_lib.h> -#include <jansson.h> -#include <microhttpd.h> -#include <pthread.h> -#include "taler/taler_json_lib.h" -#include "taler/taler_mhd_lib.h" -#include "taler-auditor-httpd.h" -#include "taler-auditor-httpd_get-monitoring-denomination-pending.h" -#define TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE json_t -#include "auditor-database/iterate_denomination_pending.h" -#include "auditor-database/preflight.h" - -/** - * Add denomination-pending to the list. - * - * @param[in,out] list a `json_t *` array to extend - * @param serial_id location of the @a dc in the database - * @param dc struct of inconsistencies - * @return #GNUNET_OK to continue to iterate, #GNUNET_SYSERR to stop iterating - */ -static enum GNUNET_GenericReturnValue -process_denomination_pending ( - json_t *list, - uint64_t serial_id, - const struct TALER_AUDITORDB_DenominationPending *dc) -{ - json_t *obj; - - obj = GNUNET_JSON_PACK ( - GNUNET_JSON_pack_data_auto ("denom_pub_hash", - &dc->denom_pub_hash), - TALER_JSON_pack_amount ("denom_balance", - &dc->denom_balance), - TALER_JSON_pack_amount ("denom_loss", - &dc->denom_loss), - GNUNET_JSON_pack_int64 ("num_issued", - dc->num_issued), - TALER_JSON_pack_amount ("denom_risk", - &dc->denom_risk), - TALER_JSON_pack_amount ("recoup_loss", - &dc->recoup_loss) - ); - GNUNET_break (0 == - json_array_append_new (list, - obj)); - return GNUNET_OK; -} - - -enum MHD_Result -TAH_get_monitoring_denomination_pending ( - struct TAH_RequestHandler *rh, - struct MHD_Connection *connection, - void **connection_cls, - const char *upload_data, - size_t *upload_data_size, - const char *const args[]) -{ - json_t *ja; - enum GNUNET_DB_QueryStatus qs; - int64_t limit = -20; - uint64_t offset; - - (void) rh; - (void) connection_cls; - (void) upload_data; - (void) upload_data_size; - if (GNUNET_SYSERR == - TALER_AUDITORDB_preflight (TAH_apg)) - { - GNUNET_break (0); - return TALER_MHD_reply_with_error (connection, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_DB_SETUP_FAILED, - NULL); - } - TALER_MHD_parse_request_snumber (connection, - "limit", - &limit); - if (limit < 0) - offset = INT64_MAX; - else - offset = 0; - TALER_MHD_parse_request_number (connection, - "offset", - &offset); - ja = json_array (); - GNUNET_break (NULL != ja); - qs = TALER_AUDITORDB_iterate_denomination_pending ( - TAH_apg, - limit, - offset, - &process_denomination_pending, - ja); - - if (0 > qs) - { - GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR == qs); - json_decref (ja); - TALER_LOG_WARNING ( - "Failed to handle GET /denomination-pending"); - return TALER_MHD_reply_with_error ( - connection, - MHD_HTTP_INTERNAL_SERVER_ERROR, - TALER_EC_GENERIC_DB_FETCH_FAILED, - "get_denomination_pending"); - } - return TALER_MHD_REPLY_JSON_PACK ( - connection, - MHD_HTTP_OK, - GNUNET_JSON_pack_array_steal ("denomination_pending", - ja)); -} diff --git a/src/auditordb/0004-auditor_denomination_pending.sql b/src/auditordb/0004-auditor_denomination_pending.sql @@ -0,0 +1,18 @@ +-- +-- This file is part of TALER +-- Copyright (C) 2026 Taler Systems SA +-- +-- TALER is free software; you can redistribute it and/or modify it under the +-- terms of the GNU General Public License as published by the Free Software +-- Foundation; either version 3, or (at your option) any later version. +-- +-- TALER is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +-- A PARTICULAR PURPOSE. See the GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License along with +-- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> +-- + +-- This was never used +DROP TABLE auditor_denomination_pending; diff --git a/src/auditordb/insert_denomination_pending.c b/src/auditordb/insert_denomination_pending.c @@ -1,59 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2024 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ - - -#include "taler/taler_pq_lib.h" -#include "pg_helper.h" - -#include "auditor-database/insert_denomination_pending.h" - -enum GNUNET_DB_QueryStatus -TALER_AUDITORDB_insert_denomination_pending ( - struct TALER_AUDITORDB_PostgresContext *pg, - const struct TALER_AUDITORDB_DenominationPending *dc) -{ - struct GNUNET_PQ_QueryParam params[] = { - GNUNET_PQ_query_param_auto_from_type (&dc->denom_pub_hash), - TALER_PQ_query_param_amount (pg->conn, &dc->denom_balance), - TALER_PQ_query_param_amount (pg->conn, &dc->denom_loss), - GNUNET_PQ_query_param_uint64 (&dc->num_issued), - TALER_PQ_query_param_amount (pg->conn, &dc->denom_risk), - TALER_PQ_query_param_amount (pg->conn, &dc->recoup_loss), - GNUNET_PQ_query_param_end - }; - - PREPARE (pg, - "insert_denomination_pending", - "INSERT INTO auditor_denomination_pending " - "( denom_pub_hash," - " denom_balance," - " denom_loss," - " num_issued," - " denom_risk," - " recoup_loss" - ") VALUES ($1,$2,$3,$4,$5,$6)" - " ON CONFLICT (denom_pub_hash) DO UPDATE" - " SET denom_balance = excluded.denom_balance, " - " denom_loss = excluded.denom_loss," - " num_issued = excluded.num_issued," - " denom_risk = excluded.denom_risk," - " recoup_loss = excluded.recoup_loss;" - ); - return GNUNET_PQ_eval_prepared_non_select ( - pg->conn, - "insert_denomination_pending", - params); -} diff --git a/src/auditordb/iterate_denomination_pending.c b/src/auditordb/iterate_denomination_pending.c @@ -1,169 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2024 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ -#include "taler/taler_pq_lib.h" -#include "pg_helper.h" -#include "auditor-database/iterate_denomination_pending.h" - - -struct DenominationPendingContext -{ - - /** - * Function to call for each bad sig loss. - */ - TALER_AUDITORDB_DenominationPendingCallback cb; - - /** - * Closure for @e cb - */ - void *cb_cls; - - /** - * Plugin context. - */ - struct TALER_AUDITORDB_PostgresContext *pg; - - /** - * Query status to return. - */ - enum GNUNET_DB_QueryStatus qs; -}; - - -/** - * Helper function for #TALER_AUDITORDB_iterate_denomination_pending(). - * To be called with the results of a SELECT statement - * that has returned @a num_results results. - * - * @param cls closure of type `struct DenominationPendingContext *` - * @param result the postgres result - * @param num_results the number of results in @a result - */ -static void -denomination_pending_cb (void *cls, - PGresult *result, - unsigned int num_results) -{ - struct DenominationPendingContext *dcc = cls; - struct TALER_AUDITORDB_PostgresContext *pg = dcc->pg; - - for (unsigned int i = 0; i < num_results; i++) - { - uint64_t serial_id; - struct TALER_AUDITORDB_DenominationPending dc; - struct GNUNET_PQ_ResultSpec rs[] = { - GNUNET_PQ_result_spec_uint64 ("row_id", - &serial_id), - GNUNET_PQ_result_spec_auto_from_type ("denom_pub_hash", - &dc.denom_pub_hash), - TALER_PQ_RESULT_SPEC_AMOUNT ("denom_balance", - &dc.denom_balance), - TALER_PQ_RESULT_SPEC_AMOUNT ("denom_loss", - &dc.denom_loss), - GNUNET_PQ_result_spec_uint64 ("num_issued", - &dc.num_issued), - TALER_PQ_RESULT_SPEC_AMOUNT ("denom_risk", - &dc.denom_risk), - TALER_PQ_RESULT_SPEC_AMOUNT ("recoup_loss", - &dc.recoup_loss), - GNUNET_PQ_result_spec_end - }; - enum GNUNET_GenericReturnValue rval; - - if (GNUNET_OK != - GNUNET_PQ_extract_result (result, - rs, - i)) - { - GNUNET_break (0); - dcc->qs = GNUNET_DB_STATUS_HARD_ERROR; - return; - } - dcc->qs = i + 1; - rval = dcc->cb (dcc->cb_cls, - serial_id, - &dc); - GNUNET_PQ_cleanup_result (rs); - if (GNUNET_OK != rval) - break; - } -} - - -enum GNUNET_DB_QueryStatus -TALER_AUDITORDB_iterate_denomination_pending ( - struct TALER_AUDITORDB_PostgresContext *pg, - int64_t limit, - uint64_t offset, - TALER_AUDITORDB_DenominationPendingCallback cb, - void *cb_cls) -{ - uint64_t plimit = (uint64_t) ((limit < 0) ? -limit : limit); - struct GNUNET_PQ_QueryParam params[] = { - GNUNET_PQ_query_param_uint64 (&offset), - GNUNET_PQ_query_param_uint64 (&plimit), - GNUNET_PQ_query_param_end - }; - struct DenominationPendingContext dcc = { - .cb = cb, - .cb_cls = cb_cls, - .pg = pg - }; - enum GNUNET_DB_QueryStatus qs; - - PREPARE (pg, - "iterate_denomination_pending_desc", - "SELECT" - " row_id," - " denom_pub_hash," - " denom_balance," - " denom_loss," - " num_issued," - " denom_risk," - " recoup_loss" - " FROM auditor_denomination_pending" - " WHERE (row_id < $1)" - " ORDER BY row_id DESC" - " LIMIT $2" - ); - PREPARE (pg, - "iterate_denomination_pending_asc", - "SELECT" - " row_id," - " denom_pub_hash," - " denom_balance," - " denom_loss," - " num_issued," - " denom_risk," - " recoup_loss" - " FROM auditor_denomination_pending" - " WHERE (row_id > $1)" - " ORDER BY row_id ASC" - " LIMIT $2" - ); - qs = GNUNET_PQ_eval_prepared_multi_select ( - pg->conn, - (limit > 0) - ? "iterate_denomination_pending_asc" - : "iterate_denomination_pending_desc", - params, - &denomination_pending_cb, - &dcc); - if (qs > 0) - return dcc.qs; - GNUNET_break (GNUNET_DB_STATUS_HARD_ERROR != qs); - return qs; -} diff --git a/src/auditordb/meson.build b/src/auditordb/meson.build @@ -64,6 +64,7 @@ auditor_0004_sql = [ '0004-auditor_kycauth_in_inconsistency.sql', '0004-auditor_pending_deposits.sql', '0004-auditor_purse_not_closed_inconsistencies.sql', + '0004-auditor_denomination_pending.sql', 'commit.sql', ] @@ -121,7 +122,6 @@ libtalerauditordb = library( 'iterate_coin_inconsistencies.c', 'get_denomination_balance.c', 'iterate_denomination_key_validity_withdraw_inconsistencies.c', - 'iterate_denomination_pending.c', 'iterate_denominations_without_sigs.c', 'iterate_deposit_confirmations.c', 'iterate_emergencies_by_count.c', @@ -157,7 +157,6 @@ libtalerauditordb = library( 'insert_coin_inconsistency.c', 'insert_denomination_balance.c', 'insert_denomination_key_validity_withdraw_inconsistency.c', - 'insert_denomination_pending.c', 'insert_denominations_without_sigs.c', 'insert_deposit_confirmation.c', 'insert_early_aggregation.c', diff --git a/src/include/auditor-database/insert_denomination_pending.h b/src/include/auditor-database/insert_denomination_pending.h @@ -1,36 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2024 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ - - -#ifndef AUDITOR_DATABASE_INSERT_DENOMINATION_PENDING_H -#define AUDITOR_DATABASE_INSERT_DENOMINATION_PENDING_H - -#include "auditordb_lib.h" - - -/** - * Insert information about a bad sig loss into the database. - * - * @param pg the database context - * @param dc deposit confirmation information to store - * @return query result status - */ -enum GNUNET_DB_QueryStatus -TALER_AUDITORDB_insert_denomination_pending ( - struct TALER_AUDITORDB_PostgresContext *pg, - const struct TALER_AUDITORDB_DenominationPending *dc); - -#endif // AUDITOR_DATABASE_INSERT_DENOMINATION_PENDING_H diff --git a/src/include/auditor-database/iterate_denomination_pending.h b/src/include/auditor-database/iterate_denomination_pending.h @@ -1,65 +0,0 @@ -/* - This file is part of TALER - Copyright (C) 2024 Taler Systems SA - - TALER is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - TALER is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> - */ -#ifndef AUDITOR_DATABASE_ITERATE_DENOMINATION_PENDING_H -#define AUDITOR_DATABASE_ITERATE_DENOMINATION_PENDING_H - -#include "taler/taler_util.h" -#include "taler/taler_json_lib.h" -#include "auditordb_lib.h" - - -#ifndef TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE -/** - * Type of the closure for #TALER_AUDITORDB_DenominationPendingCallback. - */ -#define TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE void -#endif -typedef enum GNUNET_GenericReturnValue -(*TALER_AUDITORDB_DenominationPendingCallback)( - TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE *cls, - uint64_t serial_id, - const struct TALER_AUDITORDB_DenominationPending *dc); - - -/* Callback typedefs */ -typedef enum GNUNET_GenericReturnValue -(*TALER_AUDITORDB_DenominationPendingCallback)( - TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE *cls, - uint64_t serial_id, - const struct TALER_AUDITORDB_DenominationPending *dc); - -/** - * Get information about denomination-pending from the database. - * - * @param pg the database context - * @param limit number of records to return, negative for descending - * @param offset table row to start from, exclusive, direction determined by @a limit - * @param cb function to call with results - * @param cb_cls closure for @a cb - * @return query result status - */ -enum GNUNET_DB_QueryStatus -TALER_AUDITORDB_iterate_denomination_pending (struct - TALER_AUDITORDB_PostgresContext * - pg, - int64_t limit, - uint64_t offset, - TALER_AUDITORDB_DenominationPendingCallback - cb, - TALER_AUDITORDB_DENOMINATION_PENDING_RESULT_CLOSURE - *cb_cls); - -#endif diff --git a/src/lib/auditor_api_get_config.c b/src/lib/auditor_api_get_config.c @@ -32,7 +32,7 @@ * Which revision of the Taler auditor protocol is implemented * by this library? Used to determine compatibility. */ -#define TALER_PROTOCOL_CURRENT 1 +#define TALER_PROTOCOL_CURRENT 3 /** * How many revisions back are we compatible to?