add --postgres-password cmdline arg + make keys
This commit is contained in:
parent
42b7e13eae
commit
6cb6a96784
11 changed files with 84 additions and 53 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -2,4 +2,4 @@ _build
|
||||||
_dbinit_sql
|
_dbinit_sql
|
||||||
vendors
|
vendors
|
||||||
assets
|
assets
|
||||||
secmod.fat
|
keys
|
||||||
|
|
|
||||||
19
GNUmakefile
19
GNUmakefile
|
|
@ -1,4 +1,4 @@
|
||||||
storage=secmod.fat
|
storage=./keys/secmod.fat
|
||||||
service=tap0
|
service=tap0
|
||||||
|
|
||||||
setup-switch:
|
setup-switch:
|
||||||
|
|
@ -15,12 +15,22 @@ clean:
|
||||||
rm -rf _build/
|
rm -rf _build/
|
||||||
rm -rf vendors/
|
rm -rf vendors/
|
||||||
|
|
||||||
assets:
|
keys:
|
||||||
@cp -r default/assets ./
|
@mkdir -p keys
|
||||||
|
@dune exec tools/offline.exe -- generate-eddsa-key --output ./keys/master
|
||||||
|
@read -sp "Enter postgres password: " POSTGRES_PASSWORD; \
|
||||||
|
echo; \
|
||||||
|
printf $${POSTGRES_PASSWORD} > ./keys/postgres_password
|
||||||
|
|
||||||
secmod.fat:
|
secmod.fat:
|
||||||
mfat make --sectors=2048 $(storage)
|
mfat make --sectors=2048 $(storage)
|
||||||
|
|
||||||
|
assets:
|
||||||
|
@cp -r default/assets ./
|
||||||
|
|
||||||
|
config:
|
||||||
|
@sed "s/%%MASTER_PUBLIC_KEY%%/$$(cat ./keys/master.pub)/" -i assets/mte.conf
|
||||||
|
|
||||||
src/manifest.json:
|
src/manifest.json:
|
||||||
@dune exec src/mte.exe > src/manifest.json
|
@dune exec src/mte.exe > src/manifest.json
|
||||||
|
|
||||||
|
|
@ -29,4 +39,5 @@ build: vendors
|
||||||
@dune build --workspace dune-workspace.solo5 src/mte.exe
|
@dune build --workspace dune-workspace.solo5 src/mte.exe
|
||||||
|
|
||||||
run: build
|
run: build
|
||||||
@solo5-hvt --block:storage=$(storage) --net:service=$(service) -- ./_build/solo5/src/mte.exe
|
@solo5-hvt --block:storage=$(storage) --net:service=$(service) -- ./_build/solo5/src/mte.exe \
|
||||||
|
--postgres-password=$$(cat ./keys/postgres_password)
|
||||||
|
|
|
||||||
|
|
@ -7,28 +7,6 @@ fractional_normal_digits= 2
|
||||||
fractional_trailing_zero_digits= 2
|
fractional_trailing_zero_digits= 2
|
||||||
alt_unit_names= "{"0":"ク","3":"kク"}"
|
alt_unit_names= "{"0":"ク","3":"kク"}"
|
||||||
|
|
||||||
[exchange]
|
|
||||||
currency = KUDOS
|
|
||||||
currency_round_unit = KUDOS:0.01
|
|
||||||
db = postgres
|
|
||||||
attribute_encryption_key = "deadbeef"
|
|
||||||
port = 3434
|
|
||||||
bind_to = localhost
|
|
||||||
master_public_key = "SJ0NYND22VQP3MP7FM754RDX8HCKVWAXTHY9SQNBTPRJZ2SPM2S0"
|
|
||||||
stefan_abs = KUDOS:0.00
|
|
||||||
stefan_log = KUDOS:0.00
|
|
||||||
stefan_lin = 0.00
|
|
||||||
aggregator_idle_sleep_interval = "1 hour"
|
|
||||||
closer_idle_sleep_interval = "1 hour"
|
|
||||||
transfer_idle_sleep_interval = "1 hour"
|
|
||||||
wirewatch_idle_sleep_interval = "1 hour"
|
|
||||||
signkey_legal_duration = "1 year"
|
|
||||||
max_keys_caching = "4 weeks"
|
|
||||||
enable_kyc = NO
|
|
||||||
terms_etag = "0"
|
|
||||||
privacy_etag = "0"
|
|
||||||
base_url = "http://10.0.0.2:3434/"
|
|
||||||
|
|
||||||
[exchangedb]
|
[exchangedb]
|
||||||
idle_reserve_expiration_time = "1 year 2 weeks 3 hours 4 minutes 5 seconds"
|
idle_reserve_expiration_time = "1 year 2 weeks 3 hours 4 minutes 5 seconds"
|
||||||
legal_reserve_expiration_time = "1 year"
|
legal_reserve_expiration_time = "1 year"
|
||||||
|
|
@ -36,9 +14,6 @@ aggregator_shift = "1 year"
|
||||||
max_aml_program_runtime = "1 year"
|
max_aml_program_runtime = "1 year"
|
||||||
default_purse_limit = 9999
|
default_purse_limit = 9999
|
||||||
|
|
||||||
[exchangedb-postgres]
|
|
||||||
config = "pgx://mte:hunter2@10.0.0.1:5432/taler-exchange"
|
|
||||||
|
|
||||||
[taler-exchange-secmod-rsa]
|
[taler-exchange-secmod-rsa]
|
||||||
lookahead_sign = "1 year"
|
lookahead_sign = "1 year"
|
||||||
overlap_duration = "1 hour"
|
overlap_duration = "1 hour"
|
||||||
|
|
@ -74,3 +49,25 @@ fee_refund= KUDOS:0.00
|
||||||
cipher= RSA
|
cipher= RSA
|
||||||
rsa_keysize= 2048
|
rsa_keysize= 2048
|
||||||
age_restricted= NO
|
age_restricted= NO
|
||||||
|
|
||||||
|
[exchange]
|
||||||
|
currency = KUDOS
|
||||||
|
currency_round_unit = KUDOS:0.01
|
||||||
|
db = postgres
|
||||||
|
stefan_abs = KUDOS:0.00
|
||||||
|
stefan_log = KUDOS:0.00
|
||||||
|
stefan_lin = 0.00
|
||||||
|
aggregator_idle_sleep_interval = "1 hour"
|
||||||
|
closer_idle_sleep_interval = "1 hour"
|
||||||
|
transfer_idle_sleep_interval = "1 hour"
|
||||||
|
wirewatch_idle_sleep_interval = "1 hour"
|
||||||
|
signkey_legal_duration = "1 year"
|
||||||
|
max_keys_caching = "4 weeks"
|
||||||
|
enable_kyc = NO
|
||||||
|
terms_etag = "0"
|
||||||
|
privacy_etag = "0"
|
||||||
|
bind_to = 10.0.0.2
|
||||||
|
port = 3434
|
||||||
|
base_url = "http://10.0.0.2/"
|
||||||
|
attribute_encryption_key = "deadbeef"
|
||||||
|
master_public_key = "%%MASTER_PUBLIC_KEY%%"
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -62,10 +62,6 @@ module Exchangedb = struct
|
||||||
let default_purse_limit = get "default_purse_limit" |> int
|
let default_purse_limit = get "default_purse_limit" |> int
|
||||||
end
|
end
|
||||||
|
|
||||||
module Exchangedb_postgres = struct
|
|
||||||
let config = get config ~section:"exchangedb-postgres" ~field:"config" |> uri
|
|
||||||
end
|
|
||||||
|
|
||||||
module Currency = struct
|
module Currency = struct
|
||||||
type t = {
|
type t = {
|
||||||
enabled: [ `YES | `NO ];
|
enabled: [ `YES | `NO ];
|
||||||
|
|
|
||||||
|
|
@ -4,4 +4,5 @@ type t = {
|
||||||
tcp: Mnet.TCP.state;
|
tcp: Mnet.TCP.state;
|
||||||
dns: Mnet_dns.t;
|
dns: Mnet_dns.t;
|
||||||
fs: Fat.t;
|
fs: Fat.t;
|
||||||
|
db_uri: Uri.t;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
31
src/mte.ml
31
src/mte.ml
|
|
@ -50,10 +50,9 @@ let routes =
|
||||||
|
|
||||||
module RNG = Mirage_crypto_rng.Fortuna
|
module RNG = Mirage_crypto_rng.Fortuna
|
||||||
|
|
||||||
let t0 = Mkernel.clock_monotonic ()
|
let run postgres_password =
|
||||||
|
|
||||||
let () =
|
|
||||||
let ( let@ ) finally fn = Fun.protect ~finally fn in
|
let ( let@ ) finally fn = Fun.protect ~finally fn in
|
||||||
|
let t0 = Mkernel.clock_monotonic () in
|
||||||
Log_reporter.setup ~t0;
|
Log_reporter.setup ~t0;
|
||||||
let rng =
|
let rng =
|
||||||
let rng () = Mirage_crypto_rng_mkernel.initialize (module RNG) in
|
let rng () = Mirage_crypto_rng_mkernel.initialize (module RNG) in
|
||||||
|
|
@ -81,6 +80,30 @@ let () =
|
||||||
Vifu.Devices.[ Mte_device.sm_eddsa; Mte_device.sm_rsa; Mte_device.pool ]
|
Vifu.Devices.[ Mte_device.sm_eddsa; Mte_device.sm_rsa; Mte_device.pool ]
|
||||||
in
|
in
|
||||||
let handlers = [ Mte_handler.not_implemented_route ] in
|
let handlers = [ Mte_handler.not_implemented_route ] in
|
||||||
let env = { Env.sw; stack; tcp; dns; fs } in
|
let env =
|
||||||
|
let db_uri =
|
||||||
|
Uri.of_string
|
||||||
|
@@ Fmt.str "pgx://mte:%s@10.0.0.1:5432/taler-exchange" postgres_password
|
||||||
|
in
|
||||||
|
{ Env.sw; stack; tcp; dns; fs; db_uri }
|
||||||
|
in
|
||||||
Logs.info (fun m -> m "Starting MTE server");
|
Logs.info (fun m -> m "Starting MTE server");
|
||||||
Vifu.run ~cfg ~devices ~handlers tcp routes env
|
Vifu.run ~cfg ~devices ~handlers tcp routes env
|
||||||
|
|
||||||
|
open Cmdliner
|
||||||
|
|
||||||
|
(* todo: tls *)
|
||||||
|
let postgres_password =
|
||||||
|
let doc = "PostgreSQL password." in
|
||||||
|
let open Arg in
|
||||||
|
required & opt (some string) None & info [ "postgres-password" ] ~doc
|
||||||
|
|
||||||
|
let term =
|
||||||
|
let open Term in
|
||||||
|
const run $ postgres_password
|
||||||
|
|
||||||
|
let cmd =
|
||||||
|
let info = Cmd.info "blame" in
|
||||||
|
Cmd.v info term
|
||||||
|
|
||||||
|
let () = Cmd.(exit @@ eval cmd)
|
||||||
|
|
|
||||||
|
|
@ -9,9 +9,8 @@ let sm_rsa =
|
||||||
Vifu.Device.v ~name:"secmod-rsa" ~finally [] f
|
Vifu.Device.v ~name:"secmod-rsa" ~finally [] f
|
||||||
|
|
||||||
let pool : (Env.t, Pg.pool) Vifu.Device.device =
|
let pool : (Env.t, Pg.pool) Vifu.Device.device =
|
||||||
let f { Env.sw; stack; tcp; dns; fs= _ } =
|
let f { Env.sw; stack; tcp; dns; db_uri; fs= _ } =
|
||||||
Logs.info (fun m -> m "Connecting to database");
|
Logs.info (fun m -> m "Connecting to database");
|
||||||
let db_uri = Config.Exchangedb_postgres.config in
|
|
||||||
let post_connect conn = Pg.preflight conn in
|
let post_connect conn = Pg.preflight conn in
|
||||||
match Caqti_mnet.connect_pool ~post_connect ~sw stack tcp dns db_uri with
|
match Caqti_mnet.connect_pool ~post_connect ~sw stack tcp dns db_uri with
|
||||||
| Error e ->
|
| Error e ->
|
||||||
|
|
|
||||||
|
|
@ -4,14 +4,20 @@ set -e
|
||||||
|
|
||||||
a="/tmp/a.json"
|
a="/tmp/a.json"
|
||||||
b="/tmp/b.json"
|
b="/tmp/b.json"
|
||||||
|
|
||||||
url="http://10.0.0.2:3434"
|
|
||||||
auditor_pub="A17JXR3E6J4CXDPYT7S1H25PGJ3ABS26TQ38654QCX0TB59RPMF0"
|
|
||||||
master_key="./default/master_offline_private_key"
|
|
||||||
zero_kudos="KUDOS:0.0"
|
zero_kudos="KUDOS:0.0"
|
||||||
|
|
||||||
# TODO launch mte.exe and kill it a then end with its PID
|
url="http://10.0.0.2:3434"
|
||||||
|
|
||||||
|
if [ ! -d ./keys ]; then
|
||||||
|
echo "./keys folder not found"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
master_key="./keys/master"
|
||||||
|
#auditor_pub=$(cat "./keys/auditor_0.pub")
|
||||||
|
auditor_pub="BQCHC907487KZD5BYD7S8AV2RY8Z5QZSJQVM4JJ8VBH17SPET2BG"
|
||||||
|
|
||||||
|
|
||||||
|
# TODO launch mte.exe and kill it a then end with its PID
|
||||||
mte-offline-tool() {
|
mte-offline-tool() {
|
||||||
dune exec mte-offline-tool -- "$@" > /dev/null
|
dune exec mte-offline-tool -- "$@" > /dev/null
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -85,10 +85,8 @@ let url =
|
||||||
let doc = "url" in
|
let doc = "url" in
|
||||||
Arg.(required & opt (some string) None & info [ "url" ] ~doc)
|
Arg.(required & opt (some string) None & info [ "url" ] ~doc)
|
||||||
|
|
||||||
let setup_cmd =
|
let generate_eddsa_key_cmd =
|
||||||
let doc =
|
let doc = "Generate a Ed25519 key pair" in
|
||||||
"Generate offline master keys, write private and public key to file"
|
|
||||||
in
|
|
||||||
let output =
|
let output =
|
||||||
let doc = "private key output file" in
|
let doc = "private key output file" in
|
||||||
Arg.(required & opt (some filepath) None & info [ "o"; "output" ] ~doc)
|
Arg.(required & opt (some filepath) None & info [ "o"; "output" ] ~doc)
|
||||||
|
|
@ -100,11 +98,11 @@ let setup_cmd =
|
||||||
in
|
in
|
||||||
Arg.(value & opt (some filepath) None & info [ "output-pubkey" ] ~doc)
|
Arg.(value & opt (some filepath) None & info [ "output-pubkey" ] ~doc)
|
||||||
in
|
in
|
||||||
Cmd.make (Cmd.info "setup" ~doc)
|
Cmd.make (Cmd.info "generate-eddsa-key" ~doc)
|
||||||
@@
|
@@
|
||||||
let+ output = output and+ output_pubkey = output_pubkey in
|
let+ output = output and+ output_pubkey = output_pubkey in
|
||||||
let output_pubkey = Option.value ~default:(output ^ ".pub") output_pubkey in
|
let output_pubkey = Option.value ~default:(output ^ ".pub") output_pubkey in
|
||||||
setup ~output ~output_pubkey
|
generate_eddsa_key ~output ~output_pubkey
|
||||||
|
|
||||||
let download_cmd =
|
let download_cmd =
|
||||||
let doc =
|
let doc =
|
||||||
|
|
@ -333,7 +331,7 @@ let cli =
|
||||||
in
|
in
|
||||||
Cmd.group info
|
Cmd.group info
|
||||||
[
|
[
|
||||||
setup_cmd;
|
generate_eddsa_key_cmd;
|
||||||
download_cmd;
|
download_cmd;
|
||||||
sign_cmd;
|
sign_cmd;
|
||||||
upload_cmd;
|
upload_cmd;
|
||||||
|
|
|
||||||
|
|
@ -201,7 +201,7 @@ let upload ~input ~url =
|
||||||
% ("@" ^ input)
|
% ("@" ^ input)
|
||||||
% url)
|
% url)
|
||||||
|
|
||||||
let setup ~output ~output_pubkey =
|
let generate_eddsa_key ~output ~output_pubkey =
|
||||||
Result.unwrap_err
|
Result.unwrap_err
|
||||||
@@
|
@@
|
||||||
let priv, pub = Mirage_crypto_ec.Ed25519.generate () in
|
let priv, pub = Mirage_crypto_ec.Ed25519.generate () in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue