diff options
author | ms <ms@taler.net> | 2021-09-21 08:09:14 +0200 |
---|---|---|
committer | ms <ms@taler.net> | 2021-09-21 08:09:14 +0200 |
commit | 0f773715761445590cf40f2295366da67acba4d1 (patch) | |
tree | 6502e4f6f90d5b7c3eeb893fb7141facb631cdd6 | |
parent | 68a0d00e68ab8bee2c4482e751ab62af4eb14406 (diff) | |
download | deployment-0f773715761445590cf40f2295366da67acba4d1.tar.gz deployment-0f773715761445590cf40f2295366da67acba4d1.tar.bz2 deployment-0f773715761445590cf40f2295366da67acba4d1.zip |
Avoid mixed wire methods: default and blog have 'sepa'.
-rwxr-xr-x | bin/taler-deployment-config-generate-sepa | 281 | ||||
-rwxr-xr-x | bin/taler-deployment-config-instances-iban | 4 | ||||
-rwxr-xr-x | bin/taler-deployment-prepare-with-eufin | 6 |
3 files changed, 286 insertions, 5 deletions
diff --git a/bin/taler-deployment-config-generate-sepa b/bin/taler-deployment-config-generate-sepa new file mode 100755 index 0000000..959c224 --- /dev/null +++ b/bin/taler-deployment-config-generate-sepa @@ -0,0 +1,281 @@ +#!/usr/bin/env python3 +import click +import sys +from collections import OrderedDict +import json +import os +import urllib.parse +import stat +from taler_urls import get_urls, get_port + + +class ConfigFile: + def __init__(self, envname, currency, exchange_pub, filename): + self.sections = OrderedDict() + self.envname = envname + self.filename = filename + self.currency = currency + self.exchange_pub = exchange_pub + + def destroy(self): + del self.sections + self.sections = OrderedDict() + + def cfg_put(self, section_name, key, value): + s = self.sections[section_name] = self.sections.get(section_name, OrderedDict()) + s[key] = value + + def cfg_write(self, outdir): + + if outdir: + fstream = open(os.path.join(outdir, self.filename), "w") + else: + fstream = open(sys.stdout) + + for section_name, section in self.sections.items(): + fstream.write("[" + section_name + "]" + "\n") + for key, value in section.items(): + fstream.write(key + " = " + value + "\n") + fstream.write("\n") + fstream.close() + + +def coin( + obj, + name, + value, + d_withdraw="3 years", + d_spend="5 years", + d_legal="10 years", + f_withdraw="0.01", + f_deposit="0.01", + f_refresh="0.01", + f_refund="0.01", + rsa_keysize="2048", +): + sec = "coin_" + obj.currency + "_" + name + obj.cfg_put(sec, "value", obj.currency + ":" + value) + obj.cfg_put(sec, "duration_withdraw", d_withdraw) + obj.cfg_put(sec, "duration_spend", d_spend) + obj.cfg_put(sec, "duration_legal", d_legal) + obj.cfg_put(sec, "fee_withdraw", obj.currency + ":" + f_withdraw) + obj.cfg_put(sec, "fee_refresh", obj.currency + ":" + f_refresh) + obj.cfg_put(sec, "fee_refund", obj.currency + ":" + f_refund) + obj.cfg_put(sec, "fee_deposit", obj.currency + ":" + f_deposit) + obj.cfg_put(sec, "rsa_keysize", rsa_keysize) + + +def config(obj): + urls = get_urls(obj.envname) + obj.cfg_put("paths", "TALER_DATA_HOME", "${HOME}/taler-data") + obj.cfg_put("paths", "TALER_RUNTIME_DIR", "${HOME}/taler-runtime") + obj.cfg_put("taler", "CURRENCY", obj.currency) + obj.cfg_put("taler", "CURRENCY_ROUND_UNIT", f"{obj.currency}:0.01") + if obj.envname != "local": + obj.cfg_put("bank", "serve", "uwsgi") + obj.cfg_put("bank", "uwsgi_serve", "unix") + obj.cfg_put("bank", "uwsgi_unixpath", "$HOME/sockets/bank.uwsgi") + obj.cfg_put("bank", "uwsgi_unixpath_mode", "660") + else: + obj.cfg_put("bank", "serve", "http") + obj.cfg_put("bank", "http_port", get_port(urls["bank"])) + + obj.cfg_put("bank", "database", "taler" + obj.envname) + obj.cfg_put("bank", "max_debt", "%s:500.0" % obj.currency) + obj.cfg_put("bank", "max_debt_bank", "%s:1000000000.0" % obj.currency) + obj.cfg_put("bank", "allow_registrations", "YES") + obj.cfg_put("bank", "base_url", urls["bank"]) + obj.cfg_put("bank", "database", "postgres:///taler{}".format(obj.envname)) + obj.cfg_put("bank", "suggested_exchange", urls["exchange"]) + + obj.cfg_put("bank-admin", "uwsgi_serve", "unix") + obj.cfg_put("bank-admin", "uwsgi_unixpath", "$HOME/sockets/bank-admin.uwsgi") + obj.cfg_put("bank-admin", "uwsgi_unixpath_mode", "660") + + obj.cfg_put("donations", "serve", "uwsgi") + obj.cfg_put("donations", "uwsgi_serve", "unix") + obj.cfg_put("donations", "uwsgi_unixpath", "$HOME/sockets/donations.uwsgi") + obj.cfg_put("donations", "uwsgi_unixpath_mode", "660") + + obj.cfg_put("landing", "serve", "uwsgi") + obj.cfg_put("landing", "uwsgi_serve", "unix") + obj.cfg_put("landing", "uwsgi_unixpath", "$HOME/sockets/landing.uwsgi") + obj.cfg_put("landing", "uwsgi_unixpath_mode", "660") + + obj.cfg_put("blog", "serve", "uwsgi") + obj.cfg_put("blog", "uwsgi_serve", "unix") + obj.cfg_put("blog", "uwsgi_unixpath", "$HOME/sockets/shop.uwsgi") + obj.cfg_put("blog", "uwsgi_unixpath_mode", "660") + + obj.cfg_put("survey", "serve", "uwsgi") + obj.cfg_put("survey", "uwsgi_serve", "unix") + obj.cfg_put("survey", "uwsgi_unixpath", "$HOME/sockets/survey.uwsgi") + obj.cfg_put("survey", "uwsgi_unixpath_mode", "660") + obj.cfg_put("survey", "bank_password", "x") + + obj.cfg_put("backoffice-all", "backend", urls["merchant_backend"]) + + # Keep only one back-office service for all instances, for simplicity. + obj.cfg_put("backoffice-all", "uwsgi_serve", "unix") + obj.cfg_put("backoffice-all", "uwsgi_unixpath_mode", "660") + obj.cfg_put("backoffice-all", "uwsgi_unixpath", "$HOME/sockets/backoffice.uwsgi") + obj.cfg_put("backoffice-all", "instances", "FSF default Tor") + + if obj.envname != "local": + obj.cfg_put("merchant", "serve", "unix") + obj.cfg_put("merchant", "unixpath", "$HOME/sockets/merchant.http") + else: + obj.cfg_put("merchant", "serve", "tcp") + obj.cfg_put("merchant", "port", get_port(urls["merchant_backend"])) + + obj.cfg_put("merchant", "wire_transfer_delay", "0 s") + obj.cfg_put("merchant", "default_max_wire_fee", obj.currency + ":" + "0.01") + obj.cfg_put("merchant", "default_max_deposit_fee", obj.currency + ":" + "0.05") + obj.cfg_put( + "merchantdb-postgres", "config", "postgres:///taler{}".format(obj.envname) + ) + + obj.cfg_put("frontends", "backend", urls["merchant_backend"]) + + obj.cfg_put( + "merchant-exchange-{}".format(obj.currency), "master_key", obj.exchange_pub + ) + obj.cfg_put("merchant-exchange-{}".format(obj.currency), "currency", obj.currency) + + obj.cfg_put( + "merchant-exchange-{}".format(obj.currency), + "exchange_base_url", + urls["exchange"], + ) + + obj.cfg_put("auditor", "serve", "unix") + obj.cfg_put("auditor", "base_url", urls["auditor"]) + obj.cfg_put("auditor", "auditor_url", urls["auditor"]) + obj.cfg_put("auditor", "unixpath", "$HOME/sockets/auditor.http") + obj.cfg_put("auditor", "tiny_amount", obj.currency + ":0.01") + + obj.cfg_put("taler-exchange-secmod-eddsa", "unixpath", "$HOME/sockets/taler-exchange-secmod-eddsa.sock") + obj.cfg_put("taler-exchange-secmod-rsa", "unixpath", "$HOME/sockets/taler-exchange-secmod-rsa.sock") + obj.cfg_put("taler-exchange-secmod-rsa", "sm_priv_key", "${TALER_DATA_HOME}/taler-exchange-secmod-rsa/secmod-private-key") + + obj.cfg_put("exchange", "base_url", urls["exchange"]) + + if obj.envname != "local": + obj.cfg_put("exchange", "serve", "unix") + obj.cfg_put("exchange", "unixpath", "$HOME/sockets/exchange.http") + else: + obj.cfg_put("exchange", "serve", "tcp") + obj.cfg_put("exchange", "port", get_port(urls["exchange"])) + + obj.cfg_put("exchange", "master_public_key", obj.exchange_pub) + obj.cfg_put("exchange", "terms_etag", "0") + obj.cfg_put("exchange", "terms_dir", "$HOME/local/share/taler-exchange/tos") + obj.cfg_put("exchange", "privacy_etag", "0") + obj.cfg_put("exchange", "privacy_dir", "$HOME/local/share/taler-exchange/pp") + + + obj.cfg_put( + "exchangedb-postgres", "db_conn_str", "postgres:///taler{}".format(obj.envname) + ) + obj.cfg_put( + "exchangedb-postgres", "config", "postgres:///taler{}".format(obj.envname) + ) + obj.cfg_put( + "auditordb-postgres", "db_conn_str", "postgres:///taler{}".format(obj.envname) + ) + obj.cfg_put( + "auditordb-postgres", "config", "postgres:///taler{}".format(obj.envname) + ) + + bank_acct_url = "{}taler-wire-gateway/Exchange/".format(urls["bank"]) + + obj.cfg_put("exchange-account-1", "payto_uri", + "{}/EX00000000000000000000".format(urls["sepa_payto"]) + ) + obj.cfg_put("exchange-account-1", "enable_debit", "yes") + obj.cfg_put("exchange-account-1", "enable_credit", "yes") + obj.cfg_put("exchange-accountcredentials-1", "wire_gateway_auth_method", "basic") + obj.cfg_put("exchange-accountcredentials-1", "wire_gateway_url", bank_acct_url) + obj.cfg_put("exchange-accountcredentials-1", "username", "Exchange") + obj.cfg_put("exchange-accountcredentials-1", "password", "x") + + obj.cfg_put("merchant-account-merchant", "payto_uri", + "{}/ME00000000000000000000".format(urls["sepa_payto"]), + ) + obj.cfg_put("merchant-account-merchant", "wire_response", + "${TALER_DATA_HOME}/merchant/wire/merchant.json", + ) + obj.cfg_put("merchant-account-merchant", "wire_file_mode", "770") + + # The following block should be obsoleted by the new API to configure instances. + merchant_instance_names = ("default", "Tor", "GNUnet", "Taler", "FSF", "Tutorial") + for mi in merchant_instance_names: + obj.cfg_put("merchant-account-merchant", f"HONOR_{mi}", "YES") + obj.cfg_put("merchant-account-merchant", f"ACTIVE_{mi}", "YES") + + coin(obj, "ct_10", "0.10") + coin(obj, "1", "1") + coin(obj, "2", "2") + coin(obj, "5", "5") + coin(obj, "10", "10") + coin(obj, "1000", "1000") + + +@click.command() +@click.option("--currency", default="KUDOS") +@click.option("--envname", default="demo") +@click.option("--outdir", required=True) +@click.option("--exchange-pub", required=True) +# Expected to contain already the 'secret-token:' scheme. +@click.option("--frontends-apitoken", required=True) +def main(currency, envname, outdir, exchange_pub, frontends_apitoken): + + if envname not in ("tanker", "demo", "test", "int", "euro", "chf", "local"): + print("envname (%s) not demo/test/int, aborting config generation" % envname) + return + + config_files = [] + + mc = ConfigFile(envname, currency, exchange_pub, "taler.conf") + mc.cfg_put("frontends", "backend_apikey", f"{frontends_apitoken}") + config(mc) + config_files.append(mc) + + urls = get_urls(envname) + + sc = ConfigFile(envname, currency, exchange_pub, "sync.conf") + sc.cfg_put("taler", "currency", currency) + sc.cfg_put("sync", "serve", "unix") + sc.cfg_put("sync", "unixpath", "$HOME/sockets/sync.http") + sc.cfg_put("sync", "apikey", f"Bearer {frontends_apitoken}") + sc.cfg_put("sync", "annual_fee", f"{currency}:0.1") + sc.cfg_put("sync", "fulfillment_url", "taler://fulfillment-success/") + sc.cfg_put("sync", "payment_backend_url", urls["merchant_backend"] + "instances/Taler/") + sc.cfg_put("syncdb-postgres", "config", f"postgres:///taler{envname}") + config_files.append(sc) + + ac = ConfigFile(envname, currency, exchange_pub, "anastasis.conf") + ac.cfg_put("taler", "currency", currency) + ac.cfg_put("anastasis", "serve", "unix") + ac.cfg_put("anastasis", "business_name", f"GNU Taler Demo Anastasis Provider") + ac.cfg_put("anastasis", "unixpath", "$HOME/sockets/anastasis.http") + ac.cfg_put("anastasis", "annual_fee", f"{currency}:0") + ac.cfg_put("anastasis", "question_cost", f"{currency}:0") + ac.cfg_put("anastasis", "insurance", f"{currency}:0") + ac.cfg_put("anastasis", "truth_upload_fee", f"{currency}:0") + ac.cfg_put("anastasis", "fulfillment_url", "taler://fulfillment-success/") + ac.cfg_put("anastasis", "server_salt", "kreb3ia9dmj43gfa") + ac.cfg_put("stasis-postgres", "config", f"postgres:///taler{envname}") + ac.cfg_put("anastasis-merchant-backend", "payment_backend_url", urls["merchant_backend"] + "instances/anastasis/") + ac.cfg_put("anastasis-merchant-backend", "api_key", f"Bearer {frontends_apitoken}") + ac.cfg_put("authorization-question", "cost", f"{currency}:0") + ac.cfg_put("authorization-question", "enabled", "yes") + config_files.append(ac) + + assert 0 < len(config_files) + for obj in config_files: + obj.cfg_write(outdir) + + +if __name__ == "__main__": + main() diff --git a/bin/taler-deployment-config-instances-iban b/bin/taler-deployment-config-instances-iban index 36db542..2a5daef 100755 --- a/bin/taler-deployment-config-instances-iban +++ b/bin/taler-deployment-config-instances-iban @@ -18,9 +18,9 @@ import psutil from getpass import getuser ibans = dict( - default = "FR1420041010050500013M02678", + default = "ME00000000000000000000", # Must match the IBAN given in the prepare script, called IBAN_MERCHANT. - blog = "FR1420041010050500013M02606", + blog = "ME00000000000000000001", ) def expect_env(name): diff --git a/bin/taler-deployment-prepare-with-eufin b/bin/taler-deployment-prepare-with-eufin index 74aa6c6..a42668d 100755 --- a/bin/taler-deployment-prepare-with-eufin +++ b/bin/taler-deployment-prepare-with-eufin @@ -282,9 +282,9 @@ libeufin-cli \ --host-id=$EBICS_HOST echo " OK" -export IBAN_EXCHANGE="DE89370400440532013000" -export IBAN_MERCHANT="FR1420041010050500013M02606" -export IBAN_CUSTOMER="FR1420041010050500013M02607" +export IBAN_EXCHANGE="EX00000000000000000000" +export IBAN_MERCHANT="ME00000000000000000001" +export IBAN_CUSTOMER="WA00000000000000000000" # note: Ebisc schema doesn't allow dashed names. prepare_sandbox_account \ |