aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2024-06-24 12:16:22 +0200
committerChristian Grothoff <christian@grothoff.org>2024-06-24 12:16:22 +0200
commit96231ed0362edd8e959cb03d585296994d609ff5 (patch)
tree00a1f7dd06fbd8176a37f781b9cd3a662424e7c6 /src
parent843bf7140aa89b3d171dbc1f6525e5d6720eda89 (diff)
fix lookup_token_family_key logic
Diffstat (limited to 'src')
-rw-r--r--src/backenddb/pg_lookup_token_family_key.c198
1 files changed, 98 insertions, 100 deletions
diff --git a/src/backenddb/pg_lookup_token_family_key.c b/src/backenddb/pg_lookup_token_family_key.c
index 7883339b..40e592cf 100644
--- a/src/backenddb/pg_lookup_token_family_key.c
+++ b/src/backenddb/pg_lookup_token_family_key.c
@@ -28,13 +28,15 @@
#include "pg_lookup_token_family_key.h"
#include "pg_helper.h"
+
enum GNUNET_DB_QueryStatus
-TMH_PG_lookup_token_family_key (void *cls,
- const char *instance_id,
- const char *token_family_slug,
- struct GNUNET_TIME_Timestamp min_valid_after,
- struct GNUNET_TIME_Timestamp max_valid_after,
- struct TALER_MERCHANTDB_TokenFamilyKeyDetails *details)
+TMH_PG_lookup_token_family_key (
+ void *cls,
+ const char *instance_id,
+ const char *token_family_slug,
+ struct GNUNET_TIME_Timestamp min_valid_after,
+ struct GNUNET_TIME_Timestamp max_valid_after,
+ struct TALER_MERCHANTDB_TokenFamilyKeyDetails *details)
{
struct PostgresClosure *pg = cls;
struct GNUNET_PQ_QueryParam params[] = {
@@ -45,6 +47,38 @@ TMH_PG_lookup_token_family_key (void *cls,
GNUNET_PQ_query_param_end
};
+ check_connection (pg);
+ PREPARE (pg,
+ "lookup_token_family_key",
+ "SELECT"
+ " h_pub"
+ ",pub"
+ ",priv"
+ ",cipher"
+ ",merchant_token_family_keys.valid_after as key_valid_after"
+ ",merchant_token_family_keys.valid_before as key_valid_before"
+ ",slug"
+ ",name"
+ ",description"
+ ",description_i18n"
+ ",merchant_token_families.valid_after"
+ ",merchant_token_families.valid_before"
+ ",duration"
+ ",kind"
+ ",issued"
+ ",used"
+ " FROM merchant_token_families"
+ " LEFT JOIN merchant_token_family_keys"
+ " ON merchant_token_families.token_family_serial = merchant_token_family_keys.token_family_serial"
+ " AND merchant_token_family_keys.valid_after >= $3"
+ " AND merchant_token_family_keys.valid_after <= $4" /* TODO: Should this be < instead of <=? */
+ " JOIN merchant_instances"
+ " USING (merchant_serial)"
+ " WHERE merchant_instances.merchant_id=$1"
+ " AND slug=$2"
+ " ORDER BY merchant_token_family_keys.valid_after ASC"
+ " LIMIT 1");
+
if (NULL == details)
{
struct GNUNET_PQ_ResultSpec rs_null[] = {
@@ -58,108 +92,72 @@ TMH_PG_lookup_token_family_key (void *cls,
rs_null);
}
- char *kind;
-
- details->valid_after = GNUNET_TIME_UNIT_ZERO_TS;
- details->valid_before = GNUNET_TIME_UNIT_ZERO_TS;
-
- struct GNUNET_PQ_ResultSpec rs[] = {
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_blind_sign_pub ("pub",
+ {
+ char *kind;
+ enum GNUNET_DB_QueryStatus qs;
+ struct GNUNET_PQ_ResultSpec rs[] = {
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_blind_sign_pub ("pub",
&details->pub.public_key),
NULL),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_blind_sign_priv ("priv",
- &details->priv.private_key),
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_blind_sign_priv ("priv",
+ &details->priv.private_key),
NULL),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_timestamp ("key_valid_after",
- &details->valid_after),
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_timestamp ("key_valid_after",
+ &details->valid_after),
NULL),
- GNUNET_PQ_result_spec_allow_null (
- GNUNET_PQ_result_spec_timestamp ("key_valid_before",
- &details->valid_before),
+ GNUNET_PQ_result_spec_allow_null (
+ GNUNET_PQ_result_spec_timestamp ("key_valid_before",
+ &details->valid_before),
NULL),
- GNUNET_PQ_result_spec_string ("slug",
- &details->token_family.slug),
- GNUNET_PQ_result_spec_string ("name",
- &details->token_family.name),
- GNUNET_PQ_result_spec_string ("description",
- &details->token_family.description),
- TALER_PQ_result_spec_json ("description_i18n",
- &details->token_family.description_i18n),
- GNUNET_PQ_result_spec_timestamp ("valid_after",
- &details->token_family.valid_after),
- GNUNET_PQ_result_spec_timestamp ("valid_before",
- &details->token_family.valid_before),
- GNUNET_PQ_result_spec_relative_time ("duration",
- &details->token_family.duration),
- GNUNET_PQ_result_spec_string ("kind",
- &kind),
- GNUNET_PQ_result_spec_uint64 ("issued",
- &details->token_family.issued),
- GNUNET_PQ_result_spec_uint64 ("used",
- &details->token_family.used),
- GNUNET_PQ_result_spec_end
- };
-
- memset (details,
- 0,
- sizeof (*details));
-
- check_connection (pg);
- PREPARE (pg,
- "lookup_token_family_key",
- "SELECT"
- " h_pub"
- ",pub"
- ",priv"
- ",cipher"
- ",merchant_token_family_keys.valid_after as key_valid_after"
- ",merchant_token_family_keys.valid_before as key_valid_before"
- ",slug"
- ",name"
- ",description"
- ",description_i18n"
- ",merchant_token_families.valid_after"
- ",merchant_token_families.valid_before"
- ",duration"
- ",kind"
- ",issued"
- ",used"
- " FROM merchant_token_families"
- " LEFT JOIN merchant_token_family_keys"
- " ON merchant_token_families.token_family_serial = merchant_token_family_keys.token_family_serial"
- " AND merchant_token_family_keys.valid_after >= $3"
- " AND merchant_token_family_keys.valid_after <= $4" /* TODO: Should this be < instead of <=? */
- " JOIN merchant_instances"
- " USING (merchant_serial)"
- " WHERE merchant_instances.merchant_id=$1"
- " AND slug=$2"
- " ORDER BY merchant_token_family_keys.valid_after ASC"
- " LIMIT 1");
- enum GNUNET_DB_QueryStatus qs;
- qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
- "lookup_token_family_key",
- params,
- rs);
+ GNUNET_PQ_result_spec_string ("slug",
+ &details->token_family.slug),
+ GNUNET_PQ_result_spec_string ("name",
+ &details->token_family.name),
+ GNUNET_PQ_result_spec_string ("description",
+ &details->token_family.description),
+ TALER_PQ_result_spec_json ("description_i18n",
+ &details->token_family.description_i18n),
+ GNUNET_PQ_result_spec_timestamp ("valid_after",
+ &details->token_family.valid_after),
+ GNUNET_PQ_result_spec_timestamp ("valid_before",
+ &details->token_family.valid_before),
+ GNUNET_PQ_result_spec_relative_time ("duration",
+ &details->token_family.duration),
+ GNUNET_PQ_result_spec_string ("kind",
+ &kind),
+ GNUNET_PQ_result_spec_uint64 ("issued",
+ &details->token_family.issued),
+ GNUNET_PQ_result_spec_uint64 ("used",
+ &details->token_family.used),
+ GNUNET_PQ_result_spec_end
+ };
- if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
- {
- if (0 == strcmp(kind, "discount"))
- details->token_family.kind = TALER_MERCHANTDB_TFK_Discount;
- else if (0 == strcmp(kind, "subscription"))
- details->token_family.kind = TALER_MERCHANTDB_TFK_Subscription;
- else
+ memset (details,
+ 0,
+ sizeof (*details));
+ qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
+ "lookup_token_family_key",
+ params,
+ rs);
+ if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
{
+ if (0 == strcmp (kind,
+ "discount"))
+ details->token_family.kind = TALER_MERCHANTDB_TFK_Discount;
+ else if (0 == strcmp (kind,
+ "subscription"))
+ details->token_family.kind = TALER_MERCHANTDB_TFK_Subscription;
+ else
+ {
+ GNUNET_free (kind);
+ GNUNET_break (0);
+ return GNUNET_DB_STATUS_HARD_ERROR;
+ }
GNUNET_free (kind);
- GNUNET_break (0);
- return GNUNET_DB_STATUS_HARD_ERROR;
}
-
- if (NULL != kind)
- GNUNET_free (kind);
+ return qs;
}
-
- return qs;
}