use ?last_issue_date query param
This commit is contained in:
parent
58849ab89b
commit
04bc0b6566
2 changed files with 43 additions and 13 deletions
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue