anastasis

Credential backup and recovery protocol and service
Log | Files | Refs | Submodules | README | LICENSE

lae_parse.c (5134B)


      1 /*
      2   This file is part of Anastasis
      3   Copyright (C) 2018-2020 Anastasis SARL
      4 
      5   Anastasis is free software; you can redistribute it and/or modify it under the
      6   terms of the GNU General Public License as published by the Free Software
      7   Foundation; either version 3, or (at your option) any later version.
      8 
      9   Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY
     10   WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
     11   A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
     12 
     13   You should have received a copy of the GNU General Public License along with
     14   Anastasis; see the file COPYING.  If not, see
     15   <http://www.gnu.org/licenses/>
     16 */
     17 /**
     18  * @file libanastasiseufin/lae_parse.c
     19  * @brief Convenience function to parse authentication configuration
     20  * @author Christian Grothoff
     21  */
     22 #include "platform.h"
     23 #include "anastasis_eufin_lib.h"
     24 
     25 
     26 /**
     27  * Parse configuration section with bank authentication data.
     28  *
     29  * @param cfg configuration to parse
     30  * @param section the section with the configuration data
     31  * @param[out] auth set to the configuration data found
     32  * @return #GNUNET_OK on success
     33  */
     34 int
     35 ANASTASIS_EUFIN_auth_parse_cfg (const struct GNUNET_CONFIGURATION_Handle *cfg,
     36                                 const char *section,
     37                                 struct ANASTASIS_EUFIN_AuthenticationData *auth)
     38 {
     39   const struct
     40   {
     41     const char *m;
     42     enum ANASTASIS_EUFIN_AuthenticationMethod e;
     43   } methods[] = {
     44     { "NONE",  ANASTASIS_EUFIN_AUTH_NONE  },
     45     { "BASIC", ANASTASIS_EUFIN_AUTH_BASIC },
     46     { NULL, ANASTASIS_EUFIN_AUTH_NONE     }
     47   };
     48   char *method;
     49 
     50   if (GNUNET_OK !=
     51       GNUNET_CONFIGURATION_get_value_string (cfg,
     52                                              section,
     53                                              "WIRE_GATEWAY_URL",
     54                                              &auth->wire_gateway_url))
     55   {
     56     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
     57                                section,
     58                                "WIRE_GATEWAY_URL");
     59     return GNUNET_SYSERR;
     60   }
     61 
     62   if (GNUNET_OK !=
     63       GNUNET_CONFIGURATION_get_value_string (cfg,
     64                                              section,
     65                                              "WIRE_GATEWAY_AUTH_METHOD",
     66                                              &method))
     67   {
     68     GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
     69                                section,
     70                                "WIRE_GATEWAY_AUTH_METHOD");
     71     GNUNET_free (auth->wire_gateway_url);
     72     return GNUNET_SYSERR;
     73   }
     74   for (unsigned int i = 0; NULL != methods[i].m; i++)
     75   {
     76     if (0 == strcasecmp (method,
     77                          methods[i].m))
     78     {
     79       switch (methods[i].e)
     80       {
     81       case ANASTASIS_EUFIN_AUTH_NONE:
     82         auth->method = ANASTASIS_EUFIN_AUTH_NONE;
     83         GNUNET_free (method);
     84         return GNUNET_OK;
     85       case ANASTASIS_EUFIN_AUTH_BASIC:
     86         if (GNUNET_OK !=
     87             GNUNET_CONFIGURATION_get_value_string (cfg,
     88                                                    section,
     89                                                    "USERNAME",
     90                                                    &auth->details.basic.username))
     91         {
     92           GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
     93                                      section,
     94                                      "USERNAME");
     95           GNUNET_free (method);
     96           GNUNET_free (auth->wire_gateway_url);
     97           return GNUNET_SYSERR;
     98         }
     99         if (GNUNET_OK !=
    100             GNUNET_CONFIGURATION_get_value_string (cfg,
    101                                                    section,
    102                                                    "PASSWORD",
    103                                                    &auth->details.basic.password))
    104         {
    105           GNUNET_free (auth->details.basic.username);
    106           auth->details.basic.username = NULL;
    107           GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR,
    108                                      section,
    109                                      "PASSWORD");
    110           GNUNET_free (method);
    111           GNUNET_free (auth->wire_gateway_url);
    112           return GNUNET_SYSERR;
    113         }
    114         auth->method = ANASTASIS_EUFIN_AUTH_BASIC;
    115         GNUNET_free (method);
    116         return GNUNET_OK;
    117       }
    118     }
    119   }
    120   GNUNET_free (method);
    121   return GNUNET_SYSERR;
    122 }
    123 
    124 
    125 /**
    126  * Free memory inside of @a auth (but not @a auth itself).
    127  * Dual to #ANASTASIS_EUFIN_auth_parse_cfg().
    128  *
    129  * @param[in] auth authentication data to free
    130  */
    131 void
    132 ANASTASIS_EUFIN_auth_free (struct ANASTASIS_EUFIN_AuthenticationData *auth)
    133 {
    134   switch (auth->method)
    135   {
    136   case ANASTASIS_EUFIN_AUTH_NONE:
    137     break;
    138   case ANASTASIS_EUFIN_AUTH_BASIC:
    139     if (NULL != auth->details.basic.username)
    140     {
    141       GNUNET_free (auth->details.basic.username);
    142       auth->details.basic.username = NULL;
    143     }
    144     if (NULL != auth->details.basic.password)
    145     {
    146       GNUNET_free (auth->details.basic.password);
    147       auth->details.basic.password = NULL;
    148     }
    149     break;
    150   }
    151   GNUNET_free (auth->wire_gateway_url);
    152   auth->wire_gateway_url = NULL;
    153 }
    154 
    155 
    156 /* end of lae_parse.c */