diff --git a/src/http_management.ml b/src/http_management.ml index 9dea27ac..16b92e65 100644 --- a/src/http_management.ml +++ b/src/http_management.ml @@ -497,6 +497,7 @@ module Wire_disable = struct Pg.update_wire db_conn ~is_active:false ~last_change:validity_end wire |> unwrap_err_caqti in + Logs.info (fun m -> m "disabled wire method"); () let jsont = WireTeardownMessage.jsont diff --git a/test/offline_management.sh b/test/offline_management.sh index b9dabc6e..0b2702b3 100755 --- a/test/offline_management.sh +++ b/test/offline_management.sh @@ -82,7 +82,7 @@ offline_tool global-fees \ offline_tool upload --input $b --url $url"/management/global-fees" echo "[OK] /management/global-fees" -offline_tool wire \ +offline_tool enable-wire \ --master_key $master_key \ --output $b \ --payto_uri "" \ @@ -91,7 +91,13 @@ offline_tool wire \ offline_tool upload --input $b --url $url"/management/wire" echo "[OK] /management/wire" -# todo test disable wire +offline_tool disable-wire \ +--master_key $master_key \ +--output $b \ +--payto_uri "" +offline_tool upload --input $b --url $url"/management/wire/disable" +echo "[OK] /management/wire/disable" + # todo test drain # todo test aml-officer # todo test partners diff --git a/tools/offline.ml b/tools/offline.ml index 58af00b2..306f4dd8 100644 --- a/tools/offline.ml +++ b/tools/offline.ml @@ -292,7 +292,7 @@ let global_fees_cmd = ~account_fee ~purse_fee ~history_expiration ~purse_account_limit ~purse_timeout -let wire_cmd = +let enable_wire_cmd = let doc = "Enable wire method." in let payto_uri = Arg.(required & opt (some string) None & info [ "payto_uri" ]) @@ -301,14 +301,26 @@ let wire_cmd = Arg.(value & opt (some string) None & info [ "bank_label" ]) in let priority = Arg.(value & opt (some int) None & info [ "priority" ]) in - Cmd.make (Cmd.info "wire" ~doc) + Cmd.make (Cmd.info "enable-wire" ~doc) @@ let+ output = output and+ master_key = master_key and+ payto_uri = payto_uri and+ bank_label = bank_label and+ priority = priority in - wire ~output ~master_key ~payto_uri ~bank_label ~priority + enable_wire ~output ~master_key ~payto_uri ~bank_label ~priority + +let disable_wire_cmd = + let doc = "Disable wire method." in + let payto_uri = + Arg.(required & opt (some string) None & info [ "payto_uri" ]) + in + Cmd.make (Cmd.info "disable-wire" ~doc) + @@ + let+ output = output + and+ master_key = master_key + and+ payto_uri = payto_uri in + disable_wire ~output ~master_key ~payto_uri let drain_cmd = let doc = @@ -354,7 +366,8 @@ let cli = wire_fee_cmd; global_fees_cmd; drain_cmd; - wire_cmd; + enable_wire_cmd; + disable_wire_cmd; (* - *) test_hash64_cmd; ] diff --git a/tools/offline_impl.ml b/tools/offline_impl.ml index de68d512..d8452579 100644 --- a/tools/offline_impl.ml +++ b/tools/offline_impl.ml @@ -342,7 +342,7 @@ let wire_fee ~output ~master_key ~wire_method ~fee_start ~fee_end ~closing_fee hash over json, hash over string option? ~conversion_url ~credit_restrictions ~debit_restrictions *) -let wire ~output ~master_key ~payto_uri ~bank_label ~priority = +let enable_wire ~output ~master_key ~payto_uri ~bank_label ~priority = let* key = read_master_key_file master_key in let ns = Mtime_clock.now_ns () in let validity_start = Timestamp.of_s @@ Int64.unsigned_div ns 1_000_000_000L in @@ -394,6 +394,20 @@ let wire ~output ~master_key ~payto_uri ~bank_label ~priority = let* () = write_file output s in Ok () +let disable_wire ~output ~master_key ~payto_uri = + let* key = read_master_key_file master_key in + let ns = Mtime_clock.now_ns () in + let validity_end = Timestamp.of_s @@ Int64.unsigned_div ns 1_000_000_000L in + let h_wire = Hash.FullPaytoHash.hash payto_uri in + let master_sig_del = + let open Signatures.MasterDelWire in + signf (EddsaSignature.sign ~key) { end_date= validity_end; h_wire } + in + let v = Api.WireTeardownMessage.{ payto_uri; master_sig_del; validity_end } in + let* s = Api.encode Api.WireTeardownMessage.jsont v in + let* () = write_file output s in + Ok () + let drain ~output ~master_key ~debit_account_section ~credit_payto_uri ~wtid ~date ~amount = let* key = read_master_key_file master_key in