From d30f26a4d2ac40be2e29fea09b9573adb1f5c066 Mon Sep 17 00:00:00 2001 From: swrup Date: Sun, 30 Nov 2025 14:23:55 +0100 Subject: [PATCH] --- src/management.ml | 26 +++++++++++++++++++++++--- src/mte.ml | 5 ++++- tools/offline.ml | 18 +++--------------- 3 files changed, 30 insertions(+), 19 deletions(-) diff --git a/src/management.ml b/src/management.ml index 7e21f511..5e37c9b8 100644 --- a/src/management.ml +++ b/src/management.ml @@ -110,9 +110,29 @@ let keys_get req server _env = let* () = add ~field:"content-type" "application/json" in respond `OK +type foo = { key: string } + +let foo_jsont = + let open Jsont in + let enc foo = foo.key in + let make key = { key } in + Object.map ~kind:"foo" make |> Object.mem "key" string ~enc |> Object.finish + let keys_post req _server _env = let open Vif.Response in let open Syntax in - let* () = with_string req {||} in - let* () = add ~field:"content-type" "application/json" in - respond `OK + match Vif.Request.of_json req with + | Ok (foo : foo) -> + let str = Fmt.str "key: %s@." foo.key in + let* () = + Vif.Response.add ~field:"content-type" "text/plain; charset=utf-8" + in + let* () = Vif.Response.with_string req str in + Vif.Response.respond `OK + | Error (`Msg msg) -> + Logs.err (fun m -> m "Invalid JSON: %s" msg); + let* () = + Vif.Response.add ~field:"content-type" "text/plain; charset=utf-8" + in + let* () = Vif.Response.with_string req msg in + Vif.Response.respond (`Code 422) diff --git a/src/mte.ml b/src/mte.ml index 8439cdb0..9f8d5949 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -33,7 +33,10 @@ let routes = get_ (rel / "privacy" /?? nil) --> Static.privacy; get_ (rel / "test" /?? nil) --> Database.test_activate; get_ (rel / "management" / "keys" /?? nil) --> Management.keys_get; - post (rel / "management" / "keys" /?? nil) any --> Management.keys_post; + post + (rel / "management" / "keys" /?? nil) + (json_encoding Management.foo_jsont) + --> Management.keys_post; ] let () = diff --git a/tools/offline.ml b/tools/offline.ml index a4aa0843..4eee9cfd 100644 --- a/tools/offline.ml +++ b/tools/offline.ml @@ -1,6 +1,5 @@ (* TODO - clean up cmdliner - - don't depends on wget - setup: need public key in config file - check sigs *) (* doc: https://docs.taler.net/manpages/taler-exchange-offline.1.html *) @@ -11,26 +10,15 @@ let download ~base_url ~output = let uri = Uri.with_path (Uri.of_string base_url) "/management/keys/" |> Uri.to_string in - let wget = Cmd.(v "wget" % "-O" % output % uri) in - OS.Cmd.run wget + OS.Cmd.run Cmd.(v "hurl" % "--output" % output % uri) let upload ~base_url ~input = let open Bos in let uri = Uri.with_path (Uri.of_string base_url) "/management/keys/" |> Uri.to_string in - let wget = - Cmd.( - v "wget" - % "--method=POST" - % "--header='Content-Type: application/json'" - % "--body-file" - % input - % "-O" - % "/dev/null" - % uri) - in - OS.Cmd.run wget + OS.Cmd.run + Cmd.(v "hurl" % "--method" % "POST" % "--json-input" % ("@=" ^ input) % uri) let setup ~output = let output = Fpath.v output in