+ wire
This commit is contained in:
parent
262aeaec66
commit
2d67963656
4 changed files with 168 additions and 0 deletions
|
|
@ -139,3 +139,16 @@ let management_global_fees req server _env =
|
||||||
Ok ""
|
Ok ""
|
||||||
in
|
in
|
||||||
respond_with_res res req
|
respond_with_res res req
|
||||||
|
|
||||||
|
let management_wire_jsont = WireSetupMessage.jsont
|
||||||
|
|
||||||
|
let management_wire 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_wire v in
|
||||||
|
let* () = update_wire ~db_conn v in
|
||||||
|
Ok ""
|
||||||
|
in
|
||||||
|
respond_with_res res req
|
||||||
|
|
|
||||||
|
|
@ -386,3 +386,54 @@ let update_global_fees ~db_conn v =
|
||||||
| None ->
|
| None ->
|
||||||
let+ () = Pg.insert_global_fee db_conn v |> unwrap_err_caqti in
|
let+ () = Pg.insert_global_fee db_conn v |> unwrap_err_caqti in
|
||||||
()
|
()
|
||||||
|
|
||||||
|
[@@@ocaml.warning "-27"]
|
||||||
|
|
||||||
|
let verify_wire
|
||||||
|
WireSetupMessage.
|
||||||
|
{
|
||||||
|
payto_uri;
|
||||||
|
master_sig_wire;
|
||||||
|
master_sig_add;
|
||||||
|
validity_start;
|
||||||
|
bank_label;
|
||||||
|
priority;
|
||||||
|
} =
|
||||||
|
(* TODO wire *)
|
||||||
|
let conversion_url = "" in
|
||||||
|
let credit_restrictions = "" in
|
||||||
|
let debit_restrictions = "" in
|
||||||
|
let open Bin_type in
|
||||||
|
let* () =
|
||||||
|
let open Bin_sig.MasterWireDetails in
|
||||||
|
verify ~key:Config.Exchange.master_public_key master_sig_wire
|
||||||
|
{
|
||||||
|
h_wire_details= FullPaytoHash.hash payto_uri;
|
||||||
|
h_conversion_url= Hash_64_cstr.hash conversion_url;
|
||||||
|
h_credit_restrictions= Hash_64_cstr.hash credit_restrictions;
|
||||||
|
h_debit_restrictions= Hash_64_cstr.hash debit_restrictions;
|
||||||
|
}
|
||||||
|
in
|
||||||
|
let* () =
|
||||||
|
let open Bin_sig.MasterAddWire in
|
||||||
|
verify ~key:Config.Exchange.master_public_key master_sig_add
|
||||||
|
{
|
||||||
|
start_date= validity_start;
|
||||||
|
h_wire= FullPaytoHash.hash payto_uri;
|
||||||
|
h_conversion_url= Hash_64_cstr.hash conversion_url;
|
||||||
|
h_credit_restrictions= Hash_64_cstr.hash credit_restrictions;
|
||||||
|
h_debit_restrictions= Hash_64_cstr.hash debit_restrictions;
|
||||||
|
}
|
||||||
|
in
|
||||||
|
Ok ()
|
||||||
|
|
||||||
|
let update_wire ~db_conn v =
|
||||||
|
let* last_change_opt =
|
||||||
|
let payto_uri = v.WireSetupMessage.payto_uri in
|
||||||
|
Pg.lookup_wire_timestamp db_conn ~payto_uri |> unwrap_err_caqti
|
||||||
|
in
|
||||||
|
match last_change_opt with
|
||||||
|
| Some _ -> Error "wire already setup"
|
||||||
|
| None ->
|
||||||
|
let+ () = Pg.insert_wire db_conn v |> unwrap_err_caqti in
|
||||||
|
()
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@ let routes =
|
||||||
--> management_wire_fee;
|
--> management_wire_fee;
|
||||||
post (v "management" / "global-fees") management_global_fees_jsont
|
post (v "management" / "global-fees") management_global_fees_jsont
|
||||||
--> management_global_fees;
|
--> management_global_fees;
|
||||||
|
post (v "management" / "wire") management_wire_jsont --> management_wire;
|
||||||
]
|
]
|
||||||
|
|
||||||
let () =
|
let () =
|
||||||
|
|
|
||||||
103
src/pg.ml
103
src/pg.ml
|
|
@ -33,8 +33,12 @@ module Caqti_type = struct
|
||||||
let eddsa_pub = EddsaPublicKey.caqti
|
let eddsa_pub = EddsaPublicKey.caqti
|
||||||
let eddsa_sig = EddsaSignature.caqti
|
let eddsa_sig = EddsaSignature.caqti
|
||||||
|
|
||||||
|
(* TODO json strings? *)
|
||||||
|
let json_str = Caqti_type.string
|
||||||
|
|
||||||
(* todo: enum type for wire_method? *)
|
(* todo: enum type for wire_method? *)
|
||||||
let wire_method = Caqti_type.string
|
let wire_method = Caqti_type.string
|
||||||
|
let payto_uri = Caqti_type.string
|
||||||
|
|
||||||
include struct
|
include struct
|
||||||
(* alias for hash *)
|
(* alias for hash *)
|
||||||
|
|
@ -297,3 +301,102 @@ let insert_global_fee =
|
||||||
history_expiration,
|
history_expiration,
|
||||||
purse_account_limit,
|
purse_account_limit,
|
||||||
master_sig )
|
master_sig )
|
||||||
|
|
||||||
|
let lookup_wire_timestamp =
|
||||||
|
let lookup_wire_timestamp =
|
||||||
|
Caqti_type.(payto_uri ->? time)
|
||||||
|
"SELECT last_change FROM wire_accounts WHERE payto_uri=$1"
|
||||||
|
in
|
||||||
|
fun (module Conn : CONN) ~payto_uri ->
|
||||||
|
Conn.find_opt lookup_wire_timestamp payto_uri
|
||||||
|
|
||||||
|
let insert_wire =
|
||||||
|
let insert_wire =
|
||||||
|
let master_sig = Bin_sig.MasterWireDetails.caqti in
|
||||||
|
Caqti_type.(
|
||||||
|
t8 payto_uri string json_str json_str master_sig time (option string)
|
||||||
|
(option int)
|
||||||
|
->. unit)
|
||||||
|
"INSERT INTO wire_accounts (payto_uri, conversion_url, \
|
||||||
|
debit_restrictions, credit_restrictions, master_sig, is_active, \
|
||||||
|
last_change, bank_label, priority) VALUES \
|
||||||
|
($1,$2,$3::TEXT::JSONB,$4::TEXT::JSONB,$5,true,$6,$7,$8)"
|
||||||
|
in
|
||||||
|
fun (module Conn : CONN)
|
||||||
|
Api.WireSetupMessage.
|
||||||
|
{
|
||||||
|
payto_uri;
|
||||||
|
master_sig_wire;
|
||||||
|
master_sig_add= _;
|
||||||
|
validity_start;
|
||||||
|
bank_label;
|
||||||
|
priority;
|
||||||
|
}
|
||||||
|
->
|
||||||
|
(* TODO wire
|
||||||
|
what about master_sig_add ? *)
|
||||||
|
let conversion_url = "" in
|
||||||
|
let credit_restrictions = "" in
|
||||||
|
let debit_restrictions = "" in
|
||||||
|
Conn.exec insert_wire
|
||||||
|
( payto_uri,
|
||||||
|
conversion_url,
|
||||||
|
debit_restrictions,
|
||||||
|
credit_restrictions,
|
||||||
|
master_sig_wire,
|
||||||
|
validity_start,
|
||||||
|
bank_label,
|
||||||
|
priority )
|
||||||
|
|
||||||
|
let update_wire =
|
||||||
|
let update_wire =
|
||||||
|
let master_sig = Bin_sig.MasterWireDetails.caqti in
|
||||||
|
Caqti_type.(
|
||||||
|
t9 payto_uri bool string json_str json_str time master_sig (option string)
|
||||||
|
(option int)
|
||||||
|
->. unit)
|
||||||
|
"UPDATE wire_accounts SET is_active=$2, conversion_url=$3, \
|
||||||
|
debit_restrictions=$4::TEXT::JSONB, \
|
||||||
|
credit_restrictions=$5::TEXT::JSONB, last_change=$6, master_sig=$7, \
|
||||||
|
bank_label=$8, priority=$9 WHERE payto_uri=$1"
|
||||||
|
in
|
||||||
|
fun (module Conn : CONN)
|
||||||
|
Api.WireSetupMessage.
|
||||||
|
{
|
||||||
|
payto_uri;
|
||||||
|
master_sig_wire;
|
||||||
|
master_sig_add= _;
|
||||||
|
validity_start;
|
||||||
|
bank_label;
|
||||||
|
priority;
|
||||||
|
}
|
||||||
|
->
|
||||||
|
(* TODO wire *)
|
||||||
|
let conversion_url = "" in
|
||||||
|
let credit_restrictions = "" in
|
||||||
|
let debit_restrictions = "" in
|
||||||
|
let enabled = true in
|
||||||
|
Conn.exec update_wire
|
||||||
|
( payto_uri,
|
||||||
|
enabled,
|
||||||
|
conversion_url,
|
||||||
|
debit_restrictions,
|
||||||
|
credit_restrictions,
|
||||||
|
validity_start,
|
||||||
|
master_sig_wire,
|
||||||
|
bank_label,
|
||||||
|
priority )
|
||||||
|
|
||||||
|
let disable_wire =
|
||||||
|
let disable_wire =
|
||||||
|
(* TODO
|
||||||
|
check syntax on this
|
||||||
|
don't erase old values with null and just change `is_active` and `last_change`? *)
|
||||||
|
Caqti_type.(t2 payto_uri time ->. unit)
|
||||||
|
"UPDATE wire_accounts SET is_active=false, conversion_url=NULL, \
|
||||||
|
debit_restrictions=NULL::TEXT::JSONB, \
|
||||||
|
credit_restrictions=NULL::TEXT::JSONB, last_change=$2, master_sig=NULL, \
|
||||||
|
bank_label=NULL, priority=NULL WHERE payto_uri=$1"
|
||||||
|
in
|
||||||
|
fun (module Conn : CONN) ~payto_uri ~validity_end ->
|
||||||
|
Conn.exec disable_wire (payto_uri, validity_end)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue