From af09c697b8c52bda93b7b9f2a4e325585eb8fe26 Mon Sep 17 00:00:00 2001 From: swrup Date: Thu, 11 Dec 2025 04:48:51 +0100 Subject: [PATCH] add auditors diable --- src/handler.ml | 14 ++++++++++++++ src/management.ml | 28 +++++++++++++++++++++++++++- src/mte.ml | 4 ++++ 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/src/handler.ml b/src/handler.ml index 9ffcfd56..091a33fc 100644 --- a/src/handler.ml +++ b/src/handler.ml @@ -99,3 +99,17 @@ let management_auditors req server _env = Ok "" in respond_with_res res req + +let management_auditors_disable_jsont = AuditorTeardownMessage.jsont + +let management_auditors_disable req auditor_pub server _env = + let open Management in + let db_conn = Vif.Server.device Devices.db_connection server in + let res = + let* auditor_pub = Crypto.EddsaPublicKey.of_b32 auditor_pub in + let* v = Vif.Request.of_json req |> unwrap_err_msg in + let* () = verify_auditor_disable_sig auditor_pub v in + let* () = auditor_disable ~db_conn auditor_pub v in + Ok "" + in + respond_with_res res req diff --git a/src/management.ml b/src/management.ml index 4323345a..e44c1943 100644 --- a/src/management.ml +++ b/src/management.ml @@ -264,9 +264,35 @@ let update_auditor ~db_conn let cmp = Timestamp.compare last_date validity_start |> Option.get in if cmp > 0 then Error "more recent management auditor already present" else + let enabled = true in let+ () = Pg.update_auditor db_conn ~auditor_pub ~auditor_url ~auditor_name - ~enabled:true ~change_date:validity_start + ~enabled ~change_date:validity_start + |> unwrap_err_caqti + in + () + +let verify_auditor_disable_sig auditor_pub + AuditorTeardownMessage.{ master_sig; validity_end } = + let open Bin_sig.MasterDelAuditor in + verify ~key:Config.Exchange.master_public_key master_sig + { end_date= validity_end; auditor_pub } + +let auditor_disable ~db_conn auditor_pub + AuditorTeardownMessage.{ master_sig= _; validity_end } = + let* last_date_opt = + Pg.lookup_auditor_timestamp db_conn auditor_pub |> unwrap_err_caqti + in + match last_date_opt with + | None -> Error "auditor not found" + | Some last_date -> + let cmp = Timestamp.compare last_date validity_end |> Option.get in + if cmp > 0 then Error "more recent management auditor already present" + else + let enabled = false in + let+ () = + Pg.update_auditor db_conn ~auditor_pub ~auditor_url:"" + ~auditor_name:"" ~enabled ~change_date:validity_end |> unwrap_err_caqti in () diff --git a/src/mte.ml b/src/mte.ml index 530826a2..b330574c 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -45,6 +45,10 @@ let routes = --> management_signkey_revoke; post (v "management" / "auditors") management_auditors_jsont --> management_auditors; + post + (v "management" / "auditors" /% string `Path / "disable") + management_auditors_disable_jsont + --> management_auditors_disable; ] let () =