mte/src/mte.ml

87 lines
3.3 KiB
OCaml
Raw Normal View History

2025-09-13 15:56:19 +02:00
(* MTE - the MirageOS Taler Exchange
Copyright (C) 2025 Olivier Pierre <swrup@protonmail.com>
This program 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 Foundation, version 3.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>. *)
let routes =
2026-03-11 14:17:52 +01:00
let open Vifu.Uri in
let open Vifu.Route in
2026-02-12 12:13:30 +01:00
let get path = get (path /?? any) in
2026-04-11 20:35:15 +02:00
let post path json_enc = post json_enc (path /?? any) in
2026-02-12 12:13:30 +01:00
let v s = rel / s in
2026-04-11 20:35:15 +02:00
[
get (v "terms") --> Mte_tos.terms;
get (v "privacy") --> Mte_tos.privacy;
get (v "seed") --> Mte_seed.f;
get (v "config") --> Mte_config.f;
get (v "keys") --> Mte_keys.f;
]
@
let open Mte_management in
let v s = rel / "management" / s in
[
get (v "keys") --> Keys_get.f;
post (v "keys") Keys_post.json_enc --> Keys_post.f;
post (v "denominations" /% string `Path / "revoke") Denom_revoke.json_enc
--> Denom_revoke.f;
post (v "signkeys" /% string `Path / "revoke") Signkey_revoke.json_enc
--> Signkey_revoke.f;
post (v "auditors") Auditors.json_enc --> Auditors.f;
post (v "auditors" /% string `Path / "disable") Auditors_disable.json_enc
--> Auditors_disable.f;
post (v "wire-fee") Wire_fee.json_enc --> Wire_fee.f;
post (v "global-fees") Global_fees.json_enc --> Global_fees.f;
post (v "wire") Wire.json_enc --> Wire.f;
post (v "wire" / "disable") Wire_disable.json_enc --> Wire_disable.f;
post (v "drain") Drain.json_enc --> Drain.f;
post (v "aml-officers") AmlOfficer.json_enc --> AmlOfficer.f;
post (v "partners") Partners.json_enc --> Partners.f;
]
2025-09-13 15:56:19 +02:00
2026-03-11 14:17:52 +01:00
module RNG = Mirage_crypto_rng.Fortuna
2026-04-15 04:51:53 +02:00
let t0 = Mkernel.clock_monotonic ()
2025-09-13 15:56:19 +02:00
let () =
2026-03-11 14:17:52 +01:00
let ( let@ ) finally fn = Fun.protect ~finally fn in
2026-04-15 04:51:53 +02:00
Log_reporter.setup ~t0;
2026-03-11 14:17:52 +01:00
let rng =
let rng () = Mirage_crypto_rng_mkernel.initialize (module RNG) in
Mkernel.map rng Mkernel.[]
2025-09-13 15:56:19 +02:00
in
2026-03-11 14:17:52 +01:00
let storage = Mkernel.block "storage" in
let service =
let ipv4 = Ipaddr.V4.Prefix.of_string_exn "10.0.0.2/24" in
Mnet.stack ~name:"service" ipv4
2025-09-13 15:56:19 +02:00
in
2026-03-11 14:17:52 +01:00
Mkernel.(run [ rng; storage; service ])
@@ fun rng storage (stack, tcp, udp) () ->
let@ () = fun () -> Mirage_crypto_rng_mkernel.kill rng in
let@ () = fun () -> Mnet.kill stack in
let hed, he = Mnet_happy_eyeballs.create tcp in
let@ () = fun () -> Mnet_happy_eyeballs.kill hed in
let dns = Mnet_dns.create (udp, he) in
let t = Mnet_dns.transport dns in
let@ () = fun () -> Mnet_dns.Transport.kill t in
Caqti_miou.Switch.run @@ fun sw ->
(* -- *)
let fs = Fat.create storage in
let cfg = Vifu.Config.v Config.Exchange.port in
2026-04-03 13:59:59 +02:00
let devices =
Vifu.Devices.[ Mte_device.sm_eddsa; Mte_device.sm_rsa; Mte_device.pool ]
in
2026-03-30 10:03:08 +02:00
let handlers = [ Mte_handler.not_implemented_route ] in
2026-03-30 15:20:19 +02:00
let env = { Env.sw; stack; tcp; dns; fs } in
2026-03-19 23:01:04 +01:00
Logs.info (fun m -> m "Starting MTE server");
2026-03-30 10:03:08 +02:00
Vifu.run ~cfg ~devices ~handlers tcp routes env