From 625c194fffd2e338284c65f1a67fbafaa2a50f18 Mon Sep 17 00:00:00 2001 From: swrup Date: Thu, 11 Dec 2025 09:50:04 +0100 Subject: [PATCH] + partners --- src/handler.ml | 13 +++++++++++++ src/management.ml | 30 ++++++++++++++++++++++++++++-- src/mte.ml | 2 ++ src/pg.ml | 30 ++++++++++++++++++++++++++++++ 4 files changed, 73 insertions(+), 2 deletions(-) diff --git a/src/handler.ml b/src/handler.ml index 30f62eda..1ffc0378 100644 --- a/src/handler.ml +++ b/src/handler.ml @@ -191,3 +191,16 @@ let management_aml_officers req server _env = Ok "" in respond_with_res res req + +let management_partners_jsont = ExchangePartnerSetupRequest.jsont + +let management_partners req server _env = + let open Management in + let db_conn = Vif.Server.device Devices.db_connection server in + let res = + let* v = Vif.Request.of_json req |> unwrap_err_msg in + let* () = verify_partner v in + let* () = update_partner ~db_conn v in + Ok "" + in + respond_with_res res req diff --git a/src/management.ml b/src/management.ml index f1765019..158bcd27 100644 --- a/src/management.ml +++ b/src/management.ml @@ -476,7 +476,7 @@ let verify_aml_officier officer_pub; officer_name; is_active; - read_only=_; + read_only= _; master_sig; change_date; } = @@ -494,4 +494,30 @@ let update_aml_officier ~db_conn v = let+ _last_change = Pg.insert_aml_officer db_conn v |> unwrap_err_caqti in () -(*[@@@ocaml.warning "-27"]*) +[@@@ocaml.warning "-27"] + +let verify_partner + ExchangePartnerSetupRequest. + { + partner_base_url; + partner_pub; + wad_frequency; + master_sig; + start_date; + end_date; + wad_fee; + } = + let open Bin_sig.PartnerConfiguration in + verify ~key:Config.Exchange.master_public_key master_sig + { + partner_pub; + start_date; + end_date; + wad_frequency; + wad_fee; + h_url= Bin_type.Hash_64_cstr.hash partner_base_url; + } + +let update_partner ~db_conn v = + let+ () = Pg.insert_partner db_conn v |> unwrap_err_caqti in + () diff --git a/src/mte.ml b/src/mte.ml index 6dc7964a..7a54c866 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -59,6 +59,8 @@ let routes = post (v "management" / "drain") management_drain_jsont --> management_drain; post (v "management" / "aml-officers") management_aml_officers_jsont --> management_aml_officers; + post (v "management" / "partners") management_partners_jsont + --> management_partners; ] let () = diff --git a/src/pg.ml b/src/pg.ml index b094fe59..7403b79e 100644 --- a/src/pg.ml +++ b/src/pg.ml @@ -450,3 +450,33 @@ let insert_aml_officer = -> Conn.find exchange_do_insert_aml_officer (officer_pub, master_sig, officer_name, is_active, read_only, change_date) + +let insert_partner = + let insert_partner = + let master_sig = Bin_sig.PartnerConfiguration.caqti in + Caqti_type.( + t7 eddsa_pub time time time_span amount master_sig string ->. unit) + "INSERT INTO partners (partner_master_pub, start_date, end_date, \ + wad_frequency, wad_fee, master_sig, partner_base_url) VALUES ($1, $2, \ + $3, $4, ($5,$6), $7, $8) ON CONFLICT DO NOTHING" + in + fun (module Conn : CONN) + Api.ExchangePartnerSetupRequest. + { + partner_base_url; + partner_pub; + wad_frequency; + master_sig; + start_date; + end_date; + wad_fee; + } + -> + Conn.exec insert_partner + ( partner_pub, + start_date, + end_date, + wad_frequency, + wad_fee, + master_sig, + partner_base_url )