From 8250d830b6facc3cd51ba9cecf109566ec346013 Mon Sep 17 00:00:00 2001 From: Özgür Kesim Date: Sun, 20 Nov 2022 12:36:54 +0100 Subject: Call TEH_keys_update_state on extension config change Fixes #7266 Also better API: - TEH_keys_get_state and - TEH_keys_get_state_for_management_only --- src/exchange/taler-exchange-httpd_extensions.c | 5 +++++ src/exchange/taler-exchange-httpd_keys.c | 20 +++++++++++++++----- src/exchange/taler-exchange-httpd_keys.h | 12 +++--------- .../taler-exchange-httpd_management_post_keys.c | 3 +-- 4 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/exchange/taler-exchange-httpd_extensions.c b/src/exchange/taler-exchange-httpd_extensions.c index 30d1c5ac9..c89a00411 100644 --- a/src/exchange/taler-exchange-httpd_extensions.c +++ b/src/exchange/taler-exchange-httpd_extensions.c @@ -20,6 +20,7 @@ #include "platform.h" #include #include "taler_dbevents.h" +#include "taler-exchange-httpd_keys.h" #include "taler-exchange-httpd_responses.h" #include "taler-exchange-httpd_extensions.h" #include "taler_json_lib.h" @@ -156,6 +157,10 @@ extension_update_event_cb (void *cls, TALER_age_mask_to_string (&conf->mask)); } + + // Finally, call TEH_keys_update_states in order to refresh the cached + // values. + TEH_keys_update_states (); } diff --git a/src/exchange/taler-exchange-httpd_keys.c b/src/exchange/taler-exchange-httpd_keys.c index edfe50e58..b37c68d95 100644 --- a/src/exchange/taler-exchange-httpd_keys.c +++ b/src/exchange/taler-exchange-httpd_keys.c @@ -2623,8 +2623,8 @@ TEH_keys_update_states () } -struct TEH_KeyStateHandle * -TEH_keys_get_state2 (bool management_only) +static struct TEH_KeyStateHandle * +keys_get_state (bool management_only) { struct TEH_KeyStateHandle *old_ksh; struct TEH_KeyStateHandle *ksh; @@ -2659,20 +2659,29 @@ TEH_keys_get_state2 (bool management_only) } +struct TEH_KeyStateHandle * +TEH_keys_get_state_for_management_only (void) +{ + return keys_get_state (true); +} + + struct TEH_KeyStateHandle * TEH_keys_get_state (void) { struct TEH_KeyStateHandle *ksh; - ksh = TEH_keys_get_state2 (false); + ksh = keys_get_state (false); if (NULL == ksh) return NULL; + if (ksh->management_only) { if (GNUNET_OK != finish_keys_response (ksh)) return NULL; } + return ksh; } @@ -2715,6 +2724,7 @@ TEH_keys_denomination_by_hash ( NULL); return NULL; } + return TEH_keys_denomination_by_hash2 (ksh, h_denom_pub, conn, @@ -3410,7 +3420,7 @@ TEH_keys_get_timing (const struct TALER_ExchangePublicKeyP *exchange_pub, struct HelperSignkey *hsk; struct GNUNET_PeerIdentity pid; - ksh = TEH_keys_get_state2 (true); + ksh = TEH_keys_get_state_for_management_only (); if (NULL == ksh) { GNUNET_break (0); @@ -3580,7 +3590,7 @@ TEH_keys_management_get_keys_handler (const struct TEH_RequestHandler *rh, json_t *reply; (void) rh; - ksh = TEH_keys_get_state2 (true); + ksh = TEH_keys_get_state_for_management_only (); if (NULL == ksh) { return TALER_MHD_reply_with_error (connection, diff --git a/src/exchange/taler-exchange-httpd_keys.h b/src/exchange/taler-exchange-httpd_keys.h index 7e8c1e995..8758afb71 100644 --- a/src/exchange/taler-exchange-httpd_keys.h +++ b/src/exchange/taler-exchange-httpd_keys.h @@ -168,18 +168,12 @@ TEH_check_invariants (void); struct TEH_KeyStateHandle * TEH_keys_get_state (void); - /** - * Obtain the key state. Should ONLY be used - * directly if @a management_only is true. Otherwise use #TEH_keys_get_state(). - * - * @param management_only if we should NOT run finish_keys_response() - * because we only need the state for the /management/keys API - * @return NULL on error + * Obtain the key state if we should NOT run finish_keys_response() because we + * only need the state for the /management/keys API */ struct TEH_KeyStateHandle * -TEH_keys_get_state2 (bool management_only); - +TEH_keys_get_state_for_management_only (void); /** * Something changed in the database. Rebuild all key states. This function diff --git a/src/exchange/taler-exchange-httpd_management_post_keys.c b/src/exchange/taler-exchange-httpd_management_post_keys.c index 7d9853e9b..df351ad5f 100644 --- a/src/exchange/taler-exchange-httpd_management_post_keys.c +++ b/src/exchange/taler-exchange-httpd_management_post_keys.c @@ -376,8 +376,7 @@ TEH_handler_management_post_keys ( } GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Received /management/keys\n"); - akc.ksh = TEH_keys_get_state2 (true); /* may start its own transaction, thus - must be done here, before we run ours! */ + akc.ksh = TEH_keys_get_state_for_management_only (); /* may start its own transaction, thus must be done here, before we run ours! */ if (NULL == akc.ksh) { GNUNET_break_op (0); -- cgit v1.2.3