From 5a8f626fed307b78ba38b16464d56baa5a7081fe Mon Sep 17 00:00:00 2001 From: swrup Date: Tue, 10 Feb 2026 11:59:51 +0100 Subject: [PATCH] --- .gitignore | 1 + data/assets/default.config => assets/mte.conf | 0 {data/assets => assets}/privacy/en/0.md | 0 {data/assets => assets}/privacy/en/0.txt | 0 {data/assets => assets}/terms/en/0.md | 0 {data/assets => assets}/terms/en/0.txt | 0 default/assets/mte.conf | 74 ++++++++++++++++++ default/assets/privacy/en/0.md | 1 + default/assets/privacy/en/0.txt | 1 + default/assets/terms/en/0.md | 1 + default/assets/terms/en/0.txt | 1 + {data => default}/master_offline_private_key | Bin data/secmod/.gitkeep => secrets/.keep | 0 src/config.ml | 8 +- src/dune | 4 +- src/secmod.ml | 20 +++-- 16 files changed, 98 insertions(+), 13 deletions(-) rename data/assets/default.config => assets/mte.conf (100%) rename {data/assets => assets}/privacy/en/0.md (100%) rename {data/assets => assets}/privacy/en/0.txt (100%) rename {data/assets => assets}/terms/en/0.md (100%) rename {data/assets => assets}/terms/en/0.txt (100%) create mode 100644 default/assets/mte.conf create mode 100644 default/assets/privacy/en/0.md create mode 100644 default/assets/privacy/en/0.txt create mode 100644 default/assets/terms/en/0.md create mode 100644 default/assets/terms/en/0.txt rename {data => default}/master_offline_private_key (100%) rename data/secmod/.gitkeep => secrets/.keep (100%) diff --git a/.gitignore b/.gitignore index 39665c11..fce297da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ _build +assets data/secmod/* !data/secmod/.gitkeep diff --git a/data/assets/default.config b/assets/mte.conf similarity index 100% rename from data/assets/default.config rename to assets/mte.conf diff --git a/data/assets/privacy/en/0.md b/assets/privacy/en/0.md similarity index 100% rename from data/assets/privacy/en/0.md rename to assets/privacy/en/0.md diff --git a/data/assets/privacy/en/0.txt b/assets/privacy/en/0.txt similarity index 100% rename from data/assets/privacy/en/0.txt rename to assets/privacy/en/0.txt diff --git a/data/assets/terms/en/0.md b/assets/terms/en/0.md similarity index 100% rename from data/assets/terms/en/0.md rename to assets/terms/en/0.md diff --git a/data/assets/terms/en/0.txt b/assets/terms/en/0.txt similarity index 100% rename from data/assets/terms/en/0.txt rename to assets/terms/en/0.txt diff --git a/default/assets/mte.conf b/default/assets/mte.conf new file mode 100644 index 00000000..a6c89c52 --- /dev/null +++ b/default/assets/mte.conf @@ -0,0 +1,74 @@ +[currency-EUR] +enabled= YES +code= EUR +name= euro +fractional_input_digits= 2 +fractional_normal_digits= 2 +fractional_trailing_zero_digits= 2 +alt_unit_names= "{"0":"€","3":"k€"}" + +[exchange] +currency = EUR +currency_round_unit = EUR:0.01 +db = postgres +attribute_encryption_key = "deadbeef" +port = 3434 +bind_to = localhost +master_public_key = "SJ0NYND22VQP3MP7FM754RDX8HCKVWAXTHY9SQNBTPRJZ2SPM2S0" +stefan_abs = EUR:0.00 +stefan_log = EUR: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://localhost:3434/" + +[exchangedb] +idle_reserve_expiration_time = "1 year 2 weeks 3 hours 4 minutes 5 seconds" +legal_reserve_expiration_time = "1 year" +aggregator_shift = "1 year" +max_aml_program_runtime = "1 year" +default_purse_limit = 9999 + +[exchangedb-postgres] +config = "pgx://mte:hunter2@localhost:5432/taler-exchange" + +[taler-exchange-secmod-rsa] +lookahead_sign = "1 year" +overlap_duration = "1 year" + +[taler-exchange-secmod-eddsa] +lookahead_sign = "1 year" +overlap_duration = "1 year" + +[coin_kudo_1] +value= EUR:0.01 +duration_withdraw= "1 year" +duration_spend= "1 year" +duration_legal= "1 year" +fee_withdraw= EUR:0.00 +fee_deposit= EUR:0.00 +fee_refresh= EUR:0.00 +fee_refund= EUR:0.00 +cipher= RSA +rsa_keysize= 2048 +age_restricted= NO + +[coin_kudo_2] +value= EUR:0.02 +duration_withdraw= "1 year" +duration_spend= "1 year" +duration_legal= "1 year" +fee_withdraw= EUR:0.00 +fee_deposit= EUR:0.00 +fee_refresh= EUR:0.00 +fee_refund= EUR:0.00 +cipher= RSA +rsa_keysize= 2048 +age_restricted= NO diff --git a/default/assets/privacy/en/0.md b/default/assets/privacy/en/0.md new file mode 100644 index 00000000..419e12ef --- /dev/null +++ b/default/assets/privacy/en/0.md @@ -0,0 +1 @@ +# TODO dummy ToS diff --git a/default/assets/privacy/en/0.txt b/default/assets/privacy/en/0.txt new file mode 100644 index 00000000..419e12ef --- /dev/null +++ b/default/assets/privacy/en/0.txt @@ -0,0 +1 @@ +# TODO dummy ToS diff --git a/default/assets/terms/en/0.md b/default/assets/terms/en/0.md new file mode 100644 index 00000000..419e12ef --- /dev/null +++ b/default/assets/terms/en/0.md @@ -0,0 +1 @@ +# TODO dummy ToS diff --git a/default/assets/terms/en/0.txt b/default/assets/terms/en/0.txt new file mode 100644 index 00000000..419e12ef --- /dev/null +++ b/default/assets/terms/en/0.txt @@ -0,0 +1 @@ +# TODO dummy ToS diff --git a/data/master_offline_private_key b/default/master_offline_private_key similarity index 100% rename from data/master_offline_private_key rename to default/master_offline_private_key diff --git a/data/secmod/.gitkeep b/secrets/.keep similarity index 100% rename from data/secmod/.gitkeep rename to secrets/.keep diff --git a/src/config.ml b/src/config.ml index 775e25c5..d6222c6b 100644 --- a/src/config.ml +++ b/src/config.ml @@ -1,9 +1,11 @@ open Parse_config +let config_filename = "mte.conf" +let secrets_dir = Fpath.v "secrets" + let config_data = - let path = Fpath.to_string (Fpath.v "default.config") in - match Assets_crunch.read path with - | None -> fail "static file not found: `%s`" path + match Assets_crunch.read config_filename with + | None -> fail "static file not found: `%s`" config_filename | Some data -> let v = Config_section.parse data in v diff --git a/src/dune b/src/dune index e9b61c38..a9322eed 100644 --- a/src/dune +++ b/src/dune @@ -37,8 +37,8 @@ (rule (target assets_crunch.ml) (deps - (source_tree ../data/assets/)) + (source_tree ../assets)) (action (with-stdout-to %{null} - (run ocaml-crunch -m plain ../data/assets -o %{target})))) + (run ocaml-crunch -m plain ../assets -o %{target})))) diff --git a/src/secmod.ml b/src/secmod.ml index ed74310f..528db20d 100644 --- a/src/secmod.ml +++ b/src/secmod.ml @@ -74,8 +74,6 @@ module Make (Conn : Pg.CONN) = struct dn_section_name_ht: (denomination_hash, string) Hashtbl.t; } - let dir = Fpath.(v "data" / "secmod") - let db_lookup_signkey_data conn fname pub = let* opt = Pg.find_signkey conn pub |> unwrap_err_caqti in match opt with @@ -112,9 +110,13 @@ module Make (Conn : Pg.CONN) = struct let error_invalid_state = Fmt.error "secmod load error: invalid store state." 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 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 match opt_list l with Error () -> error_invalid_state | Ok opt -> Ok opt in @@ -125,7 +127,7 @@ module Make (Conn : Pg.CONN) = struct list_map (fun coin -> 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 match opt with | None -> Ok None @@ -378,12 +380,14 @@ module Make (Conn : Pg.CONN) = struct let store () = 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* () = Hashtbl.to_seq_values t.sk_ht |> List.of_seq |> 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)) |> list_iter (fun (fname, key) -> Data_file.write_eddsa fname key) in @@ -397,7 +401,7 @@ module Make (Conn : Pg.CONN) = struct | None -> Error "invalid state, section_name not found" | Some s -> Ok s in - let fname = Fpath.(dir / section_name) in + let fname = Fpath.(Config.secrets_dir / section_name) in (fname, key.priv)) in list_iter (fun (fname, key) -> Data_file.write_rsa fname key) l