summaryrefslogtreecommitdiff
path: root/src/backend/taler-merchant-httpd_private-get-otp-devices-ID.c
diff options
context:
space:
mode:
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.c29
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;