diff options
Diffstat (limited to 'src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c')
-rw-r--r-- | src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c b/src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c index e109f01f..63f3f43d 100644 --- a/src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c +++ b/src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c @@ -1,6 +1,6 @@ /* This file is part of TALER - (C) 2022 Taler Systems SA + (C) 2022-2024 Taler Systems SA TALER is free software; you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software @@ -39,7 +39,21 @@ TMH_private_get_otp_devices_ID (const struct TMH_RequestHandler *rh, struct TMH_MerchantInstance *mi = hc->instance; struct TALER_MERCHANTDB_OtpDeviceDetails tp = { 0 }; enum GNUNET_DB_QueryStatus qs; + uint64_t faketime_s + = GNUNET_TIME_timestamp_to_s (GNUNET_TIME_timestamp_get ()); + struct GNUNET_TIME_Timestamp my_time; + struct TALER_Amount price; + TALER_MHD_parse_request_number (connection, + "faketime", + &faketime_s); + memset (&price, + 0, + sizeof (price)); + TALER_MHD_parse_request_amount (connection, + "price", + &price); + my_time = GNUNET_TIME_timestamp_from_s (faketime_s); GNUNET_assert (NULL != mi); qs = TMH_db->select_otp (TMH_db->cls, mi->settings.id, @@ -62,17 +76,30 @@ TMH_private_get_otp_devices_ID (const struct TMH_RequestHandler *rh, } { MHD_RESULT ret; + char *pos_confirmation; + pos_confirmation = (NULL == tp.otp_key) + ? NULL + : TALER_build_pos_confirmation (tp.otp_key, + tp.otp_algorithm, + &price, + my_time); /* Note: we deliberately (by design) do not return the otp_key */ ret = TALER_MHD_REPLY_JSON_PACK ( connection, MHD_HTTP_OK, GNUNET_JSON_pack_string ("device_description", tp.otp_description), + GNUNET_JSON_pack_allow_null ( + GNUNET_JSON_pack_string ("otp_code", + pos_confirmation)), + GNUNET_JSON_pack_uint64 ("otp_timestamp", + faketime_s), GNUNET_JSON_pack_uint64 ("otp_algorithm", tp.otp_algorithm), GNUNET_JSON_pack_uint64 ("otp_ctr", tp.otp_ctr)); + GNUNET_free (pos_confirmation); GNUNET_free (tp.otp_description); GNUNET_free (tp.otp_key); return ret; |