From 7801e63a4b9fe478cdf07f78e48e04b8ed193e85 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 17 Oct 2016 13:25:03 +0200 Subject: WIP config generation --- config/generate-config | 183 +++++++++++++++++++++++++++++++++++++++ config/test.taler.net/taler.conf | 3 +- 2 files changed, 185 insertions(+), 1 deletion(-) create mode 100755 config/generate-config (limited to 'config') diff --git a/config/generate-config b/config/generate-config new file mode 100755 index 0000000..78d52c6 --- /dev/null +++ b/config/generate-config @@ -0,0 +1,183 @@ +#!/usr/bin/env python3 +import click +import sys +from collections import OrderedDict +import json +import os + +sections = OrderedDict() + +def cfg_put(section_name, key, value): + s = sections[section_name] = sections.get(section_name, OrderedDict()) + s[key] = value + +def cfg_write(file): + for section_name, section in sections.items(): + file.write("[" + section_name + "]" + "\n") + for key, value in section.items(): + file.write(key + " = " + value + "\n") + file.write("\n") + +def coin(name, + currency, + value, + d_overlap="5 minutes", + d_withdraw="32 years", + d_spend="5 years", + d_legal="10 years", + f_withdraw="0.10", + f_deposit="0.10", + f_refresh="0.10", + f_refund="0.10", + rsa_keysize="2048"): + sec = "coin_"+currency+"_"+name + cfg_put(sec, "value", currency+":"+value) + cfg_put(sec, "duration_overlap", d_overlap) + cfg_put(sec, "duration_withdraw", d_withdraw) + cfg_put(sec, "duration_spend", d_spend) + cfg_put(sec, "duration_legal", d_legal) + cfg_put(sec, "fee_withdraw", f_withdraw) + cfg_put(sec, "fee_refresh", f_refresh) + cfg_put(sec, "fee_refund", f_refund) + cfg_put(sec, "rsa_keysize", rsa_keysize) + +def config(currency, envname, exchange_pub): + cfg_put("paths", "TALER_DEPLOYMENT_SHARED", "${HOME}/shared-data") + + cfg_put("taler", "CURRENCY", "PUDOS") + + cfg_put("bank", "uwsgi_serve", "unix") + cfg_put("bank", "uwsgi_unixpath", "$HOME/sockets/bank.uwsgi") + cfg_put("bank", "database", "talertest") + + cfg_put("donations", "uwsgi_serve", "unix") + cfg_put("donations", "uwsgi_unixpath", "$HOME/sockets/donations.uwsgi") + + cfg_put("blug", "uwsgi_serve", "unix") + cfg_put("blug", "uwsgi_unixpath", "$HOME/sockets/donations.uwsgi") + + + cfg_put("merchant", "WIREFORMAT", "test") + cfg_put("merchant", "SERVE", "unix") + cfg_put("merchant", "UNIXPATH", "$HOME/sockets/merchant.http") + cfg_put("merchant", "WIRE_TRANSFER_DELAY", "1 m") + + cfg_put("merchantdb-postgres", "CONFIG", "postgres:///taler") + + cfg_put("merchant-exchange-test", "URI", "https://exchange.{}.taler.net/".format(envname)) + cfg_put("merchant-exchange-test", "MASTER_KEY", exchange_pub) + + cfg_put("frontends", "BACKEND", "https://shop.{}.taler.net/backend/".format(envname)) + + cfg_put("exchange", "serve", "unix") + cfg_put("exchange", "unixpath", "$HOME/sockets/exchange.http") + cfg_put("exchange", "master_public_key", exchange_pub) + + cfg_put("exchange", "wireformat", "test") + cfg_put("exchange", "keydir", "${TALER_DEPLOYMENT_SHARED}/exchange/live-keys/") + + cfg_put("exchange-admin", "SERVE", "unix") + cfg_put("exchange-admin", "unixpath", "$HOME/sockets/exchange-admin.http") + + cfg_put("exchangedb-postgres", "DB_CONN_STR", "postgres:///talertest") + + cfg_put("exchange-wire-outgoing-test", "bank_uri", "https://bank.{}.taler.net/".format(envname)) + cfg_put("exchange-wire-outgoing-test", "bank_account_number", "1") + cfg_put("exchange-wire-outgoing-test", "exchange_account_number", "2") + + # how long is one signkey valid? + cfg_put("exchange_keys", "signkey_duration", "18 weeks") + + # how long are the signatures with the signkey valid? + cfg_put("exchange_keys", "legal_duration", "2 years") + + # how long do we generate denomination and signing keys + # ahead of time? + cfg_put("exchange_keys", "lookahead_sign", "32 weeks 1 day") + + cfg_put("exchange_keys", "lookahead_provide", "4 weeks 1 day") + + cfg_put("Tor-wireformat", "TEST_RESPONSE_FILE", "${TALER_CONFIG_HOME}/merchant/wire/tor.json") + cfg_put("GNUnet-wireformat", "TEST_RESPONSE_FILE", "${TALER_CONFIG_HOME}/merchant/wire/gnunet.json") + cfg_put("Taler-wireformat", "TEST_RESPONSE_FILE", "${TALER_CONFIG_HOME}/merchant/wire/taler.json") + + cfg_put("merchant-instance-Tor", "KEYFILE", "${TALER_DATA_HOME}/merchant/tor.priv") + cfg_put("merchant-instance-GNUnet", "KEYFILE", "${TALER_DATA_HOME}/merchant/gnunet.priv") + cfg_put("merchant-instance-Taler", "KEYFILE", "${TALER_DATA_HOME}/merchant/taler.priv") + + + coin(currency, "ct_10", "0.10") + coin(currency, "1", "1") + coin(currency, "2", "2") + coin(currency, "5", "5") + coin(currency, "10", "10") + coin(currency, "1000", "1000") + + +def merchant_wf(envname, instance_name, acct_no): + data = OrderedDict( + type="test", + bank_uri="https://bank.{}.taler.net/".format(envname), + sig="MERCHANTSIGNATURE", + account_number=acct_no, + salt="SALT" + ) + + return (instance_name, json.dumps(data, indent=2)) + +def exchange_wf(envname, wfname, acct_no, name): + data = OrderedDict( + name=name, + type=wfname, + bank_uri="https://bank.{}.taler.net/".format(envname), + account_number=acct_no) + return (wfname, json.dumps(data, indent=2)) + + + +@click.command() +@click.option("--currency", default="KUDOS") +@click.option("--envname", default="demo") +@click.option("--outdir", default=None) +@click.option("--exchange-pub", required=True) +def main(currency, envname, outdir, exchange_pub): + + config(currency, envname, exchange_pub) + + merchant_wireformats = [ + merchant_wf(envname, "gnunet", 4), + merchant_wf(envname, "taler", 5), + merchant_wf(envname, "tor", 3), + merchant_wf(envname, "test", 6), + ] + + exchange_wireformats = [ + exchange_wf(envname, "test", 2, "The exchange") + ] + + if outdir: + os.makedirs(outdir, exist_ok=True) + tc = os.path.join(outdir, "taler.conf") + cfg_write(open(tc, "w")) + + d = os.path.join(outdir, "taler", "merchant", "wire") + os.makedirs(d, exist_ok=True) + for name, data in merchant_wireformats: + f = open(os.path.join(d, name+".json"), "w") + f.write(data) + f.close() + + d = os.path.join(outdir, "taler", "exchange", "wire") + os.makedirs(d, exist_ok=True) + for name, data in exchange_wireformats: + # These files must be signed by the exchange in + # a later step + f = open(os.path.join(d, name+".unsigned.json"), "w") + f.write(data) + f.close() + else: + cfg_write(sys.stdout) + +if __name__ == "__main__": + main() + diff --git a/config/test.taler.net/taler.conf b/config/test.taler.net/taler.conf index e8814b5..5ed5389 100644 --- a/config/test.taler.net/taler.conf +++ b/config/test.taler.net/taler.conf @@ -55,6 +55,7 @@ KEYDIR = ${TALER_DEPLOYMENT_SHARED}/exchange/live-keys/ [exchange-admin] SERVE = unix UNIXPATH = $HOME/sockets/exchange-admin.http + * the end of the message. [exchangedb-postgres] DB_CONN_STR = "postgres:///talertest" @@ -93,7 +94,7 @@ duration_withdraw = 32 years duration_spend = 12 years duration_legal = 3 years fee_withdraw = PUDOS:0.01 -fee_deposit = PUDOS:0.01 +fee_deposit = PUDOS:1.01 fee_refresh = PUDOS:0.01 fee_refund = PUDOS:0.01 rsa_keysize = 1024 -- cgit v1.2.3