use ?last_issue_date query param

This commit is contained in:
swrup 2026-01-24 02:16:14 +01:00
parent 58849ab89b
commit 04bc0b6566
2 changed files with 43 additions and 13 deletions

View file

@ -1,5 +1,3 @@
[@@@ocaml.warning "-26-27"]
open Syntax
open Api
module String_map = Stdlib.Map.Make (Stdlib.String)
@ -20,10 +18,10 @@ let denomgroup_of_denomdata
fee_deposit;
fee_refresh;
fee_refund;
age_mask;
h_pub;
age_mask= _;
h_pub= _;
master_sig;
revoked_sig;
revoked_sig= _;
} =
let master_sig = match master_sig with None -> assert false | Some v -> v in
let denoms =
@ -110,12 +108,34 @@ let mk_keys ~db_conn (module Sm : Secmod.S) ~last_issue_date =
denom_data_l
in
let list_issue_date =
match denom_data_l with [] -> None | v :: _ -> v.stamp_start
match denom_data_l with [] -> None | v :: _ -> v.Denom_data.stamp_start
in
let denominations =
(* TODO really need to understand and correctly group denoms
'exchange_sig' depends on correct denom group/order *)
List.map denomgroup_of_denomdata denom_data_l
let open Denom_data in
(* TODO time
truncated timestamps to int for comparison *)
let timestamp_to_int = function
| None -> 0
| Some ptime -> ptime |> Ptime.to_float_s |> Int.of_float
in
(* if `?last_issue_date` query param does not exactly match the `stamp_start`
of one of the denomination keys, all keys are returned *)
let l =
match last_issue_date with
| None -> denom_data_l
| Some last_issue_date -> (
match
List.find_opt
(fun v -> timestamp_to_int v.stamp_start = last_issue_date)
denom_data_l
with
| None -> denom_data_l
| Some _ ->
List.filter
(fun v -> timestamp_to_int v.stamp_start >= last_issue_date)
denom_data_l)
in
List.map denomgroup_of_denomdata l
in
let signkeys =
@ -220,8 +240,19 @@ let f req server _env =
Logs.info (fun m -> m "GET /keys/");
let db_conn = Vif.Server.device Devices.db_connection server in
let sm = Vif.Server.device Devices.secmod server in
let last_issue_date =
match Vif.Queries.get req "last_issue_date" with
| [] -> None
| v :: _ -> (
(* TODO time *)
match float_of_string_opt v with
| None ->
Fmt.failwith
"invalid `?last_issue_date` query param, float_of_string failure"
| Some v -> Some (Int.of_float v))
in
let res =
let last_issue_date = Ptime_clock.now () |> Option.some in
(*let last_issue_date = Ptime_clock.now () |> Option.some in*)
let* v = mk_keys ~db_conn sm ~last_issue_date in
let s = Api.encode_exn jsont v in
Ok s

View file

@ -23,9 +23,8 @@ let hello req _server _env =
let routes =
let open Vif.Uri in
let open Vif.Route in
let open Vif.Type in
let get_ path = get (path /?? nil) in
let post path jsont = post (json_encoding jsont) (path /?? nil) in
let get_ path = get (path /?? any) in
let post path jsont = post (Vif.Type.json_encoding jsont) (path /?? any) in
let tos =
let v s = rel / s in
[