From 2d6bce2dc0ded9fcb77caa1cafecd401216b7238 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Tue, 13 Feb 2024 22:01:02 +0100 Subject: set 'finished' to TRUE when KYC process is done (either way, successful or failure); should fix #8055, needs testing --- src/exchangedb/Makefile.am | 1 + .../exchange_do_insert_kyc_attributes.sql | 3 +- src/exchangedb/pg_insert_kyc_failure.c | 64 ++++++++++++++++++++++ src/exchangedb/pg_insert_kyc_failure.h | 50 +++++++++++++++++ src/exchangedb/pg_template.c | 2 +- src/exchangedb/pg_template.h | 2 +- src/exchangedb/plugin_exchangedb_postgres.c | 3 + 7 files changed, 122 insertions(+), 3 deletions(-) create mode 100644 src/exchangedb/pg_insert_kyc_failure.c create mode 100644 src/exchangedb/pg_insert_kyc_failure.h (limited to 'src/exchangedb') diff --git a/src/exchangedb/Makefile.am b/src/exchangedb/Makefile.am index 4febbfb17..99e44c876 100644 --- a/src/exchangedb/Makefile.am +++ b/src/exchangedb/Makefile.am @@ -96,6 +96,7 @@ libtaler_plugin_exchangedb_postgres_la_SOURCES = \ pg_select_purse_merge.h pg_select_purse_merge.c \ pg_select_contract_by_purse.h pg_select_contract_by_purse.c \ pg_insert_drain_profit.h pg_insert_drain_profit.c \ + pg_insert_kyc_failure.h pg_insert_kyc_failure.c \ pg_create_tables.h pg_create_tables.c \ pg_event_listen.h pg_event_listen.c \ pg_event_listen_cancel.h pg_event_listen_cancel.c \ diff --git a/src/exchangedb/exchange_do_insert_kyc_attributes.sql b/src/exchangedb/exchange_do_insert_kyc_attributes.sql index 2efc0aec5..7db4d80c0 100644 --- a/src/exchangedb/exchange_do_insert_kyc_attributes.sql +++ b/src/exchangedb/exchange_do_insert_kyc_attributes.sql @@ -56,10 +56,11 @@ INSERT INTO exchange.kyc_attributes ,in_enc_attributes ,in_process_row); -UPDATE exchange.legitimization_processes +UPDATE legitimization_processes SET provider_user_id=in_provider_account_id ,provider_legitimization_id=in_provider_legitimization_id ,expiration_time=GREATEST(expiration_time,in_expiration_time) + ,finished=TRUE WHERE h_payto=in_h_payto AND legitimization_process_serial_id=in_process_row AND provider_section=in_provider_section; diff --git a/src/exchangedb/pg_insert_kyc_failure.c b/src/exchangedb/pg_insert_kyc_failure.c new file mode 100644 index 000000000..c9fcd0202 --- /dev/null +++ b/src/exchangedb/pg_insert_kyc_failure.c @@ -0,0 +1,64 @@ +/* + 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 + */ +/** + * @file exchangedb/pg_insert_kyc_failure.c + * @brief Implementation of the insert_kyc_failure function for Postgres + * @author Christian Grothoff + */ +#include "platform.h" +#include "taler_error_codes.h" +#include "taler_dbevents.h" +#include "taler_pq_lib.h" +#include "pg_insert_kyc_failure.h" +#include "pg_helper.h" + +enum GNUNET_DB_QueryStatus +TEH_PG_insert_kyc_failure ( + void *cls, + uint64_t process_row, + const struct TALER_PaytoHashP *h_payto, + const char *provider_section, + const char *provider_account_id, + const char *provider_legitimization_id) +{ + struct PostgresClosure *pg = cls; + struct GNUNET_PQ_QueryParam params[] = { + GNUNET_PQ_query_param_uint64 (&process_row), + GNUNET_PQ_query_param_auto_from_type (h_payto), + GNUNET_PQ_query_param_string (provider_section), + NULL != provider_account_id + ? GNUNET_PQ_query_param_string (provider_account_id) + : GNUNET_PQ_query_param_null (), + NULL != provider_legitimization_id + ? GNUNET_PQ_query_param_string (provider_legitimization_id) + : GNUNET_PQ_query_param_null (), + GNUNET_PQ_query_param_end + }; + + PREPARE (pg, + "insert_kyc_failure", + "UPDATE legitimization_processes" + " SET" + " finished=TRUE" + " ,provider_account_id=$4" + " ,provider_legitimization_id=$5" + " WHERE h_payto=$2" + " AND legitimization_process_serial_id=$1" + " AND provider_section=$3;"); + return GNUNET_PQ_eval_prepared_non_select (pg->conn, + "insert_kyc_failure", + params); +} diff --git a/src/exchangedb/pg_insert_kyc_failure.h b/src/exchangedb/pg_insert_kyc_failure.h new file mode 100644 index 000000000..46d08df9c --- /dev/null +++ b/src/exchangedb/pg_insert_kyc_failure.h @@ -0,0 +1,50 @@ +/* + 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 + */ +/** + * @file exchangedb/pg_insert_kyc_failure.h + * @brief implementation of the insert_kyc_failure function for Postgres + * @author Christian Grothoff + */ +#ifndef PG_INSERT_KYC_FAILURE_H +#define PG_INSERT_KYC_FAILURE_H + +#include "taler_util.h" +#include "taler_json_lib.h" +#include "taler_exchangedb_plugin.h" + + +/** + * Update KYC process status to finished (and failed). + * + * @param cls closure + * @param process_row KYC process row to update + * @param h_payto account for which the attribute data is stored + * @param provider_section provider that must be checked + * @param provider_account_id provider account ID + * @param provider_legitimization_id provider legitimization ID + * @return database transaction status + */ +enum GNUNET_DB_QueryStatus +TEH_PG_insert_kyc_failure ( + void *cls, + uint64_t process_row, + const struct TALER_PaytoHashP *h_payto, + const char *provider_section, + const char *provider_account_id, + const char *provider_legitimization_id); + + +#endif diff --git a/src/exchangedb/pg_template.c b/src/exchangedb/pg_template.c index be54970f0..69cd45035 100644 --- a/src/exchangedb/pg_template.c +++ b/src/exchangedb/pg_template.c @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2023 Taler Systems SA + 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 diff --git a/src/exchangedb/pg_template.h b/src/exchangedb/pg_template.h index 7387b4883..d858689fb 100644 --- a/src/exchangedb/pg_template.h +++ b/src/exchangedb/pg_template.h @@ -1,6 +1,6 @@ /* This file is part of TALER - Copyright (C) 2023 Taler Systems SA + 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 diff --git a/src/exchangedb/plugin_exchangedb_postgres.c b/src/exchangedb/plugin_exchangedb_postgres.c index b21e5d62f..0de656987 100644 --- a/src/exchangedb/plugin_exchangedb_postgres.c +++ b/src/exchangedb/plugin_exchangedb_postgres.c @@ -81,6 +81,7 @@ #include "pg_get_drain_profit.h" #include "pg_get_purse_deposit.h" #include "pg_insert_contract.h" +#include "pg_insert_kyc_failure.h" #include "pg_select_contract.h" #include "pg_select_purse_merge.h" #include "pg_select_contract_by_purse.h" @@ -743,6 +744,8 @@ libtaler_plugin_exchangedb_postgres_init (void *cls) = &TEH_PG_begin_shard; plugin->abort_shard = &TEH_PG_abort_shard; + plugin->insert_kyc_failure + = &TEH_PG_insert_kyc_failure; plugin->complete_shard = &TEH_PG_complete_shard; plugin->release_revolving_shard -- cgit v1.2.3