diff options
| author | Christian Grothoff <christian@grothoff.org> | 2018-11-03 21:28:52 +0100 | 
|---|---|---|
| committer | Christian Grothoff <christian@grothoff.org> | 2018-11-03 21:28:52 +0100 | 
| commit | ebc8ae68bee955d8df658afac85c9a0cbea716d0 (patch) | |
| tree | 19c8aa82affcd5fe098d72226ab87b51728249eb /src/auditor/taler-auditor-exchange.c | |
| parent | a57080651d9666c8d3d2acc8e872178b7022a7b0 (diff) | |
implement taler-auditor-exchange
Diffstat (limited to 'src/auditor/taler-auditor-exchange.c')
| -rw-r--r-- | src/auditor/taler-auditor-exchange.c | 169 | 
1 files changed, 169 insertions, 0 deletions
diff --git a/src/auditor/taler-auditor-exchange.c b/src/auditor/taler-auditor-exchange.c new file mode 100644 index 00000000..b316f602 --- /dev/null +++ b/src/auditor/taler-auditor-exchange.c @@ -0,0 +1,169 @@ +/* +  This file is part of TALER +  Copyright (C) 2014, 2015, 2018 GNUnet e.V. + +  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-auditor-exchange.c + * @brief Tool used by the auditor to add or remove the exchange's master key + *        to its database. + * @author Christian Grothoff + */ +#include <platform.h> +#include "taler_exchangedb_lib.h" +#include "taler_auditordb_lib.h" + + +/** + * URL of the exchange. + */ +static char *exchange_url; + +/** + * Master public key of the exchange. + */ +static struct TALER_MasterPublicKeyP master_public_key; + +/** + * Our configuration. + */ +static struct GNUNET_CONFIGURATION_Handle *cfg; + +/** + * Handle to access the auditor's database. + */ +static struct TALER_AUDITORDB_Plugin *adb; + +/** + * -r option given. + */ +static int remove_flag; + + +/** + * The main function of the taler-auditor-exchange tool.  This tool is used + * to add (or remove) an exchange's master key and base URL to the auditor's + * database. + * + * @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) +{ +  char *cfgfile = NULL; +  const struct GNUNET_GETOPT_CommandLineOption options[] = { +    GNUNET_GETOPT_option_cfgfile (&cfgfile), +    GNUNET_GETOPT_option_help ("Add or remove exchange to list of audited exchanges"), +    GNUNET_GETOPT_option_mandatory +    (GNUNET_GETOPT_option_base32_auto ('m', +                                       "exchange-key", +                                       "KEY", +                                       "public key of the exchange (Crockford base32 encoded)", +                                       &master_public_key)), +    GNUNET_GETOPT_option_mandatory +    (GNUNET_GETOPT_option_string ('u', +                                  "exchange-url", +                                  "URL", +                                  "base URL of the exchange", +                                  &exchange_url)), +    GNUNET_GETOPT_option_flag ('r', +                               "remove", +                               "remove the exchange's key (default is to add)", +                               &remove_flag), +    GNUNET_GETOPT_option_version (VERSION "-" VCS_VERSION), +    GNUNET_GETOPT_OPTION_END +  }; + +  GNUNET_assert (GNUNET_OK == +                 GNUNET_log_setup ("taler-auditor-exchange", +                                   "WARNING", +                                   NULL)); +  if (GNUNET_GETOPT_run ("taler-auditor-exchange", +                         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); +    return 1; +  } +  GNUNET_free_non_null (cfgfile); + +  if (NULL == +      (adb = TALER_AUDITORDB_plugin_load (cfg))) +  { +    fprintf (stderr, +             "Failed to initialize auditor database plugin.\n"); +    return 3; +  } + +  /* Create required tables */ +  if (GNUNET_OK != +      adb->create_tables (adb->cls)) +  { +    fprintf (stderr, +             "Failed to create tables in auditor's database\n"); +    TALER_AUDITORDB_plugin_unload (adb); +    return 3; +  } + +  /* Update DB */ +  { +    enum GNUNET_DB_QueryStatus qs; +    struct TALER_AUDITORDB_Session *session; + +    session = adb->get_session (adb->cls); +    if (NULL == session) +    { +      fprintf (stderr, +	       "Failed to initialize database session\n"); +      TALER_AUDITORDB_plugin_unload (adb); +      return 3; +    } + +    if (remove_flag) +    { +      qs = adb->delete_exchange (adb->cls, +                                 session, +                                 &master_public_key); +    } +    else +    { +      qs = adb->insert_exchange (adb->cls, +                                 session, +                                 &master_public_key, +                                 exchange_url); +    } +    if (0 > qs) +    { +      fprintf (stderr, +               "Failed to update auditor DB (%d)\n", +               qs); +      TALER_AUDITORDB_plugin_unload (adb); +      return 3; +    } +  } +  TALER_AUDITORDB_plugin_unload (adb); +  return 0; +} + +/* end of taler-auditor-exchange.c */  | 
