anastasis

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

anastasis-httpd_config.c (4373B)


      1 /*
      2   This file is part of Anastasis
      3   Copyright (C) 2020, 2021, 2024 Anastasis SARL
      4 
      5   Anastasis is free software; you can redistribute it and/or modify it under the
      6   terms of the GNU Affero 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 Affero General Public License for more details.
     12 
     13   You should have received a copy of the GNU Affero General Public License along with
     14   Anastasis; see the file COPYING.GPL.  If not, see <http://www.gnu.org/licenses/>
     15 */
     16 /**
     17  * @file backend/anastasis-httpd_config.c
     18  * @brief headers for /terms handler
     19  * @author Christian Grothoff
     20  * @author Dennis Neufeld
     21  * @author Dominik Meister
     22  */
     23 #include "platform.h"
     24 #include <jansson.h>
     25 #include "anastasis-httpd_config.h"
     26 #include "anastasis-httpd.h"
     27 #include <taler/taler_json_lib.h>
     28 #include "anastasis_authorization_lib.h"
     29 
     30 
     31 /**
     32  * Add enabled methods and their fees to the ``/config`` response.
     33  *
     34  * @param[in,out] cls a `json_t` array to build
     35  * @param section configuration section to inspect
     36  */
     37 static void
     38 add_methods (void *cls,
     39              const char *section)
     40 {
     41   json_t *method_arr = cls;
     42   struct ANASTASIS_AuthorizationPlugin *p;
     43   json_t *method;
     44 
     45   if (0 != strncasecmp (section,
     46                         "authorization-",
     47                         strlen ("authorization-")))
     48     return;
     49   if (GNUNET_YES !=
     50       GNUNET_CONFIGURATION_get_value_yesno (AH_cfg,
     51                                             section,
     52                                             "ENABLED"))
     53     return;
     54   section += strlen ("authorization-");
     55   p = ANASTASIS_authorization_plugin_load (section,
     56                                            AH_cfg);
     57   if (NULL == p)
     58   {
     59     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
     60                 "Failed to load authorization plugin `%s'\n",
     61                 section);
     62     return;
     63   }
     64   method = GNUNET_JSON_PACK (
     65     GNUNET_JSON_pack_string ("type",
     66                              section),
     67     TALER_JSON_pack_amount ("cost",
     68                             &p->cost));
     69   GNUNET_assert (
     70     0 ==
     71     json_array_append_new (method_arr,
     72                            method));
     73 }
     74 
     75 
     76 enum MHD_Result
     77 AH_handler_config (struct AH_RequestHandler *rh,
     78                    struct MHD_Connection *connection)
     79 {
     80   static struct MHD_Response *response;
     81 
     82   if (NULL == response)
     83   {
     84     json_t *method_arr = json_array ();
     85 
     86     GNUNET_assert (NULL != method_arr);
     87     {
     88       json_t *method;
     89 
     90       method = GNUNET_JSON_PACK (
     91         GNUNET_JSON_pack_string ("type",
     92                                  "question"),
     93         TALER_JSON_pack_amount ("cost",
     94                                 &AH_question_cost));
     95       GNUNET_assert (
     96         0 ==
     97         json_array_append_new (method_arr,
     98                                method));
     99     }
    100     GNUNET_CONFIGURATION_iterate_sections (AH_cfg,
    101                                            &add_methods,
    102                                            method_arr);
    103 
    104     response = TALER_MHD_MAKE_JSON_PACK (
    105       GNUNET_JSON_pack_string ("name",
    106                                "anastasis"),
    107       GNUNET_JSON_pack_string ("version",
    108                                "0:3:0"),
    109       GNUNET_JSON_pack_string ("implementation",
    110                                "urn:net:taler:specs:anastasis:c-reference"),
    111       GNUNET_JSON_pack_string ("business_name",
    112                                AH_business_name),
    113       GNUNET_JSON_pack_array_steal ("methods",
    114                                     method_arr),
    115       GNUNET_JSON_pack_uint64 ("storage_limit_in_megabytes",
    116                                AH_upload_limit_mb),
    117       TALER_JSON_pack_amount ("annual_fee",
    118                               &AH_annual_fee),
    119       TALER_JSON_pack_amount ("truth_upload_fee",
    120                               &AH_truth_upload_fee),
    121       TALER_JSON_pack_amount ("liability_limit",
    122                               &AH_insurance),
    123       GNUNET_JSON_pack_data_auto ("provider_salt",
    124                                   &AH_provider_salt));
    125   }
    126   return MHD_queue_response (connection,
    127                              MHD_HTTP_OK,
    128                              response);
    129 }
    130 
    131 
    132 /* end of anastasis-httpd_config.c */