+ 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 ""
|
||||
in
|
||||
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 ->
|
||||
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;
|
||||
post (v "management" / "global-fees") management_global_fees_jsont
|
||||
--> management_global_fees;
|
||||
post (v "management" / "wire") management_wire_jsont --> management_wire;
|
||||
]
|
||||
|
||||
let () =
|
||||
|
|
|
|||
103
src/pg.ml
103
src/pg.ml
|
|
@ -33,8 +33,12 @@ module Caqti_type = struct
|
|||
let eddsa_pub = EddsaPublicKey.caqti
|
||||
let eddsa_sig = EddsaSignature.caqti
|
||||
|
||||
(* TODO json strings? *)
|
||||
let json_str = Caqti_type.string
|
||||
|
||||
(* todo: enum type for wire_method? *)
|
||||
let wire_method = Caqti_type.string
|
||||
let payto_uri = Caqti_type.string
|
||||
|
||||
include struct
|
||||
(* alias for hash *)
|
||||
|
|
@ -297,3 +301,102 @@ let insert_global_fee =
|
|||
history_expiration,
|
||||
purse_account_limit,
|
||||
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