use ?last_issue_date query param
This commit is contained in:
parent
58849ab89b
commit
351a4513bb
2 changed files with 43 additions and 13 deletions
|
|
@ -1,5 +1,3 @@
|
||||||
[@@@ocaml.warning "-26-27"]
|
|
||||||
|
|
||||||
open Syntax
|
open Syntax
|
||||||
open Api
|
open Api
|
||||||
module String_map = Stdlib.Map.Make (Stdlib.String)
|
module String_map = Stdlib.Map.Make (Stdlib.String)
|
||||||
|
|
@ -20,10 +18,10 @@ let denomgroup_of_denomdata
|
||||||
fee_deposit;
|
fee_deposit;
|
||||||
fee_refresh;
|
fee_refresh;
|
||||||
fee_refund;
|
fee_refund;
|
||||||
age_mask;
|
age_mask= _;
|
||||||
h_pub;
|
h_pub= _;
|
||||||
master_sig;
|
master_sig;
|
||||||
revoked_sig;
|
revoked_sig= _;
|
||||||
} =
|
} =
|
||||||
let master_sig = match master_sig with None -> assert false | Some v -> v in
|
let master_sig = match master_sig with None -> assert false | Some v -> v in
|
||||||
let denoms =
|
let denoms =
|
||||||
|
|
@ -110,12 +108,34 @@ let mk_keys ~db_conn (module Sm : Secmod.S) ~last_issue_date =
|
||||||
denom_data_l
|
denom_data_l
|
||||||
in
|
in
|
||||||
let list_issue_date =
|
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
|
in
|
||||||
let denominations =
|
let denominations =
|
||||||
(* TODO really need to understand and correctly group denoms
|
let open Denom_data in
|
||||||
'exchange_sig' depends on correct denom group/order *)
|
(* TODO time
|
||||||
List.map denomgroup_of_denomdata denom_data_l
|
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
|
in
|
||||||
|
|
||||||
let signkeys =
|
let signkeys =
|
||||||
|
|
@ -220,8 +240,19 @@ let f req server _env =
|
||||||
Logs.info (fun m -> m "GET /keys/");
|
Logs.info (fun m -> m "GET /keys/");
|
||||||
let db_conn = Vif.Server.device Devices.db_connection server in
|
let db_conn = Vif.Server.device Devices.db_connection server in
|
||||||
let sm = Vif.Server.device Devices.secmod 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 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* v = mk_keys ~db_conn sm ~last_issue_date in
|
||||||
let s = Api.encode_exn jsont v in
|
let s = Api.encode_exn jsont v in
|
||||||
Ok s
|
Ok s
|
||||||
|
|
|
||||||
|
|
@ -23,9 +23,8 @@ let hello req _server _env =
|
||||||
let routes =
|
let routes =
|
||||||
let open Vif.Uri in
|
let open Vif.Uri in
|
||||||
let open Vif.Route in
|
let open Vif.Route in
|
||||||
let open Vif.Type in
|
let get_ path = get (path /?? any) in
|
||||||
let get_ path = get (path /?? nil) in
|
let post path jsont = post (Vif.Type.json_encoding jsont) (path /?? any) in
|
||||||
let post path jsont = post (json_encoding jsont) (path /?? nil) in
|
|
||||||
let tos =
|
let tos =
|
||||||
let v s = rel / s in
|
let v s = rel / s in
|
||||||
[
|
[
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue