challenger

OAuth 2.0-based authentication service that validates user can receive messages at a certain address
Log | Files | Refs | Submodules | README | LICENSE

commit 2d2206eb5e5cd9e63d02a79a163ff91ae11447db
parent e7f9a8a938ef3aa7ae95b8fee26716832d56d98a
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Sun, 19 Jul 2026 23:10:19 +0200

check for expiration everywhere

Diffstat:
Msrc/challengerdb/challenger_do_challenge_set_address_and_pin.sql | 1+
Msrc/challengerdb/challenger_do_validate_and_solve_pin.sql | 2++
Msrc/challengerdb/validate_solve_pin.c | 29++++++++++++++++-------------
Msrc/challengerdb/validation_get.c | 22++++++++++++++--------
4 files changed, 33 insertions(+), 21 deletions(-)

diff --git a/src/challengerdb/challenger_do_challenge_set_address_and_pin.sql b/src/challengerdb/challenger_do_challenge_set_address_and_pin.sql @@ -54,6 +54,7 @@ SELECT address INTO my_status FROM validations WHERE nonce=in_nonce + AND expiration_time > in_now FOR UPDATE; IF NOT FOUND diff --git a/src/challengerdb/challenger_do_validate_and_solve_pin.sql b/src/challengerdb/challenger_do_validate_and_solve_pin.sql @@ -18,6 +18,7 @@ DROP FUNCTION IF EXISTS challenger_do_validate_and_solve_pin; CREATE FUNCTION challenger_do_validate_and_solve_pin ( IN in_nonce BYTEA, IN in_new_pin INT4, + IN in_now INT8, OUT out_not_found BOOLEAN, OUT out_exhausted BOOLEAN, OUT out_no_challenge BOOLEAN, @@ -42,6 +43,7 @@ SELECT auth_attempts_left INTO my_status FROM validations WHERE nonce=in_nonce + AND expiration_time > in_now FOR UPDATE; IF NOT FOUND diff --git a/src/challengerdb/validate_solve_pin.c b/src/challengerdb/validate_solve_pin.c @@ -27,22 +27,25 @@ enum GNUNET_DB_QueryStatus -CHALLENGERDB_validate_solve_pin (struct CHALLENGERDB_PostgresContext *ctx, - const struct CHALLENGER_ValidationNonceP *nonce - , - uint32_t new_pin, - bool *solved, - bool *exhausted, - bool *no_challenge, - char **state, - uint32_t *addr_left, - uint32_t *auth_attempts_left, - uint32_t *pin_transmissions_left, - char **client_redirect_uri) +CHALLENGERDB_validate_solve_pin ( + struct CHALLENGERDB_PostgresContext *ctx, + const struct CHALLENGER_ValidationNonceP *nonce, + uint32_t new_pin, + bool *solved, + bool *exhausted, + bool *no_challenge, + char **state, + uint32_t *addr_left, + uint32_t *auth_attempts_left, + uint32_t *pin_transmissions_left, + char **client_redirect_uri) { + struct GNUNET_TIME_Absolute now + = GNUNET_TIME_absolute_get (); struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_auto_from_type (nonce), GNUNET_PQ_query_param_uint32 (&new_pin), + GNUNET_PQ_query_param_absolute_time (&now), GNUNET_PQ_query_param_end }; bool not_found; @@ -87,7 +90,7 @@ CHALLENGERDB_validate_solve_pin (struct CHALLENGERDB_PostgresContext *ctx, ",out_pin_transmissions_left AS pin_transmissions_left" ",out_client_redirect_uri AS client_redirect_uri" " FROM challenger_do_validate_and_solve_pin" - " ($1,$2);"); + " ($1,$2,$3);"); qs = GNUNET_PQ_eval_prepared_singleton_select (ctx->conn, "do_validate_solve_pin", params, diff --git a/src/challengerdb/validation_get.c b/src/challengerdb/validation_get.c @@ -25,17 +25,22 @@ #include "validation_get.h" #include "pg_helper.h" + enum GNUNET_DB_QueryStatus -CHALLENGERDB_validation_get (struct CHALLENGERDB_PostgresContext *ctx, - const struct CHALLENGER_ValidationNonceP *nonce, - char **client_secret, - json_t **address, - char **client_scope, - char **client_state, - char **client_redirect_uri) +CHALLENGERDB_validation_get ( + struct CHALLENGERDB_PostgresContext *ctx, + const struct CHALLENGER_ValidationNonceP *nonce, + char **client_secret, + json_t **address, + char **client_scope, + char **client_state, + char **client_redirect_uri) { + struct GNUNET_TIME_Absolute now + = GNUNET_TIME_absolute_get (); struct GNUNET_PQ_QueryParam params[] = { GNUNET_PQ_query_param_auto_from_type (nonce), + GNUNET_PQ_query_param_absolute_time (&now), GNUNET_PQ_query_param_end }; struct GNUNET_PQ_ResultSpec rs[] = { @@ -72,7 +77,8 @@ CHALLENGERDB_validation_get (struct CHALLENGERDB_PostgresContext *ctx, " FROM validations" " JOIN clients " " USING (client_serial_id)" - " WHERE nonce=$1"); + " WHERE nonce=$1" + " AND expiration_time > $2"); return GNUNET_PQ_eval_prepared_singleton_select (ctx->conn, "validation_get", params,