2018-04-02 14:24:45 +02:00
|
|
|
/*
|
|
|
|
This file is part of TALER
|
2020-01-11 15:19:56 +01:00
|
|
|
Copyright (C) 2018-2020 Taler Systems SA
|
2018-04-02 14:24:45 +02:00
|
|
|
|
|
|
|
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 bank-lib/bank_api_parse.c
|
|
|
|
* @brief Convenience function to parse authentication configuration
|
|
|
|
* @author Christian Grothoff
|
|
|
|
*/
|
|
|
|
#include "platform.h"
|
|
|
|
#include "taler_bank_service.h"
|
|
|
|
|
|
|
|
|
2020-01-11 15:19:56 +01:00
|
|
|
/**
|
|
|
|
* Convenience method for parsing configuration section with bank account data.
|
|
|
|
*
|
|
|
|
* @param cfg configuration to parse
|
|
|
|
* @param section the section with the configuration data
|
|
|
|
* @param acc[out] set to the account details
|
|
|
|
* @return #GNUNET_OK on success
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
TALER_BANK_account_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
|
|
|
|
const char *section,
|
|
|
|
struct TALER_Account *acc)
|
|
|
|
{
|
|
|
|
char *account_url;
|
|
|
|
|
|
|
|
if (GNUNET_OK !=
|
|
|
|
GNUNET_CONFIGURATION_get_value_string (cfg,
|
|
|
|
section,
|
|
|
|
"URL",
|
|
|
|
&account_url))
|
|
|
|
{
|
|
|
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
|
|
|
"URL");
|
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
if (TALER_EC_NONE !=
|
2020-01-13 18:16:01 +01:00
|
|
|
TALER_BANK_payto_to_account (account_url,
|
2020-01-11 15:19:56 +01:00
|
|
|
acc))
|
|
|
|
{
|
|
|
|
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
|
|
|
"URL",
|
|
|
|
"Malformed payto:// URL for x-taler-bank method");
|
|
|
|
GNUNET_free (account_url);
|
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
if (TALER_PAC_X_TALER_BANK != acc->type)
|
|
|
|
{
|
|
|
|
GNUNET_log_config_invalid (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
|
|
|
"URL",
|
|
|
|
"Malformed payto:// URL for x-taler-bank method");
|
|
|
|
GNUNET_free (account_url);
|
2020-01-13 18:16:01 +01:00
|
|
|
TALER_BANK_account_free (acc);
|
2020-01-11 15:19:56 +01:00
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
GNUNET_free (account_url);
|
|
|
|
return GNUNET_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-04-02 14:24:45 +02:00
|
|
|
/**
|
|
|
|
* Parse configuration section with bank authentication data.
|
|
|
|
*
|
|
|
|
* @param cfg configuration to parse
|
|
|
|
* @param section the section with the configuration data
|
|
|
|
* @param auth[out] set to the configuration data found
|
|
|
|
* @return #GNUNET_OK on success
|
|
|
|
*/
|
|
|
|
int
|
|
|
|
TALER_BANK_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
|
|
|
|
const char *section,
|
|
|
|
struct TALER_BANK_AuthenticationData *auth)
|
|
|
|
{
|
2019-08-25 16:18:24 +02:00
|
|
|
const struct
|
|
|
|
{
|
2018-04-02 14:24:45 +02:00
|
|
|
const char *m;
|
|
|
|
enum TALER_BANK_AuthenticationMethod e;
|
|
|
|
} methods[] = {
|
|
|
|
{ "NONE", TALER_BANK_AUTH_NONE },
|
|
|
|
{ "BASIC", TALER_BANK_AUTH_BASIC },
|
|
|
|
{ NULL, TALER_BANK_AUTH_NONE }
|
|
|
|
};
|
|
|
|
char *method;
|
|
|
|
|
|
|
|
if (GNUNET_OK !=
|
|
|
|
GNUNET_CONFIGURATION_get_value_string (cfg,
|
|
|
|
section,
|
|
|
|
"TALER_BANK_AUTH_METHOD",
|
|
|
|
&method))
|
|
|
|
{
|
|
|
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
|
|
|
"TALER_BANK_AUTH_METHOD");
|
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
2019-08-25 16:18:24 +02:00
|
|
|
for (unsigned int i = 0; NULL != methods[i].m; i++)
|
2018-04-02 14:24:45 +02:00
|
|
|
{
|
|
|
|
if (0 == strcasecmp (method,
|
|
|
|
methods[i].m))
|
|
|
|
{
|
|
|
|
switch (methods[i].e)
|
|
|
|
{
|
|
|
|
case TALER_BANK_AUTH_NONE:
|
|
|
|
auth->method = TALER_BANK_AUTH_NONE;
|
2018-11-25 14:51:31 +01:00
|
|
|
GNUNET_free (method);
|
2018-04-02 14:24:45 +02:00
|
|
|
return GNUNET_OK;
|
|
|
|
case TALER_BANK_AUTH_BASIC:
|
|
|
|
if (GNUNET_OK !=
|
|
|
|
GNUNET_CONFIGURATION_get_value_string (cfg,
|
|
|
|
section,
|
|
|
|
"USERNAME",
|
|
|
|
&auth->details.basic.username))
|
|
|
|
{
|
|
|
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
|
|
|
"USERNAME");
|
2018-11-25 14:51:31 +01:00
|
|
|
GNUNET_free (method);
|
2018-04-02 14:24:45 +02:00
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
if (GNUNET_OK !=
|
|
|
|
GNUNET_CONFIGURATION_get_value_string (cfg,
|
|
|
|
section,
|
|
|
|
"PASSWORD",
|
|
|
|
&auth->details.basic.password))
|
|
|
|
{
|
|
|
|
GNUNET_free (auth->details.basic.username);
|
|
|
|
auth->details.basic.username = NULL;
|
|
|
|
GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
|
|
|
|
section,
|
2020-01-16 20:53:54 +01:00
|
|
|
"PASSWORD");
|
2018-11-25 14:51:31 +01:00
|
|
|
GNUNET_free (method);
|
2018-04-02 14:24:45 +02:00
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
auth->method = TALER_BANK_AUTH_BASIC;
|
2018-11-25 14:51:31 +01:00
|
|
|
GNUNET_free (method);
|
2018-04-02 14:24:45 +02:00
|
|
|
return GNUNET_OK;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2018-11-25 14:51:31 +01:00
|
|
|
GNUNET_free (method);
|
2018-04-02 14:24:45 +02:00
|
|
|
return GNUNET_SYSERR;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Free memory inside of @a auth (but not auth itself).
|
|
|
|
* Dual to #TALER_BANK_auth_parse_cfg().
|
|
|
|
*
|
|
|
|
* @param auth authentication data to free
|
|
|
|
*/
|
|
|
|
void
|
|
|
|
TALER_BANK_auth_free (struct TALER_BANK_AuthenticationData *auth)
|
|
|
|
{
|
|
|
|
switch (auth->method)
|
|
|
|
{
|
|
|
|
case TALER_BANK_AUTH_NONE:
|
|
|
|
break;
|
|
|
|
case TALER_BANK_AUTH_BASIC:
|
|
|
|
if (NULL != auth->details.basic.username)
|
|
|
|
{
|
|
|
|
GNUNET_free (auth->details.basic.username);
|
|
|
|
auth->details.basic.username = NULL;
|
|
|
|
}
|
|
|
|
if (NULL != auth->details.basic.password)
|
|
|
|
{
|
|
|
|
GNUNET_free (auth->details.basic.password);
|
|
|
|
auth->details.basic.password = NULL;
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* end of bank_api_parse.c */
|