diff --git a/contrib/gana b/contrib/gana index 99d8d9e03..fa6373d8e 160000 --- a/contrib/gana +++ b/contrib/gana @@ -1 +1 @@ -Subproject commit 99d8d9e0336bacebab5af4ae00c3f685ffd90f60 +Subproject commit fa6373d8e2432cd63da881e05f4100240e688cdf diff --git a/src/auditor/auditor-basedb.conf b/src/auditor/auditor-basedb.conf index 0c245f0d5..a67f2bf1a 100644 --- a/src/auditor/auditor-basedb.conf +++ b/src/auditor/auditor-basedb.conf @@ -113,7 +113,7 @@ currency = TESTKUDOS [merchant-exchange-default] CURRENCY = TESTKUDOS EXCHANGE_BASE_URL = http://localhost:8081/ -MASTER_KEY = NYBEPNN9Z5C6ZKM4BTD7TWRD9EBE6TE2YE12STA6GJHBP4HVQCYG +MASTER_KEY = W2824S2YNKFZDR0P57Q005J23XGFWSE2GB24A1YS0157NE3F24NG [merchant-account-merchant] ACTIVE_default = YES @@ -157,7 +157,7 @@ CONFIG = postgres:///auditor-basedb [exchange] LOOKAHEAD_SIGN = 32 weeks 1 day SIGNKEY_DURATION = 4 weeks -MASTER_PUBLIC_KEY = NYBEPNN9Z5C6ZKM4BTD7TWRD9EBE6TE2YE12STA6GJHBP4HVQCYG +MASTER_PUBLIC_KEY = W2824S2YNKFZDR0P57Q005J23XGFWSE2GB24A1YS0157NE3F24NG SIGNKEY_LEGAL_DURATION = 4 weeks UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http @@ -175,7 +175,7 @@ DATABASE = postgres:///auditor-basedb CONFIG = postgres:///auditor-basedb [auditor] -PUBLIC_KEY = 12XXM0DQBX1QH872RYVVY7E7QBC456KYJ1HT4B57K3TFD0PZ72P0 +PUBLIC_KEY = MSF4QDJMZTT9CC5EMHS480F652QAS40SEXEPAW0GGB9G9RB9B5T0 TINY_AMOUNT = TESTKUDOS:0.01 BASE_URL = http://localhost:8083/ diff --git a/src/auditor/batch.conf b/src/auditor/batch.conf new file mode 100644 index 000000000..afd1ae1fb --- /dev/null +++ b/src/auditor/batch.conf @@ -0,0 +1,187 @@ +[arm] +CONFIG = /research/taler/exchange/src/auditor/batch.conf + +[benchmark] +MERCHANT_DETAILS = merchant_details.json +BANK_DETAILS = bank_details.json + +[coin_kudos_10] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.01 +fee_refresh = TESTKUDOS:0.03 +fee_deposit = TESTKUDOS:0.01 +fee_withdraw = TESTKUDOS:0.01 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:10 + +[coin_kudos_8] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.04 +fee_refresh = TESTKUDOS:0.03 +fee_deposit = TESTKUDOS:0.02 +fee_withdraw = TESTKUDOS:0.05 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:8 + +[coin_kudos_5] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.01 +fee_refresh = TESTKUDOS:0.03 +fee_deposit = TESTKUDOS:0.01 +fee_withdraw = TESTKUDOS:0.01 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:5 + +[coin_kudos_4] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.02 +fee_refresh = TESTKUDOS:0.04 +fee_deposit = TESTKUDOS:0.03 +fee_withdraw = TESTKUDOS:0.03 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:4 + +[coin_kudos_2] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.02 +fee_refresh = TESTKUDOS:0.04 +fee_deposit = TESTKUDOS:0.03 +fee_withdraw = TESTKUDOS:0.03 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:2 + +[coin_kudos_1] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.01 +fee_refresh = TESTKUDOS:0.03 +fee_deposit = TESTKUDOS:0.02 +fee_withdraw = TESTKUDOS:0.02 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:1 + +[coin_kudos_ct_10] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.01 +fee_refresh = TESTKUDOS:0.03 +fee_deposit = TESTKUDOS:0.01 +fee_withdraw = TESTKUDOS:0.01 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:0.10 + +[coin_kudos_ct_1] +rsa_keysize = 1024 +CIPHER = RSA +fee_refund = TESTKUDOS:0.01 +fee_refresh = TESTKUDOS:0.01 +fee_deposit = TESTKUDOS:0.01 +fee_withdraw = TESTKUDOS:0.01 +duration_legal = 3 years +duration_spend = 2 years +duration_withdraw = 7 days +value = TESTKUDOS:0.01 + +[payments-generator] +exchange = http://localhost:8081/ +exchange-admin = http://localhost:18080/ +exchange_admin = http://localhost:18080/ +merchant = http://localhost:9966/ +bank = http://localhost:8082/ +instance = default +currency = TESTKUDOS + +[merchant-exchange-default] +CURRENCY = TESTKUDOS +EXCHANGE_BASE_URL = http://localhost:8081/ +MASTER_KEY = X2759N3GMFX9N4PAS10ZGXJ3XHF69PJ9K2P9QAQPJMKEH413MW2G + +[merchant-account-merchant] +ACTIVE_default = YES +HONOR_default = YES +PAYTO_URI = payto://x-taler-bank/localhost/42 + +[exchange-accountcredentials-1] +PASSWORD = x +USERNAME = Exchange +WIRE_GATEWAY_AUTH_METHOD = basic +WIRE_GATEWAY_URL = http://localhost:8082/taler-wire-gateway/Exchange/ + +[exchange-account-1] +enable_credit = yes +enable_debit = yes +PAYTO_URI = payto://x-taler-bank/localhost/Exchange + +[instance-default] +NAME = Merchant Inc. +KEYFILE = ${TALER_DATA_HOME}/merchant/default.priv + +[taler] +CURRENCY_ROUND_UNIT = TESTKUDOS:0.01 +CURRENCY = TESTKUDOS + +[merchantdb-postgres] +CONFIG = postgres:///batch + +[merchant] +DEFAULT_MAX_WIRE_FEE = TESTKUDOS:0.10 +KEYFILE = ${TALER_DATA_HOME}/merchant/merchant.priv +DEFAULT_MAX_DEPOSIT_FEE = TESTKUDOS:0.1 +WIREFORMAT = default +WIRE_TRANSFER_DELAY = 1 minute +FORCE_AUDIT = YES +UNIXPATH = ${TALER_RUNTIME_DIR}/merchant.http + +[exchangedb-postgres] +CONFIG = postgres:///batch + +[exchange] +LOOKAHEAD_SIGN = 32 weeks 1 day +SIGNKEY_DURATION = 4 weeks +MASTER_PUBLIC_KEY = X2759N3GMFX9N4PAS10ZGXJ3XHF69PJ9K2P9QAQPJMKEH413MW2G +SIGNKEY_LEGAL_DURATION = 4 weeks +UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http + +[bank] +SERVE = http +ALLOW_REGISTRATIONS = YES +SUGGESTED_EXCHANGE_PAYTO = payto://x-taler-bank/localhost/2 +SUGGESTED_EXCHANGE = http://localhost:8081/ +HTTP_PORT = 8082 +MAX_DEBT_BANK = TESTKUDOS:100000.0 +MAX_DEBT = TESTKUDOS:50.0 +DATABASE = postgres:///batch + +[auditordb-postgres] +CONFIG = postgres:///batch + +[auditor] +PUBLIC_KEY = EK8NVJACS6PCXMZ0CY33K753MGRX5BTXSTRWPGJXWFSBNJ1PNZ8G +TINY_AMOUNT = TESTKUDOS:0.01 +BASE_URL = http://localhost:8083/ + +[PATHS] +TALER_CACHE_HOME = $TALER_HOME/.cache/taler/ +TALER_CONFIG_HOME = $TALER_HOME/.config/taler/ +TALER_DATA_HOME = $TALER_HOME/.local/share/taler/ +TALER_HOME = ${PWD}/generate_auditordb_home/ + diff --git a/src/auditor/batch.sh b/src/auditor/batch.sh new file mode 100755 index 000000000..fed690432 --- /dev/null +++ b/src/auditor/batch.sh @@ -0,0 +1,235 @@ +#!/bin/bash +set -eu + +# Cleanup to run whenever we exit +function cleanup() +{ + for n in `jobs -p` + do + kill $n 2> /dev/null || true + done + wait +} + +# Install cleanup handler (except for kill -9) +trap cleanup EXIT + + +# Exit, with status code "skip" (no 'real' failure) +function exit_skip() { + echo $1 + exit 77 +} + +# Where do we write the result? +BASEDB=${1:-"batch"} + +# Name of the Postgres database we will use for the script. +# Will be dropped, do NOT use anything that might be used +# elsewhere +export TARGET_DB=`basename ${BASEDB}` + +export WALLET_DB=${BASEDB:-"wallet"}.wdb + +# delete existing wallet database +rm -f $WALLET_DB + + +# Configuration file will be edited, so we create one +# from the template. +CONF=${BASEDB}.conf +cp generate-auditor-basedb.conf $CONF + + +echo -n "Testing for taler-fakebank-run" +taler-fakebank-run -h >/dev/null /dev/null /dev/null /dev/null 2>/dev/null || true +createdb $TARGET_DB || exit_skip "Could not create database $TARGET_DB" + + +# obtain key configuration data +MASTER_PRIV_FILE=`taler-config -f -c $CONF -s exchange-offline -o MASTER_PRIV_FILE` +MASTER_PRIV_DIR=`dirname $MASTER_PRIV_FILE` +mkdir -p $MASTER_PRIV_DIR +gnunet-ecc -g1 $MASTER_PRIV_FILE > /dev/null +MASTER_PUB=`gnunet-ecc -p $MASTER_PRIV_FILE` +EXCHANGE_URL=`taler-config -c $CONF -s EXCHANGE -o BASE_URL` +MERCHANT_PORT=`taler-config -c $CONF -s MERCHANT -o PORT` +MERCHANT_URL=http://localhost:${MERCHANT_PORT}/ +BANK_PORT=`taler-config -c $CONF -s BANK -o HTTP_PORT` +BANK_URL=http://localhost:${BANK_PORT}/ +AUDITOR_URL=http://localhost:8083/ +AUDITOR_PRIV_FILE=`taler-config -f -c $CONF -s AUDITOR -o AUDITOR_PRIV_FILE` +AUDITOR_PRIV_DIR=`dirname $AUDITOR_PRIV_FILE` +mkdir -p $AUDITOR_PRIV_DIR +gnunet-ecc -g1 $AUDITOR_PRIV_FILE > /dev/null +AUDITOR_PUB=`gnunet-ecc -p $AUDITOR_PRIV_FILE` + +echo "AUDITOR PUB is $AUDITOR_PUB using file $AUDITOR_PRIV_FILE" + +# patch configuration +taler-config -c $CONF -s exchange -o MASTER_PUBLIC_KEY -V $MASTER_PUB +taler-config -c $CONF -s auditor -o PUBLIC_KEY -V $AUDITOR_PUB +taler-config -c $CONF -s merchant-exchange-default -o MASTER_KEY -V $MASTER_PUB +taler-config -c $CONF -s exchangedb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s auditordb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s merchantdb-postgres -o CONFIG -V postgres:///$TARGET_DB +taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB + +# setup exchange +echo "Setting up exchange" +taler-exchange-dbinit -c $CONF + +echo "Setting up merchant" +taler-merchant-dbinit -c $CONF + +# setup auditor +echo "Setting up auditor" +taler-auditor-dbinit -c $CONF || exit_skip "Failed to initialize auditor DB" +taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL || exit_skip "Failed to add exchange to auditor" + +# Launch services +echo "Launching services" +taler-fakebank-run -c $CONF &> taler-bank.log & +TFN=`which taler-exchange-httpd` +TBINPFX=`dirname $TFN` +TLIBEXEC=${TBINPFX}/../lib/taler/libexec/ +taler-exchange-secmod-eddsa -c $CONF 2> taler-exchange-secmod-eddsa.log & +taler-exchange-secmod-rsa -c $CONF 2> taler-exchange-secmod-rsa.log & +taler-exchange-secmod-cs -c $CONF 2> taler-exchange-secmod-cs.log & +taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log & +taler-merchant-httpd -c $CONF -L INFO 2> taler-merchant-httpd.log & +taler-exchange-wirewatch -c $CONF 2> taler-exchange-wirewatch.log & +taler-auditor-httpd -L INFO -c $CONF 2> taler-auditor-httpd.log & + +# Wait for all bank to be available (usually the slowest) +for n in `seq 1 50` +do + echo -n "." + sleep 0.2 + OK=0 + # bank + wget http://localhost:8082/ -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break +done + +if [ 1 != $OK ] +then + exit_skip "Failed to launch services" +fi + +# Wait for all services to be available +for n in `seq 1 50` +do + echo -n "." + sleep 0.1 + OK=0 + # exchange + wget http://localhost:8081/seed -o /dev/null -O /dev/null >/dev/null || continue + # merchant + wget http://localhost:9966/ -o /dev/null -O /dev/null >/dev/null || continue + # Auditor + wget http://localhost:8083/ -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break +done + +if [ 1 != $OK ] +then + exit_skip "Failed to launch services" +fi +echo " DONE" + +echo -n "Setting up keys" +taler-exchange-offline -c $CONF \ + download sign \ + enable-account payto://x-taler-bank/localhost/Exchange \ + enable-auditor $AUDITOR_PUB $AUDITOR_URL "TESTKUDOS Auditor" \ + wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 \ + global-fee now TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 TESTKUDOS:0.01 1h 1h 1year 5 \ + upload &> taler-exchange-offline.log + +echo -n "." + +for n in `seq 1 2` +do + echo -n "." + OK=0 + wget --timeout=1 http://localhost:8081/keys -o /dev/null -O /dev/null >/dev/null || continue + OK=1 + break +done + +if [ 1 != $OK ] +then + exit_skip "Failed to setup keys" +fi + +echo " DONE" +echo -n "Adding auditor signatures ..." + +taler-auditor-offline -c $CONF \ + download sign upload &> taler-auditor-offline.log + +echo " DONE" +# Setup merchant + +echo -n "Setting up merchant" + +curl -H "Content-Type: application/json" -X POST -d '{"auth":{"method":"external"},"payto_uris":["payto://x-taler-bank/localhost/43"],"id":"default","name":"default","address":{},"jurisdiction":{},"default_max_wire_fee":"TESTKUDOS:1", "default_max_deposit_fee":"TESTKUDOS:1","default_wire_fee_amortization":1,"default_wire_transfer_delay":{"d_ms" : 3600000},"default_pay_delay":{"d_ms": 3600000}}' http://localhost:9966/management/instances + + +echo " DONE" + +# run wallet CLI +echo "Ready to run wallet" +export WALLET_DB +export EXCHANGE_URL +export MERCHANT_URL +export BANK_URL +unset TALER_WALLET_INSECURE_TRUST_EXCHANGE +export TALER_WALLET_BATCH_WITHDRAWAL=1 +echo 'taler-wallet-cli --wallet-db=$WALLET_DB -L TRACE advanced bench1 --config-json "{ \"exchange\": \"$EXCHANGE_URL\", \"bank\": \"${BANK_URL}\", \"currency\": \"TESTKUDOS\", \"payto\": \"payto://x-taler-bank/localhost/foo\", \"iterations\": 100000, \"deposits\": 10, \"restartAfter\": 2 }"' +bash + +#taler-wallet-cli --no-throttle --wallet-db=$WALLET_DB api 'runIntegrationTest' \ +# "$(jq -n ' +# { +# amountToSpend: "TESTKUDOS:4", +# amountToWithdraw: "TESTKUDOS:10", +# bankBaseUrl: $BANK_URL, +# exchangeBaseUrl: $EXCHANGE_URL, +# merchantBaseUrl: $MERCHANT_URL, +# }' \ +# --arg MERCHANT_URL "$MERCHANT_URL" \ +# --arg EXCHANGE_URL "$EXCHANGE_URL" \ +# --arg BANK_URL "$BANK_URL" +# )" &> taler-wallet-cli.log + + +echo "Shutting down services" +cleanup + +# clean up +echo "Final clean up" +dropdb $TARGET_DB + +rm -rf $DATA_DIR || true +exit 0 diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c index ab1d73b4a..f468c989c 100644 --- a/src/bank-lib/fakebank.c +++ b/src/bank-lib/fakebank.c @@ -2428,6 +2428,10 @@ handle_mhd_request (void *cls, MHD_RESULT ret; (void) version; + if (0 == strncmp (url, + "/taler-wire-gateway/", + strlen ("/taler-wire-gateway/"))) + url += strlen ("/taler-wire-gateway"); GNUNET_log (GNUNET_ERROR_TYPE_INFO, "Handling request for `%s'\n", url);