summaryrefslogtreecommitdiff
path: root/src/exchange/taler-exchange-httpd_management_post_keys.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-12-09 23:39:11 +0100
committerChristian Grothoff <christian@grothoff.org>2020-12-09 23:39:11 +0100
commit5a24334e83dabcb00e0e0f4292a678b6820ea370 (patch)
treed404d8358f0d812cffcc668b2a9185cab1fafad2 /src/exchange/taler-exchange-httpd_management_post_keys.c
parent788f84f695589fad2afac9f3f600869d114fb79e (diff)
downloadexchange-5a24334e83dabcb00e0e0f4292a678b6820ea370.tar.gz
exchange-5a24334e83dabcb00e0e0f4292a678b6820ea370.tar.bz2
exchange-5a24334e83dabcb00e0e0f4292a678b6820ea370.zip
complete new implementation of GET /keys
Diffstat (limited to 'src/exchange/taler-exchange-httpd_management_post_keys.c')
-rw-r--r--src/exchange/taler-exchange-httpd_management_post_keys.c90
1 files changed, 47 insertions, 43 deletions
diff --git a/src/exchange/taler-exchange-httpd_management_post_keys.c b/src/exchange/taler-exchange-httpd_management_post_keys.c
index cc52f5cf2..0e4609e20 100644
--- a/src/exchange/taler-exchange-httpd_management_post_keys.c
+++ b/src/exchange/taler-exchange-httpd_management_post_keys.c
@@ -126,21 +126,12 @@ add_keys (void *cls,
bool is_active = false;
struct TALER_EXCHANGEDB_DenominationKeyMetaData meta;
- qs = TEH_plugin->lookup_future_denomination_key (
+ /* For idempotency, check if the key is already active */
+ qs = TEH_plugin->lookup_denomination_key (
TEH_plugin->cls,
session,
&akc->d_sigs[i].h_denom_pub,
&meta);
- if (0 == qs)
- {
- /* For idempotency, check if the key is already active */
- qs = TEH_plugin->lookup_denomination_key (
- TEH_plugin->cls,
- session,
- &akc->d_sigs[i].h_denom_pub,
- &meta);
- is_active = true; /* if we pass, it's active! */
- }
if (qs < 0)
{
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
@@ -154,12 +145,21 @@ add_keys (void *cls,
}
if (0 == qs)
{
- *mhd_ret = TALER_MHD_reply_with_error (
- connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
- GNUNET_h2s (&akc->d_sigs[i].h_denom_pub));
- return qs;
+ if (GNUNET_OK !=
+ TEH_keys_load_fees (&akc->d_sigs[i].h_denom_pub,
+ &meta))
+ {
+ *mhd_ret = TALER_MHD_reply_with_error (
+ connection,
+ MHD_HTTP_NOT_FOUND,
+ TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
+ GNUNET_h2s (&akc->d_sigs[i].h_denom_pub));
+ return qs;
+ }
+ }
+ else
+ {
+ active = true;
}
/* check signature is valid */
@@ -214,24 +214,17 @@ add_keys (void *cls,
{
enum GNUNET_DB_QueryStatus qs;
bool is_active = false;
+ struct GNUNET_TIME_Absolute start_sign;
+ struct GNUNET_TIME_Absolute end_sign;
+ struct GNUNET_TIME_Absolute end_legal;
- // FIXME: future signing keys are currently not in DB,
- // may want to get them from in-memory instead.
- qs = TEH_plugin->lookup_future_signing_key (
+ qs = TEH_plugin->lookup_signing_key (
TEH_plugin->cls,
session,
&akc->s_sigs[i].exchange_pub,
- &META);
- if (0 == qs)
- {
- /* For idempotency, check if the key is already active */
- qs = TEH_plugin->lookup_signing_key (
- TEH_plugin->cls,
- session,
- &akc->s_sigs[i].exchange_pub,
- &META);
- is_active = true; /* if we pass, it's active! */
- }
+ &start_sign,
+ &end_sign,
+ &end_legal);
if (qs < 0)
{
if (GNUNET_DB_STATUS_SOFT_ERROR == qs)
@@ -245,12 +238,24 @@ add_keys (void *cls,
}
if (0 == qs)
{
- *mhd_ret = TALER_MHD_reply_with_error (
- connection,
- MHD_HTTP_NOT_FOUND,
- TALER_EC_EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_UNKNOWN,
- TALER_B2S (&akc->s_sigs[i].exchange_pub));
- return qs;
+ if (GNUNET_OK !=
+ TEH_keys_get_timing (&akc->s_sigs[i].exchange_pub,
+ &start_sign,
+ &end_sign,
+ &end_legal))
+ {
+ /* For idempotency, check if the key is already active */
+ *mhd_ret = TALER_MHD_reply_with_error (
+ connection,
+ MHD_HTTP_NOT_FOUND,
+ TALER_EC_EXCHANGE_MANAGEMENT_KEYS_SIGNKEY_UNKNOWN,
+ TALER_B2S (&akc->s_sigs[i].exchange_pub));
+ return qs;
+ }
+ }
+ else
+ {
+ is_active = true; /* if we pass, it's active! */
}
/* check signature is valid */
@@ -258,12 +263,11 @@ add_keys (void *cls,
if (GNUNET_OK !=
TALER_exchange_offline_signkey_validity_verify (
&akc->s_sigs[i].exchange_pub,
- x,
- y,
- z,
+ start_sign,
+ end_sign,
+ end_legal,
&TEH_master_public_key,
- &
- & akc->s_sigs[i].master_sig))
+ &akc->s_sigs[i].master_sig))
{
GNUNET_break_op (0);
return TALER_MHD_reply_with_error (
@@ -278,7 +282,7 @@ add_keys (void *cls,
qs = TEH_plugin->activate_signing_key (
TEH_plugin->cls,
session,
- &akc->s_sigs[i].exchange_pub,
+ &akc->s_sigs[i].exchange_pub, // FIXME: provision meta data!?
&akc->s_sigs[i].master_sig);
if (qs < 0)
{