add default/assets/
This commit is contained in:
parent
a6a80b3dcf
commit
25edf21156
13 changed files with 35 additions and 37 deletions
6
.gitignore
vendored
6
.gitignore
vendored
|
|
@ -1,5 +1,5 @@
|
||||||
_build
|
_build
|
||||||
data/secmod/*
|
|
||||||
!data/secmod/.gitkeep
|
|
||||||
|
|
||||||
_taler_exchange_sql
|
_taler_exchange_sql
|
||||||
|
assets
|
||||||
|
secrets
|
||||||
|
!secrets/.keep
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,11 @@
|
||||||
open Parse_config
|
open Parse_config
|
||||||
|
|
||||||
|
let config_filename = "mte.conf"
|
||||||
|
let secrets_dir = Fpath.v "secrets"
|
||||||
|
|
||||||
let config_data =
|
let config_data =
|
||||||
let path = Fpath.to_string (Fpath.v "default.config") in
|
match Assets_crunch.read config_filename with
|
||||||
match Assets_crunch.read path with
|
| None -> fail "static file not found: `%s`" config_filename
|
||||||
| None -> fail "static file not found: `%s`" path
|
|
||||||
| Some data ->
|
| Some data ->
|
||||||
let v = Config_section.parse data in
|
let v = Config_section.parse data in
|
||||||
v
|
v
|
||||||
|
|
|
||||||
4
src/dune
4
src/dune
|
|
@ -37,8 +37,8 @@
|
||||||
(rule
|
(rule
|
||||||
(target assets_crunch.ml)
|
(target assets_crunch.ml)
|
||||||
(deps
|
(deps
|
||||||
(source_tree ../data/assets/))
|
(source_tree ../assets))
|
||||||
(action
|
(action
|
||||||
(with-stdout-to
|
(with-stdout-to
|
||||||
%{null}
|
%{null}
|
||||||
(run ocaml-crunch -m plain ../data/assets -o %{target}))))
|
(run ocaml-crunch -m plain ../assets -o %{target}))))
|
||||||
|
|
|
||||||
|
|
@ -74,8 +74,6 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
dn_section_name_ht: (denomination_hash, string) Hashtbl.t;
|
dn_section_name_ht: (denomination_hash, string) Hashtbl.t;
|
||||||
}
|
}
|
||||||
|
|
||||||
let dir = Fpath.(v "data" / "secmod")
|
|
||||||
|
|
||||||
let db_lookup_signkey_data conn fname pub =
|
let db_lookup_signkey_data conn fname pub =
|
||||||
let* opt = Pg.find_signkey conn pub |> unwrap_err_caqti in
|
let* opt = Pg.find_signkey conn pub |> unwrap_err_caqti in
|
||||||
match opt with
|
match opt with
|
||||||
|
|
@ -112,9 +110,13 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
let error_invalid_state =
|
let error_invalid_state =
|
||||||
Fmt.error "secmod load error: invalid store state."
|
Fmt.error "secmod load error: invalid store state."
|
||||||
in
|
in
|
||||||
let* sm_key_priv = Data_file.read_eddsa Fpath.(dir / "sk_sm") in
|
let* sm_key_priv =
|
||||||
|
Data_file.read_eddsa Fpath.(Config.secrets_dir / "sk_sm")
|
||||||
|
in
|
||||||
let* signkeys =
|
let* signkeys =
|
||||||
let l = List.init 1 (fun i -> Fpath.(dir / Fmt.str "sk_%d" i)) in
|
let l =
|
||||||
|
List.init 1 (fun i -> Fpath.(Config.secrets_dir / Fmt.str "sk_%d" i))
|
||||||
|
in
|
||||||
let* l = list_map (fun fname -> load_signkey conn fname) l in
|
let* l = list_map (fun fname -> load_signkey conn fname) l in
|
||||||
match opt_list l with Error () -> error_invalid_state | Ok opt -> Ok opt
|
match opt_list l with Error () -> error_invalid_state | Ok opt -> Ok opt
|
||||||
in
|
in
|
||||||
|
|
@ -125,7 +127,7 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
list_map
|
list_map
|
||||||
(fun coin ->
|
(fun coin ->
|
||||||
let section_name = coin.section_name in
|
let section_name = coin.section_name in
|
||||||
let fname = Fpath.(dir / section_name) in
|
let fname = Fpath.(Config.secrets_dir / section_name) in
|
||||||
let* opt = Data_file.read_rsa fname in
|
let* opt = Data_file.read_rsa fname in
|
||||||
match opt with
|
match opt with
|
||||||
| None -> Ok None
|
| None -> Ok None
|
||||||
|
|
@ -378,12 +380,14 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
|
|
||||||
let store () =
|
let store () =
|
||||||
Miou.Mutex.protect t.lock @@ fun () ->
|
Miou.Mutex.protect t.lock @@ fun () ->
|
||||||
let* () = Data_file.write_eddsa Fpath.(dir / "sk_sm") t.sm_key_priv in
|
let* () =
|
||||||
|
Data_file.write_eddsa Fpath.(Config.secrets_dir / "sk_sm") t.sm_key_priv
|
||||||
|
in
|
||||||
let* () =
|
let* () =
|
||||||
Hashtbl.to_seq_values t.sk_ht
|
Hashtbl.to_seq_values t.sk_ht
|
||||||
|> List.of_seq
|
|> List.of_seq
|
||||||
|> List.mapi (fun i (key : signkey) ->
|
|> List.mapi (fun i (key : signkey) ->
|
||||||
let fname = Fpath.(dir / Fmt.str "sk_%d" i) in
|
let fname = Fpath.(Config.secrets_dir / Fmt.str "sk_%d" i) in
|
||||||
(fname, key.priv))
|
(fname, key.priv))
|
||||||
|> list_iter (fun (fname, key) -> Data_file.write_eddsa fname key)
|
|> list_iter (fun (fname, key) -> Data_file.write_eddsa fname key)
|
||||||
in
|
in
|
||||||
|
|
@ -397,7 +401,7 @@ module Make (Conn : Pg.CONN) = struct
|
||||||
| None -> Error "invalid state, section_name not found"
|
| None -> Error "invalid state, section_name not found"
|
||||||
| Some s -> Ok s
|
| Some s -> Ok s
|
||||||
in
|
in
|
||||||
let fname = Fpath.(dir / section_name) in
|
let fname = Fpath.(Config.secrets_dir / section_name) in
|
||||||
(fname, key.priv))
|
(fname, key.priv))
|
||||||
in
|
in
|
||||||
list_iter (fun (fname, key) -> Data_file.write_rsa fname key) l
|
list_iter (fun (fname, key) -> Data_file.write_rsa fname key) l
|
||||||
|
|
|
||||||
|
|
@ -6,13 +6,15 @@ a="tmp_a.json"
|
||||||
b="tmp_b.json"
|
b="tmp_b.json"
|
||||||
|
|
||||||
auditor_pub=$(<"./test/auditor_public_key")
|
auditor_pub=$(<"./test/auditor_public_key")
|
||||||
|
master_key="./default/master_offline_private_key"
|
||||||
zero_euro="EUR:0.0"
|
zero_euro="EUR:0.0"
|
||||||
|
|
||||||
dune exec offline -- download --output $a
|
dune exec offline -- download --output $a
|
||||||
dune exec offline -- sign --input $a --output $b
|
dune exec offline -- sign --master_key $master_key --input $a --output $b
|
||||||
dune exec offline -- upload --input $b --url "/management/keys"
|
dune exec offline -- upload --input $b --url "/management/keys"
|
||||||
|
|
||||||
dune exec offline -- enable-auditor \
|
dune exec offline -- enable-auditor \
|
||||||
|
--master_key $master_key \
|
||||||
--output $b \
|
--output $b \
|
||||||
--auditor_url "auditor.example.com" \
|
--auditor_url "auditor.example.com" \
|
||||||
--auditor_name "auditor example" \
|
--auditor_name "auditor example" \
|
||||||
|
|
@ -21,6 +23,7 @@ dune exec offline -- enable-auditor \
|
||||||
dune exec offline -- upload --input $b --url "/management/auditors"
|
dune exec offline -- upload --input $b --url "/management/auditors"
|
||||||
|
|
||||||
dune exec offline -- wire-fee \
|
dune exec offline -- wire-fee \
|
||||||
|
--master_key $master_key \
|
||||||
--output $b \
|
--output $b \
|
||||||
--wire_method "xxx" \
|
--wire_method "xxx" \
|
||||||
--fee_start 0 \
|
--fee_start 0 \
|
||||||
|
|
@ -30,6 +33,7 @@ dune exec offline -- wire-fee \
|
||||||
dune exec offline -- upload --input $b --url "/management/wire-fee"
|
dune exec offline -- upload --input $b --url "/management/wire-fee"
|
||||||
|
|
||||||
dune exec offline -- global-fees \
|
dune exec offline -- global-fees \
|
||||||
|
--master_key $master_key \
|
||||||
--output $b \
|
--output $b \
|
||||||
--start_date 0 \
|
--start_date 0 \
|
||||||
--end_date 99999999 \
|
--end_date 99999999 \
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,7 @@
|
||||||
(* TODO
|
(* TODO
|
||||||
|
change download_cmd/upload_cmd
|
||||||
|
change arguments: '_' -> '-'
|
||||||
|
|
||||||
all management operations:
|
all management operations:
|
||||||
/management/wire
|
/management/wire
|
||||||
/management/wire/disable
|
/management/wire/disable
|
||||||
|
|
@ -65,18 +68,9 @@ module Arg = struct
|
||||||
Arg.Conv.make ~docv:"eddsa public key argument" ~parser ~pp ()
|
Arg.Conv.make ~docv:"eddsa public key argument" ~parser ~pp ()
|
||||||
end
|
end
|
||||||
|
|
||||||
let default_master_offline_key_file = "data/master_offline_private_key"
|
|
||||||
(*
|
|
||||||
let default_response_file = "response.json"
|
|
||||||
let default_request_file = "request.json"
|
|
||||||
*)
|
|
||||||
|
|
||||||
let master_key =
|
let master_key =
|
||||||
let doc = "Master offline Eddsa private key file." in
|
let doc = "Master offline Eddsa private key file." in
|
||||||
Arg.(
|
Arg.(required & opt (some file) None & info [ "master_key" ] ~doc)
|
||||||
value
|
|
||||||
& opt file default_master_offline_key_file
|
|
||||||
& info [ "master_key_file" ] ~doc)
|
|
||||||
|
|
||||||
let input =
|
let input =
|
||||||
let doc = "input file" in
|
let doc = "input file" in
|
||||||
|
|
@ -94,10 +88,7 @@ let setup_cmd =
|
||||||
let doc = "Generate offline master keys" in
|
let doc = "Generate offline master keys" in
|
||||||
let output =
|
let output =
|
||||||
let doc = "output file" in
|
let doc = "output file" in
|
||||||
Arg.(
|
Arg.(required & opt (some filepath) None & info [ "o"; "output" ] ~doc)
|
||||||
value
|
|
||||||
& opt filepath default_master_offline_key_file
|
|
||||||
& info [ "o"; "output" ] ~doc)
|
|
||||||
in
|
in
|
||||||
Cmd.make (Cmd.info "setup" ~doc)
|
Cmd.make (Cmd.info "setup" ~doc)
|
||||||
@@
|
@@
|
||||||
|
|
@ -105,17 +96,14 @@ let setup_cmd =
|
||||||
setup ~output
|
setup ~output
|
||||||
|
|
||||||
let download_cmd =
|
let download_cmd =
|
||||||
let doc = "GET /management/keys/" in
|
let doc = "GET" in
|
||||||
let man =
|
Cmd.make (Cmd.info "download" ~doc)
|
||||||
[ `S Manpage.s_description; `P "$(cmd) download /management/keys." ]
|
|
||||||
in
|
|
||||||
Cmd.make (Cmd.info "download" ~doc ~man)
|
|
||||||
@@
|
@@
|
||||||
let+ output = output in
|
let+ output = output in
|
||||||
download ~output
|
download ~output
|
||||||
|
|
||||||
let upload_cmd =
|
let upload_cmd =
|
||||||
let doc = "POST input.json data to url (default /management/keys)" in
|
let doc = "POST" in
|
||||||
Cmd.make (Cmd.info "upload" ~doc)
|
Cmd.make (Cmd.info "upload" ~doc)
|
||||||
@@
|
@@
|
||||||
let+ input = input and+ url = url in
|
let+ input = input and+ url = url in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue