update generator scripts to use new -offline tools (WiP)
This commit is contained in:
parent
45926ec067
commit
4a519078e8
@ -10,6 +10,7 @@ UNIXPATH_MODE = 660
|
||||
PORT = 8081
|
||||
BASE_URL = http://localhost:8081/
|
||||
SIGNKEY_DURATION = 4 weeks
|
||||
SIGNKEY_LEGAL_DURATION = 4 weeks
|
||||
LEGAL_DURATION = 2 years
|
||||
LOOKAHEAD_SIGN = 32 weeks 1 day
|
||||
LOOKAHEAD_PROVIDE = 4 weeks 1 day
|
||||
@ -45,6 +46,7 @@ UNIXPATH = ${TALER_RUNTIME_DIR}/exchange.http
|
||||
UNIXPATH_MODE = 660
|
||||
PORT = 8083
|
||||
AUDITOR_URL = http://localhost:8083/
|
||||
BASE_URL = http://localhost:8083/
|
||||
TINY_AMOUNT = TESTKUDOS:0.01
|
||||
|
||||
[PATHS]
|
||||
|
@ -98,27 +98,18 @@ taler-config -c $CONF -s bank -o database -V postgres:///$TARGET_DB
|
||||
# setup exchange
|
||||
echo "Setting up exchange"
|
||||
taler-exchange-dbinit -c $CONF
|
||||
taler-exchange-wire -c $CONF 2> taler-exchange-wire.log
|
||||
taler-exchange-keyup -L INFO -c $CONF -o e2a.dat 2> taler-exchange-keyup.log
|
||||
|
||||
# setup auditor
|
||||
echo "Setting up auditor"
|
||||
taler-auditor-dbinit -c $CONF
|
||||
taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
|
||||
taler-auditor-sign -c $CONF -u $AUDITOR_URL -r e2a.dat -o a2e.dat -m $MASTER_PUB
|
||||
rm -f e2a.dat
|
||||
|
||||
# provide auditor's signature to exchange
|
||||
ABD=`taler-config -c $CONF -s EXCHANGEDB -o AUDITOR_BASE_DIR -f`
|
||||
mkdir -p $ABD
|
||||
mv a2e.dat $ABD
|
||||
|
||||
# Launch services
|
||||
echo "Launching services"
|
||||
taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &
|
||||
taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> taler-bank.log &
|
||||
TFN=`which taler-exchange-httpd`
|
||||
TBINPFX=`dirname $TFN`
|
||||
TLIBEXEC=${BINPFX}/../lib/libexec/taler/
|
||||
TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
|
||||
$TLIBEXEC/taler-helper-crypto-eddsa -c $CONF 2> taler-helper-crypto-eddsa.log &
|
||||
$TLIBEXEC/taler-helper-crypto-rsa -c $CONF 2> taler-helper-crypto-rsa.log &
|
||||
taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
|
||||
@ -126,6 +117,23 @@ 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 -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
|
||||
@ -133,11 +141,9 @@ do
|
||||
sleep 0.1
|
||||
OK=0
|
||||
# exchange
|
||||
wget http://localhost:8081/ -o /dev/null -O /dev/null >/dev/null || continue
|
||||
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
|
||||
# bank
|
||||
wget http://localhost:8082/ -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
|
||||
@ -148,9 +154,41 @@ 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/2 \
|
||||
wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \
|
||||
upload &> taler-exchange-offline.log
|
||||
|
||||
echo -n "."
|
||||
|
||||
for n in `seq 1 2`
|
||||
do
|
||||
echo -n "."
|
||||
OK=0
|
||||
# bank
|
||||
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
|
||||
|
||||
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 '{"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/private/instances
|
||||
|
||||
|
||||
|
@ -86,27 +86,17 @@ taler-config -c $CONF -s exchange -o REVOCATION_DIR -V "${TMP_DIR}/revdir/"
|
||||
# setup exchange
|
||||
echo "Setting up exchange"
|
||||
taler-exchange-dbinit -c $CONF
|
||||
taler-exchange-wire -c $CONF 2> taler-exchange-wire.log
|
||||
taler-exchange-keyup -L INFO -c $CONF -o e2a.dat 2> taler-exchange-keyup.log
|
||||
|
||||
# setup auditor
|
||||
echo "Setting up auditor"
|
||||
taler-auditor-dbinit -c $CONF
|
||||
taler-auditor-exchange -c $CONF -m $MASTER_PUB -u $EXCHANGE_URL
|
||||
taler-auditor-sign -c $CONF -u $AUDITOR_URL -r e2a.dat -o a2e.dat -m $MASTER_PUB
|
||||
rm -f e2a.dat
|
||||
|
||||
# provide auditor's signature to exchange
|
||||
ABD=`taler-config -c $CONF -s EXCHANGEDB -o AUDITOR_BASE_DIR -f`
|
||||
mkdir -p $ABD
|
||||
mv a2e.dat $ABD
|
||||
|
||||
# Launch services
|
||||
echo "Launching services"
|
||||
taler-bank-manage-testing $CONF postgres:///$TARGET_DB serve &> revocation-bank.log &
|
||||
TFN=`which taler-exchange-httpd`
|
||||
TBINPFX=`dirname $TFN`
|
||||
TLIBEXEC=${BINPFX}/../lib/libexec/taler/
|
||||
TLIBEXEC=${TBINPFX}/../lib/taler/libexec/
|
||||
$TLIBEXEC/taler-helper-crypto-eddsa -c $CONF 2> taler-helper-crypto-eddsa.log &
|
||||
$TLIBEXEC/taler-helper-crypto-rsa -c $CONF 2> taler-helper-crypto-rsa.log &
|
||||
taler-exchange-httpd -c $CONF 2> taler-exchange-httpd.log &
|
||||
@ -127,6 +117,12 @@ do
|
||||
OK=1
|
||||
break
|
||||
done
|
||||
|
||||
if [ 1 != $OK ]
|
||||
then
|
||||
exit_skip "Failed to launch services"
|
||||
fi
|
||||
|
||||
# Wait for all other services to be available
|
||||
for n in `seq 1 50`
|
||||
do
|
||||
@ -134,7 +130,7 @@ do
|
||||
sleep 0.1
|
||||
OK=0
|
||||
# exchange
|
||||
wget http://localhost:8081/ -o /dev/null -O /dev/null >/dev/null || continue
|
||||
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
|
||||
@ -143,7 +139,6 @@ do
|
||||
break
|
||||
done
|
||||
|
||||
|
||||
if [ 1 != $OK ]
|
||||
then
|
||||
cleanup
|
||||
@ -151,7 +146,39 @@ then
|
||||
fi
|
||||
echo " DONE"
|
||||
|
||||
echo -n "Setting up keys"
|
||||
|
||||
taler-exchange-offline -c $CONF \
|
||||
download sign \
|
||||
enable-account payto://x-taler-bank/localhost/2 \
|
||||
wire-fee now x-taler-bank TESTKUDOS:0.01 TESTKUDOS:0.01 \
|
||||
upload &> taler-exchange-offline.log
|
||||
|
||||
echo -n "."
|
||||
|
||||
for n in `seq 1 2`
|
||||
do
|
||||
echo -n "."
|
||||
OK=0
|
||||
# bank
|
||||
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
|
||||
|
||||
|
||||
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 '{"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/private/instances
|
||||
|
||||
@ -186,15 +213,14 @@ echo "Revoking denomination ${rd} (to affect coin ${rc})"
|
||||
export susp=$(echo "$coins" | jq --arg rc "$rc" '[.coins[] | select(.coin_pub != $rc) | .coin_pub]')
|
||||
|
||||
# Do the revocation
|
||||
taler-exchange-keyup -o e2a2.dat -c $CONF -r $rd
|
||||
taler-auditor-sign -c $CONF -u $AUDITOR_URL -r e2a2.dat -o a2e2.dat -m $MASTER_PUB
|
||||
rm -f e2a2.dat
|
||||
mv a2e2.dat $ABD
|
||||
taler-exchange-offline -c $CONF \
|
||||
revoke-denomination "${rd}" upload &> taler-exchange-offline-revoke.log
|
||||
|
||||
# Restart the exchange...
|
||||
kill -SIGUSR1 $EXCHANGE_PID
|
||||
sleep 1 # Give exchange time to re-scan data
|
||||
echo "Restarted the exchange post revocation"
|
||||
sleep 1 # Give exchange time to create replacmenent key
|
||||
|
||||
# Re-sign replacment keys
|
||||
taler-auditor-offline -c $CONF \
|
||||
download sign upload &> taler-auditor-offline.log
|
||||
|
||||
# Now we suspend the other coins, so later we will pay with the recouped coin
|
||||
taler-wallet-cli --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
|
||||
@ -280,15 +306,14 @@ export susp=$(echo "$coins" | jq --arg freshc "$freshc" '[.coins[] | select(.coi
|
||||
|
||||
# Do the revocation of freshc
|
||||
echo "Revoking ${fresh_denom} (to affect coin ${freshc})"
|
||||
taler-exchange-keyup -c $CONF -o e2a3.dat -r $fresh_denom
|
||||
taler-auditor-sign -c $CONF -u $AUDITOR_URL -r e2a3.dat -o a2e3.dat -m $MASTER_PUB
|
||||
rm -f e2a3.dat
|
||||
mv a2e3.dat $ABD
|
||||
taler-exchange-offline -c $CONF \
|
||||
revoke-denomination "${fresh_denom}" upload &> taler-exchange-offline-revoke-2.log
|
||||
|
||||
# Restart the exchange...
|
||||
kill -SIGUSR1 $EXCHANGE_PID
|
||||
sleep 1 # give exchange time to re-scan data
|
||||
sleep 1 # Give exchange time to create replacmenent key
|
||||
|
||||
# Re-sign replacment keys
|
||||
taler-auditor-offline -c $CONF \
|
||||
download sign upload &> taler-auditor-offline.log
|
||||
|
||||
# Now we suspend the other coins, so later we will pay with the recouped coin
|
||||
taler-wallet-cli $TIMETRAVEL --wallet-db=$WALLET_DB advanced suspend-coins "$susp"
|
||||
|
3
src/exchange-tools/.gitignore
vendored
3
src/exchange-tools/.gitignore
vendored
@ -1,5 +1,2 @@
|
||||
test_taler_exchange_httpd_home/.local/share/taler/exchange/live-keys/
|
||||
test_taler_exchange_httpd_home/.local/share/taler/exchange/wirefees/
|
||||
test_taler_exchange_httpd_home/.config/taler/account-1.json
|
||||
taler-exchange-offline
|
||||
taler-auditor-offline
|
||||
|
@ -14,25 +14,9 @@ endif
|
||||
|
||||
bin_PROGRAMS = \
|
||||
taler-auditor-offline \
|
||||
taler-exchange-keyup \
|
||||
taler-exchange-offline \
|
||||
taler-exchange-wire \
|
||||
taler-exchange-dbinit
|
||||
|
||||
taler_exchange_keyup_SOURCES = \
|
||||
taler-exchange-keyup.c
|
||||
taler_exchange_keyup_LDADD = \
|
||||
$(LIBGCRYPT_LIBS) \
|
||||
$(top_builddir)/src/exchangedb/libtalerexchangedb.la \
|
||||
$(top_builddir)/src/bank-lib/libtalerbank.la \
|
||||
$(top_builddir)/src/json/libtalerjson.la \
|
||||
$(top_builddir)/src/pq/libtalerpq.la \
|
||||
$(top_builddir)/src/util/libtalerutil.la \
|
||||
-lgnunetutil \
|
||||
$(XLIB)
|
||||
taler_exchange_keyup_LDFLAGS = $(POSTGRESQL_LDFLAGS)
|
||||
|
||||
|
||||
taler_exchange_offline_SOURCES = \
|
||||
taler-exchange-offline.c
|
||||
taler_exchange_offline_LDADD = \
|
||||
@ -46,7 +30,6 @@ taler_exchange_offline_LDADD = \
|
||||
-lgnunetutil \
|
||||
$(XLIB)
|
||||
|
||||
|
||||
taler_auditor_offline_SOURCES = \
|
||||
taler-auditor-offline.c
|
||||
taler_auditor_offline_LDADD = \
|
||||
@ -60,21 +43,6 @@ taler_auditor_offline_LDADD = \
|
||||
-lgnunetutil \
|
||||
$(XLIB)
|
||||
|
||||
|
||||
taler_exchange_wire_SOURCES = \
|
||||
taler-exchange-wire.c
|
||||
taler_exchange_wire_LDADD = \
|
||||
$(LIBGCRYPT_LIBS) \
|
||||
$(top_builddir)/src/json/libtalerjson.la \
|
||||
$(top_builddir)/src/exchangedb/libtalerexchangedb.la \
|
||||
$(top_builddir)/src/bank-lib/libtalerbank.la \
|
||||
$(top_builddir)/src/util/libtalerutil.la \
|
||||
-lgnunetjson \
|
||||
-lgnunetutil \
|
||||
-ljansson \
|
||||
$(XLIB)
|
||||
taler_exchange_wire_LDFLAGS = $(POSTGRESQL_LDFLAGS)
|
||||
|
||||
taler_exchange_dbinit_SOURCES = \
|
||||
taler-exchange-dbinit.c
|
||||
taler_exchange_dbinit_LDADD = \
|
||||
@ -99,8 +67,4 @@ AM_TESTS_ENVIRONMENT=export TALER_PREFIX=$${TALER_PREFIX:-@libdir@};export PATH=
|
||||
# Distribution
|
||||
|
||||
EXTRA_DIST = \
|
||||
test_taler_exchange_httpd_home/.local/share/taler/exchange/offline-keys/master.priv \
|
||||
test_taler_exchange_httpd.conf \
|
||||
key-helper.c \
|
||||
$(check_SCRIPTS) \
|
||||
$(pkgcfg_DATA)
|
||||
|
@ -1,130 +0,0 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2015-2020 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 3, or (at your option) any later version.
|
||||
|
||||
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
/**
|
||||
* @file key-helper.c
|
||||
* @brief shared logic between tools that deal with the master private key
|
||||
* @author Christian Grothoff
|
||||
*/
|
||||
|
||||
/**
|
||||
* Extract the @a master_priv from the @a cfg or @a masterkeyfile and
|
||||
* verify that it matches the master public key given in @a cfg.
|
||||
*
|
||||
* @param cfg configuration to use
|
||||
* @param masterkeyfile master private key filename, can be NULL to use from @a cfg
|
||||
* @param[out] master_priv where to store the master private key on success
|
||||
* @return #GNUNET_OK on success, #GNUNET_SYSERR on failures
|
||||
*/
|
||||
static int
|
||||
get_and_check_master_key (const struct GNUNET_CONFIGURATION_Handle *cfg,
|
||||
const char *masterkeyfile,
|
||||
struct TALER_MasterPrivateKeyP *master_priv)
|
||||
{
|
||||
struct GNUNET_CRYPTO_EddsaPublicKey mpub;
|
||||
struct GNUNET_CRYPTO_EddsaPublicKey mpub_cfg;
|
||||
char *fn;
|
||||
|
||||
if (NULL != masterkeyfile)
|
||||
{
|
||||
fn = GNUNET_strdup (masterkeyfile);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_CONFIGURATION_get_value_filename (cfg,
|
||||
"exchange",
|
||||
"MASTER_PRIV_FILE",
|
||||
&fn))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Master private key file given neither in configuration nor on command-line\n");
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
}
|
||||
if (GNUNET_YES !=
|
||||
GNUNET_DISK_file_test (fn))
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Exchange master private key `%s' does not exist yet, creating it!\n",
|
||||
fn);
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = GNUNET_CRYPTO_eddsa_key_from_file (fn,
|
||||
GNUNET_YES,
|
||||
&master_priv->eddsa_priv);
|
||||
if (GNUNET_SYSERR == ret)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Failed to initialize master key from file `%s': %s\n",
|
||||
fn,
|
||||
"could not create file");
|
||||
GNUNET_free (fn);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
GNUNET_CRYPTO_eddsa_key_get_public (&master_priv->eddsa_priv,
|
||||
&mpub);
|
||||
}
|
||||
|
||||
/* Check our key matches that in the configuration */
|
||||
{
|
||||
char *masters;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_CONFIGURATION_get_value_string (cfg,
|
||||
"exchange",
|
||||
"MASTER_PUBLIC_KEY",
|
||||
&masters))
|
||||
{
|
||||
/* Help user by telling them precisely what to fix */
|
||||
masters = GNUNET_STRINGS_data_to_string_alloc (&mpub,
|
||||
sizeof (mpub));
|
||||
fprintf (stderr,
|
||||
"You must set MASTER_PUBLIC_KEY to `%s' in the [exchange] section of the configuration before proceeding.\n",
|
||||
masters);
|
||||
GNUNET_free (masters);
|
||||
GNUNET_free (fn);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_STRINGS_string_to_data (masters,
|
||||
strlen (masters),
|
||||
&mpub_cfg,
|
||||
sizeof (mpub_cfg)))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"MASTER_PUBLIC_KEY value `%s' specified in section [exchange] of the configuration is not a valid public key\n",
|
||||
masters);
|
||||
GNUNET_free (masters);
|
||||
GNUNET_free (fn);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
if (0 != GNUNET_memcmp (&mpub,
|
||||
&mpub_cfg))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"MASTER_PUBLIC_KEY value `%s' specified in section [exchange] of the configuration does not match our master private key. You can use `gnunet-ecc -p \"%s\"' to determine the correct value.\n",
|
||||
masters,
|
||||
fn);
|
||||
GNUNET_free (masters);
|
||||
GNUNET_free (fn);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
GNUNET_free (masters);
|
||||
}
|
||||
GNUNET_free (fn);
|
||||
|
||||
return GNUNET_OK;
|
||||
}
|
@ -417,7 +417,7 @@ upload_denomination_add (const char *exchange_url,
|
||||
&err_line))
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Invalid input for adding wire account: %s#%u at %u (skipping)\n",
|
||||
"Invalid input for adding denomination: %s#%u at %u (skipping)\n",
|
||||
err_name,
|
||||
err_line,
|
||||
(unsigned int) idx);
|
||||
@ -996,8 +996,8 @@ sign_denomkeys (const json_t *denomkeys)
|
||||
&auditor_priv,
|
||||
&auditor_sig);
|
||||
output_operation ("sign-denomination",
|
||||
json_pack ("{s:o,s:o}",
|
||||
"h_denomn_pub",
|
||||
json_pack ("{s:o, s:o}",
|
||||
"h_denom_pub",
|
||||
GNUNET_JSON_from_data_auto (&h_denom_pub),
|
||||
"auditor_sig",
|
||||
GNUNET_JSON_from_data_auto (&auditor_sig)));
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,225 +0,0 @@
|
||||
/*
|
||||
This file is part of TALER
|
||||
Copyright (C) 2015-2018 Taler Systems SA
|
||||
|
||||
TALER is free software; you can redistribute it and/or modify it under the
|
||||
terms of the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 3, or (at your option) any later version.
|
||||
|
||||
TALER is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
|
||||
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along with
|
||||
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
|
||||
*/
|
||||
/**
|
||||
* @file taler-exchange-wire.c
|
||||
* @brief Create signed response for /wire requests.
|
||||
* @author Christian Grothoff
|
||||
*/
|
||||
#include <platform.h>
|
||||
#include <jansson.h>
|
||||
#include <gnunet/gnunet_json_lib.h>
|
||||
#include "taler_crypto_lib.h"
|
||||
#include "taler_util.h"
|
||||
#include "taler_json_lib.h"
|
||||
#include "taler_exchangedb_lib.h"
|
||||
#include "taler_signatures.h"
|
||||
|
||||
|
||||
/**
|
||||
* Filename of the master private key.
|
||||
*/
|
||||
static char *masterkeyfile;
|
||||
|
||||
/**
|
||||
* Private key for signing.
|
||||
*/
|
||||
static struct TALER_MasterPrivateKeyP master_priv;
|
||||
|
||||
/**
|
||||
* Return value from main().
|
||||
*/
|
||||
static int global_ret;
|
||||
|
||||
|
||||
#include "key-helper.c"
|
||||
|
||||
|
||||
/**
|
||||
* Function called with information about a wire account. Signs
|
||||
* the account's wire details and writes out the JSON file to disk.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param ai account information
|
||||
*/
|
||||
static void
|
||||
sign_account_data (void *cls,
|
||||
const struct TALER_EXCHANGEDB_AccountInfo *ai)
|
||||
{
|
||||
char *json_out;
|
||||
FILE *out;
|
||||
int ret;
|
||||
|
||||
(void) cls;
|
||||
if (GNUNET_NO == ai->credit_enabled)
|
||||
return;
|
||||
if (NULL == ai->wire_response_filename)
|
||||
{
|
||||
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
||||
ai->section_name,
|
||||
"WIRE_RESPONSE");
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
{
|
||||
json_t *wire;
|
||||
|
||||
wire = TALER_JSON_exchange_wire_signature_make (ai->payto_uri,
|
||||
&master_priv);
|
||||
if (NULL == wire)
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
||||
"Could not sign wire account `%s'. Is the URI well-formed?\n",
|
||||
ai->payto_uri);
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
GNUNET_assert (NULL != wire);
|
||||
json_out = json_dumps (wire,
|
||||
JSON_INDENT (2));
|
||||
json_decref (wire);
|
||||
}
|
||||
GNUNET_assert (NULL != json_out);
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_DISK_directory_create_for_file (ai->wire_response_filename))
|
||||
{
|
||||
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
|
||||
"mkdir",
|
||||
ai->wire_response_filename);
|
||||
global_ret = 1;
|
||||
free (json_out);
|
||||
return;
|
||||
}
|
||||
|
||||
out = fopen (ai->wire_response_filename,
|
||||
"w+"); /* create, if exists, truncate */
|
||||
if (NULL == out)
|
||||
{
|
||||
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
|
||||
"fopen(w+)",
|
||||
ai->wire_response_filename);
|
||||
global_ret = 1;
|
||||
free (json_out);
|
||||
return;
|
||||
}
|
||||
ret = fprintf (out,
|
||||
"%s",
|
||||
json_out);
|
||||
if ( (0 != fclose (out)) ||
|
||||
(-1 == ret) )
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Failure creating wire account file `%s': %s\n",
|
||||
ai->wire_response_filename,
|
||||
strerror (errno));
|
||||
/* attempt to remove malformed file */
|
||||
if (0 != unlink (ai->wire_response_filename))
|
||||
GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING,
|
||||
"unlink",
|
||||
ai->wire_response_filename);
|
||||
}
|
||||
else
|
||||
{
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Created wire account file `%s'\n",
|
||||
ai->wire_response_filename);
|
||||
}
|
||||
free (json_out);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Main function that will be run.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param args remaining command-line arguments
|
||||
* @param cfgfile name of the configuration file used (for saving, can be NULL!)
|
||||
* @param cfg configuration
|
||||
*/
|
||||
static void
|
||||
run (void *cls,
|
||||
char *const *args,
|
||||
const char *cfgfile,
|
||||
const struct GNUNET_CONFIGURATION_Handle *cfg)
|
||||
{
|
||||
(void) cls;
|
||||
(void) args;
|
||||
(void) cfgfile;
|
||||
|
||||
if (GNUNET_OK !=
|
||||
get_and_check_master_key (cfg,
|
||||
masterkeyfile,
|
||||
&master_priv))
|
||||
{
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
|
||||
"Signing /wire responses\n");
|
||||
if (GNUNET_OK !=
|
||||
TALER_EXCHANGEDB_find_accounts (cfg,
|
||||
&sign_account_data,
|
||||
NULL))
|
||||
{
|
||||
global_ret = 1;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The main function of the taler-exchange-wire tool. This tool is
|
||||
* used to sign the bank account details using the master key.
|
||||
*
|
||||
* @param argc number of arguments from the command line
|
||||
* @param argv command line arguments
|
||||
* @return 0 ok, 1 on error
|
||||
*/
|
||||
int
|
||||
main (int argc,
|
||||
char *const *argv)
|
||||
{
|
||||
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
||||
GNUNET_GETOPT_option_timetravel ('T',
|
||||
"timetravel"),
|
||||
GNUNET_GETOPT_option_filename ('m',
|
||||
"master-key",
|
||||
"FILENAME",
|
||||
"master key file (private key)",
|
||||
&masterkeyfile),
|
||||
GNUNET_GETOPT_OPTION_END
|
||||
};
|
||||
|
||||
/* force linker to link against libtalerutil; if we do
|
||||
not do this, the linker may "optimize" libtalerutil
|
||||
away and skip #TALER_OS_init(), which we do need */
|
||||
(void) TALER_project_data_default ();
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
GNUNET_log_setup ("taler-exchange-wire",
|
||||
"WARNING",
|
||||
NULL));
|
||||
if (GNUNET_OK !=
|
||||
GNUNET_PROGRAM_run (argc, argv,
|
||||
"taler-exchange-wire",
|
||||
"Setup /wire response",
|
||||
options,
|
||||
&run, NULL))
|
||||
return 1;
|
||||
return global_ret;
|
||||
}
|
||||
|
||||
|
||||
/* end of taler-exchange-wire.c */
|
@ -1,130 +0,0 @@
|
||||
[PATHS]
|
||||
# Persistent data storage for the testcase
|
||||
TALER_TEST_HOME = test_taler_exchange_httpd_home/
|
||||
|
||||
[taler]
|
||||
# Currency supported by the exchange (can only be one)
|
||||
CURRENCY = EUR
|
||||
CURRENCY_ROUND_UNIT = EUR:0.01
|
||||
|
||||
[exchange]
|
||||
|
||||
# Directory with our terms of service.
|
||||
TERMS_DIR = ../../contrib/tos
|
||||
|
||||
# Etag / filename for the terms of service.
|
||||
TERMS_ETAG = 0
|
||||
|
||||
|
||||
# Directory with our privacy policy.
|
||||
PRIVACY_DIR = ../../contrib/pp
|
||||
|
||||
# Etag / filename for the privacy policy.
|
||||
PRIVACY_ETAG = 0
|
||||
|
||||
# MAX_REQUESTS = 2
|
||||
# how long is one signkey valid?
|
||||
SIGNKEY_DURATION = 4 weeks
|
||||
|
||||
# how long are the signatures with the signkey valid?
|
||||
LEGAL_DURATION = 2 years
|
||||
|
||||
# how long do we generate denomination and signing keys
|
||||
# ahead of time?
|
||||
LOOKAHEAD_SIGN = 2 weeks 1 day
|
||||
|
||||
# how long do we provide to clients denomination and signing keys
|
||||
# ahead of time?
|
||||
LOOKAHEAD_PROVIDE = 1 weeks 1 day
|
||||
|
||||
# HTTP port the exchange listens to
|
||||
PORT = 8081
|
||||
|
||||
# Master public key used to sign the exchange's various keys
|
||||
MASTER_PUBLIC_KEY = 98NJW3CQHZQGQXTY3K85K531XKPAPAVV4Q5V8PYYRR00NJGZWNVG
|
||||
|
||||
# How to access our database
|
||||
DB = postgres
|
||||
|
||||
|
||||
[exchangedb]
|
||||
# After how long do we close idle reserves? The exchange
|
||||
# and the auditor must agree on this value. We currently
|
||||
# expect it to be globally defined for the whole system,
|
||||
# as there is no way for wallets to query this value. Thus,
|
||||
# it is only configurable for testing, and should be treated
|
||||
# as constant in production.
|
||||
IDLE_RESERVE_EXPIRATION_TIME = 4 weeks
|
||||
|
||||
|
||||
[exchangedb-postgres]
|
||||
CONFIG = "postgres:///talercheck"
|
||||
|
||||
[exchange-account-1]
|
||||
PAYTO_URI = "payto://x-taler-bank/localhost:8082/3"
|
||||
WIRE_RESPONSE = ${TALER_CONFIG_HOME}/account-1.json
|
||||
ENABLE_DEBIT = YES
|
||||
ENABLE_CREDIT = YES
|
||||
TALER_BANK_AUTH_METHOD = NONE
|
||||
|
||||
|
||||
# Wire fees are specified by wire method
|
||||
[fees-x-taler-bank]
|
||||
# Fees for the foreseeable future...
|
||||
# If you see this after 2018, update to match the next 10 years...
|
||||
WIRE-FEE-2018 = EUR:0.01
|
||||
WIRE-FEE-2019 = EUR:0.01
|
||||
WIRE-FEE-2020 = EUR:0.01
|
||||
WIRE-FEE-2021 = EUR:0.01
|
||||
WIRE-FEE-2022 = EUR:0.01
|
||||
WIRE-FEE-2023 = EUR:0.01
|
||||
WIRE-FEE-2024 = EUR:0.01
|
||||
WIRE-FEE-2025 = EUR:0.01
|
||||
WIRE-FEE-2026 = EUR:0.01
|
||||
WIRE-FEE-2027 = EUR:0.01
|
||||
|
||||
CLOSING-FEE-2018 = EUR:0.01
|
||||
CLOSING-FEE-2019 = EUR:0.01
|
||||
CLOSING-FEE-2020 = EUR:0.01
|
||||
CLOSING-FEE-2021 = EUR:0.01
|
||||
CLOSING-FEE-2022 = EUR:0.01
|
||||
CLOSING-FEE-2023 = EUR:0.01
|
||||
CLOSING-FEE-2024 = EUR:0.01
|
||||
CLOSING-FEE-2025 = EUR:0.01
|
||||
CLOSING-FEE-2026 = EUR:0.01
|
||||
CLOSING-FEE-2027 = EUR:0.01
|
||||
|
||||
|
||||
# Coins for the tests.
|
||||
[coin_eur_ct_1]
|
||||
value = EUR:0.01
|
||||
duration_withdraw = 7 days
|
||||
duration_spend = 2 years
|
||||
duration_legal = 3 years
|
||||
fee_withdraw = EUR:0.00
|
||||
fee_deposit = EUR:0.00
|
||||
fee_refresh = EUR:0.01
|
||||
fee_refund = EUR:0.01
|
||||
rsa_keysize = 1024
|
||||
|
||||
[coin_eur_ct_10]
|
||||
value = EUR:0.10
|
||||
duration_withdraw = 7 days
|
||||
duration_spend = 2 years
|
||||
duration_legal = 3 years
|
||||
fee_withdraw = EUR:0.01
|
||||
fee_deposit = EUR:0.01
|
||||
fee_refresh = EUR:0.03
|
||||
fee_refund = EUR:0.01
|
||||
rsa_keysize = 1024
|
||||
|
||||
[coin_eur_1]
|
||||
value = EUR:1
|
||||
duration_withdraw = 7 days
|
||||
duration_spend = 2 years
|
||||
duration_legal = 3 years
|
||||
fee_withdraw = EUR:0.01
|
||||
fee_deposit = EUR:0.01
|
||||
fee_refresh = EUR:0.03
|
||||
fee_refund = EUR:0.01
|
||||
rsa_keysize = 1024
|
@ -1,8 +0,0 @@
|
||||
{
|
||||
"salt": "AZPRFVJ58NM6M7J5CZQPJAH3EW5DYM52AEZ9Y1C1ER3W94QV8D8TQKF6CK8MYQRA9QMSKDQTGZ306ZS9GQ0M6R01CJ20KPP49WFDZK8",
|
||||
"name": "The exchange",
|
||||
"account_number": 3,
|
||||
"bank_url": "http://localhost:8082/",
|
||||
"type": "test",
|
||||
"sig": "RPQXP9S4P8PQP7HEZQNRSZCT0ATNEP8GW0P5TPM34V5RX86FCD670V44R9NETSYDDKB8SZV7TKY9PAJYTY51D3VDWY9XXQ5BPFRXR28"
|
||||
}
|
@ -1 +0,0 @@
|
||||
p<EFBFBD>^<5E>-<2D>33<33><33>XX<>!<04>\0q<30><71><EFBFBD><EFBFBD><18>mU<6D>_<EFBFBD><5F>
|
Loading…
Reference in New Issue
Block a user