make all exchange-tools load configs properly like other Taler tools
This commit is contained in:
parent
3abb3bc372
commit
a34891981c
@ -34,8 +34,12 @@ static char *exchange_directory;
|
|||||||
/**
|
/**
|
||||||
* Our configuration.
|
* Our configuration.
|
||||||
*/
|
*/
|
||||||
static struct GNUNET_CONFIGURATION_Handle *kcfg;
|
static const struct GNUNET_CONFIGURATION_Handle *kcfg;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return value from main().
|
||||||
|
*/
|
||||||
|
static int global_ret;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called on each signing key.
|
* Function called on each signing key.
|
||||||
@ -194,42 +198,20 @@ exchange_denomkeys_check ()
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main function of the keyup tool
|
* Main function that will be run.
|
||||||
*
|
*
|
||||||
* @param argc number of arguments from the command line
|
* @param cls closure
|
||||||
* @param argv command line arguments
|
* @param args remaining command-line arguments
|
||||||
* @return 0 ok, 1 on error
|
* @param cfgfile name of the configuration file used (for saving, can be NULL!)
|
||||||
|
* @param cfg configuration
|
||||||
*/
|
*/
|
||||||
int
|
static void
|
||||||
main (int argc, char *const *argv)
|
run (void *cls,
|
||||||
|
char *const *args,
|
||||||
|
const char *cfgfile,
|
||||||
|
const struct GNUNET_CONFIGURATION_Handle *cfg)
|
||||||
{
|
{
|
||||||
char *cfgfile;
|
kcfg = cfg;
|
||||||
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
|
||||||
GNUNET_GETOPT_OPTION_CFG_FILE (&cfgfile),
|
|
||||||
GNUNET_GETOPT_OPTION_HELP ("gnunet-exchange-keycheck OPTIONS"),
|
|
||||||
GNUNET_GETOPT_OPTION_END
|
|
||||||
};
|
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_OK ==
|
|
||||||
GNUNET_log_setup ("taler-exchange-keycheck",
|
|
||||||
"WARNING",
|
|
||||||
NULL));
|
|
||||||
|
|
||||||
if (GNUNET_GETOPT_run ("taler-exchange-keycheck",
|
|
||||||
options,
|
|
||||||
argc, argv) < 0)
|
|
||||||
return 1;
|
|
||||||
kcfg = GNUNET_CONFIGURATION_create ();
|
|
||||||
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (kcfg,
|
|
||||||
cfgfile))
|
|
||||||
{
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
|
||||||
_("Malformed configuration file `%s', exit ...\n"),
|
|
||||||
cfgfile);
|
|
||||||
GNUNET_free_non_null (cfgfile);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
GNUNET_free_non_null (cfgfile);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_CONFIGURATION_get_value_filename (kcfg,
|
GNUNET_CONFIGURATION_get_value_filename (kcfg,
|
||||||
"exchange",
|
"exchange",
|
||||||
@ -239,17 +221,46 @@ main (int argc, char *const *argv)
|
|||||||
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
||||||
"exchange",
|
"exchange",
|
||||||
"KEYDIR");
|
"KEYDIR");
|
||||||
return 1;
|
global_ret = 1;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( (GNUNET_OK != exchange_signkeys_check ()) ||
|
if ( (GNUNET_OK != exchange_signkeys_check ()) ||
|
||||||
(GNUNET_OK != exchange_denomkeys_check ()) )
|
(GNUNET_OK != exchange_denomkeys_check ()) )
|
||||||
{
|
{
|
||||||
GNUNET_CONFIGURATION_destroy (kcfg);
|
global_ret = 1;
|
||||||
return 1;
|
return;
|
||||||
}
|
}
|
||||||
GNUNET_CONFIGURATION_destroy (kcfg);
|
}
|
||||||
return 0;
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main function of the keyup tool
|
||||||
|
*
|
||||||
|
* @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_END
|
||||||
|
};
|
||||||
|
|
||||||
|
GNUNET_assert (GNUNET_OK ==
|
||||||
|
GNUNET_log_setup ("taler-exchange-keycheck",
|
||||||
|
"WARNING",
|
||||||
|
NULL));
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
GNUNET_PROGRAM_run (argc, argv,
|
||||||
|
"taler-exchange-keycheck",
|
||||||
|
"Check keys of the exchange for validity",
|
||||||
|
options,
|
||||||
|
&run, NULL))
|
||||||
|
return 1;
|
||||||
|
return global_ret;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end of taler-exchange-keycheck.c */
|
/* end of taler-exchange-keycheck.c */
|
||||||
|
@ -30,16 +30,170 @@
|
|||||||
*/
|
*/
|
||||||
static char *exchange_directory;
|
static char *exchange_directory;
|
||||||
|
|
||||||
/**
|
|
||||||
* Handle to the exchange's configuration
|
|
||||||
*/
|
|
||||||
static struct GNUNET_CONFIGURATION_Handle *cfg;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Our DB plugin.
|
* Our DB plugin.
|
||||||
*/
|
*/
|
||||||
static struct TALER_EXCHANGEDB_Plugin *plugin;
|
static struct TALER_EXCHANGEDB_Plugin *plugin;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public key of the reserve as a string.
|
||||||
|
*/
|
||||||
|
static char *reserve_pub_str;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Amount to add as a string.
|
||||||
|
*/
|
||||||
|
static char *add_str;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Details about the wire transfer in JSON format.
|
||||||
|
*/
|
||||||
|
static char *details;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return value from main().
|
||||||
|
*/
|
||||||
|
static int global_ret;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Run the database transaction.
|
||||||
|
*
|
||||||
|
* @param reserve_pub public key of the reserve to use
|
||||||
|
* @param add_value value to add
|
||||||
|
* @param jdetails JSON details
|
||||||
|
* @return #GNUNET_OK on success, #GNUNET_SYSERR on hard error,
|
||||||
|
* #GNUNET_NO if record exists
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
run_transaction (const struct TALER_ReservePublicKeyP *reserve_pub,
|
||||||
|
const struct TALER_Amount *add_value,
|
||||||
|
json_t *jdetails)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
struct TALER_EXCHANGEDB_Session *session;
|
||||||
|
|
||||||
|
session = plugin->get_session (plugin->cls,
|
||||||
|
GNUNET_NO);
|
||||||
|
if (NULL == session)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to initialize DB session\n");
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
/* FIXME: maybe allow passing timestamp via command-line? */
|
||||||
|
ret = plugin->reserves_in_insert (plugin->cls,
|
||||||
|
session,
|
||||||
|
reserve_pub,
|
||||||
|
add_value,
|
||||||
|
GNUNET_TIME_absolute_get (),
|
||||||
|
jdetails);
|
||||||
|
if (GNUNET_SYSERR == ret)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to update reserve.\n");
|
||||||
|
}
|
||||||
|
if (GNUNET_NO == ret)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Record exists, reserve not updated.\n");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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)
|
||||||
|
{
|
||||||
|
struct TALER_Amount add_value;
|
||||||
|
json_t *jdetails;
|
||||||
|
json_error_t error;
|
||||||
|
struct TALER_ReservePublicKeyP reserve_pub;
|
||||||
|
|
||||||
|
if (GNUNET_OK !=
|
||||||
|
GNUNET_CONFIGURATION_get_value_filename (cfg,
|
||||||
|
"exchange",
|
||||||
|
"KEYDIR",
|
||||||
|
&exchange_directory))
|
||||||
|
{
|
||||||
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
||||||
|
"exchange",
|
||||||
|
"KEYDIR");
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ((NULL == reserve_pub_str) ||
|
||||||
|
(GNUNET_OK !=
|
||||||
|
GNUNET_STRINGS_string_to_data (reserve_pub_str,
|
||||||
|
strlen (reserve_pub_str),
|
||||||
|
&reserve_pub,
|
||||||
|
sizeof (struct TALER_ReservePublicKeyP))))
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Parsing reserve key invalid\n");
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if ( (NULL == add_str) ||
|
||||||
|
(GNUNET_OK !=
|
||||||
|
TALER_string_to_amount (add_str,
|
||||||
|
&add_value)) )
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to parse currency amount `%s'\n",
|
||||||
|
add_str);
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (NULL == details)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"No wiring details given (justification required)\n");
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
jdetails = json_loads (details,
|
||||||
|
JSON_REJECT_DUPLICATES,
|
||||||
|
&error);
|
||||||
|
if (NULL == jdetails)
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to parse JSON transaction details `%s': %s (%s)\n",
|
||||||
|
details,
|
||||||
|
error.text,
|
||||||
|
error.source);
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (NULL ==
|
||||||
|
(plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
|
||||||
|
{
|
||||||
|
fprintf (stderr,
|
||||||
|
"Failed to initialize database plugin.\n");
|
||||||
|
global_ret = 1;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (GNUNET_SYSERR ==
|
||||||
|
run_transaction (&reserve_pub,
|
||||||
|
&add_value,
|
||||||
|
jdetails))
|
||||||
|
global_ret = 1;
|
||||||
|
TALER_EXCHANGEDB_plugin_unload (plugin);
|
||||||
|
json_decref (jdetails);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The main function of the reservemod tool
|
* The main function of the reservemod tool
|
||||||
@ -51,20 +205,10 @@ static struct TALER_EXCHANGEDB_Plugin *plugin;
|
|||||||
int
|
int
|
||||||
main (int argc, char *const *argv)
|
main (int argc, char *const *argv)
|
||||||
{
|
{
|
||||||
char *cfgfile = NULL;
|
|
||||||
char *reserve_pub_str = NULL;
|
|
||||||
char *add_str = NULL;
|
|
||||||
struct TALER_Amount add_value;
|
|
||||||
char *details = NULL;
|
|
||||||
json_t *jdetails;
|
|
||||||
json_error_t error;
|
|
||||||
struct TALER_ReservePublicKeyP reserve_pub;
|
|
||||||
struct TALER_EXCHANGEDB_Session *session;
|
|
||||||
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
const struct GNUNET_GETOPT_CommandLineOption options[] = {
|
||||||
{'a', "add", "DENOM",
|
{'a', "add", "DENOM",
|
||||||
"value to add", 1,
|
"value to add", 1,
|
||||||
&GNUNET_GETOPT_set_string, &add_str},
|
&GNUNET_GETOPT_set_string, &add_str},
|
||||||
GNUNET_GETOPT_OPTION_CFG_FILE (&cfgfile),
|
|
||||||
{'d', "details", "JSON",
|
{'d', "details", "JSON",
|
||||||
"details about the bank transaction which justify why we add this amount", 1,
|
"details about the bank transaction which justify why we add this amount", 1,
|
||||||
&GNUNET_GETOPT_set_string, &details},
|
&GNUNET_GETOPT_set_string, &details},
|
||||||
@ -72,143 +216,21 @@ main (int argc, char *const *argv)
|
|||||||
{'R', "reserve", "KEY",
|
{'R', "reserve", "KEY",
|
||||||
"reserve (public key) to modify", 1,
|
"reserve (public key) to modify", 1,
|
||||||
&GNUNET_GETOPT_set_string, &reserve_pub_str},
|
&GNUNET_GETOPT_set_string, &reserve_pub_str},
|
||||||
GNUNET_GETOPT_OPTION_VERSION (VERSION "-" VCS_VERSION),
|
|
||||||
GNUNET_GETOPT_OPTION_END
|
GNUNET_GETOPT_OPTION_END
|
||||||
};
|
};
|
||||||
int ret;
|
|
||||||
|
|
||||||
GNUNET_assert (GNUNET_OK ==
|
GNUNET_assert (GNUNET_OK ==
|
||||||
GNUNET_log_setup ("taler-exchange-reservemod",
|
GNUNET_log_setup ("taler-exchange-reservemod",
|
||||||
"WARNING",
|
"WARNING",
|
||||||
NULL));
|
NULL));
|
||||||
|
|
||||||
if (GNUNET_GETOPT_run ("taler-exchange-reservemod",
|
|
||||||
options,
|
|
||||||
argc, argv) < 0)
|
|
||||||
return 1;
|
|
||||||
cfg = GNUNET_CONFIGURATION_create ();
|
|
||||||
if (GNUNET_SYSERR == GNUNET_CONFIGURATION_load (cfg,
|
|
||||||
cfgfile))
|
|
||||||
{
|
|
||||||
GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
|
|
||||||
_("Malformed configuration file `%s', exit ...\n"),
|
|
||||||
cfgfile);
|
|
||||||
GNUNET_free_non_null (cfgfile);
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (details);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
GNUNET_free_non_null (cfgfile);
|
|
||||||
if (GNUNET_OK !=
|
if (GNUNET_OK !=
|
||||||
GNUNET_CONFIGURATION_get_value_filename (cfg,
|
GNUNET_PROGRAM_run (argc, argv,
|
||||||
"exchange",
|
"taler-exchange-reservemod",
|
||||||
"KEYDIR",
|
"Deposit funds into a Taler reserve",
|
||||||
&exchange_directory))
|
options,
|
||||||
{
|
&run, NULL))
|
||||||
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
|
||||||
"exchange",
|
|
||||||
"KEYDIR");
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (details);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
return global_ret;
|
||||||
if ((NULL == reserve_pub_str) ||
|
|
||||||
(GNUNET_OK !=
|
|
||||||
GNUNET_STRINGS_string_to_data (reserve_pub_str,
|
|
||||||
strlen (reserve_pub_str),
|
|
||||||
&reserve_pub,
|
|
||||||
sizeof (struct TALER_ReservePublicKeyP))))
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Parsing reserve key invalid\n");
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (details);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if ( (NULL == add_str) ||
|
|
||||||
(GNUNET_OK !=
|
|
||||||
TALER_string_to_amount (add_str,
|
|
||||||
&add_value)) )
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Failed to parse currency amount `%s'\n",
|
|
||||||
add_str);
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (details);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NULL == details)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"No wiring details given (justification required)\n");
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = 1;
|
|
||||||
if (NULL ==
|
|
||||||
(plugin = TALER_EXCHANGEDB_plugin_load (cfg)))
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Failed to initialize database plugin.\n");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
session = plugin->get_session (plugin->cls,
|
|
||||||
GNUNET_NO);
|
|
||||||
if (NULL == session)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Failed to initialize DB session\n");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
jdetails = json_loads (details,
|
|
||||||
JSON_REJECT_DUPLICATES,
|
|
||||||
&error);
|
|
||||||
if (NULL == jdetails)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Failed to parse JSON transaction details `%s': %s (%s)\n",
|
|
||||||
details,
|
|
||||||
error.text,
|
|
||||||
error.source);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
/* FIXME: maybe allow passing timestamp via command-line? */
|
|
||||||
ret = plugin->reserves_in_insert (plugin->cls,
|
|
||||||
session,
|
|
||||||
&reserve_pub,
|
|
||||||
&add_value,
|
|
||||||
GNUNET_TIME_absolute_get (),
|
|
||||||
jdetails);
|
|
||||||
json_decref (jdetails);
|
|
||||||
if (GNUNET_SYSERR == ret)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Failed to update reserve.\n");
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
if (GNUNET_NO == ret)
|
|
||||||
{
|
|
||||||
fprintf (stderr,
|
|
||||||
"Record exists, reserve not updated.\n");
|
|
||||||
}
|
|
||||||
ret = 0;
|
|
||||||
cleanup:
|
|
||||||
if (NULL != plugin)
|
|
||||||
TALER_EXCHANGEDB_plugin_unload (plugin);
|
|
||||||
if (NULL != cfg)
|
|
||||||
GNUNET_CONFIGURATION_destroy (cfg);
|
|
||||||
GNUNET_free_non_null (add_str);
|
|
||||||
GNUNET_free_non_null (details);
|
|
||||||
GNUNET_free_non_null (reserve_pub_str);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* end taler-exchange-reservemod.c */
|
/* end taler-exchange-reservemod.c */
|
||||||
|
Loading…
Reference in New Issue
Block a user