Line data Source code
1 : /* 2 : This file is part of TALER 3 : Copyright (C) 2020 Taler Systems SA 4 : 5 : TALER 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 : TALER 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 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 : */ 16 : /** 17 : * @file taler-exchange-httpd_management_denominations_HDP_revoke.c 18 : * @brief Handle denomination revocation requests. 19 : * @author Christian Grothoff 20 : */ 21 : #include "platform.h" 22 : #include <gnunet/gnunet_util_lib.h> 23 : #include <gnunet/gnunet_json_lib.h> 24 : #include <jansson.h> 25 : #include <microhttpd.h> 26 : #include <pthread.h> 27 : #include "taler_json_lib.h" 28 : #include "taler_mhd_lib.h" 29 : #include "taler-exchange-httpd_management.h" 30 : #include "taler-exchange-httpd_responses.h" 31 : #include "taler-exchange-httpd_keys.h" 32 : 33 : 34 : MHD_RESULT 35 0 : TEH_handler_management_denominations_HDP_revoke ( 36 : struct MHD_Connection *connection, 37 : const struct TALER_DenominationHashP *h_denom_pub, 38 : const json_t *root) 39 : { 40 : struct TALER_MasterSignatureP master_sig; 41 : struct GNUNET_JSON_Specification spec[] = { 42 0 : GNUNET_JSON_spec_fixed_auto ("master_sig", 43 : &master_sig), 44 0 : GNUNET_JSON_spec_end () 45 : }; 46 : enum GNUNET_DB_QueryStatus qs; 47 : 48 : { 49 : enum GNUNET_GenericReturnValue res; 50 : 51 0 : res = TALER_MHD_parse_json_data (connection, 52 : root, 53 : spec); 54 0 : if (GNUNET_SYSERR == res) 55 0 : return MHD_NO; /* hard failure */ 56 0 : if (GNUNET_NO == res) 57 0 : return MHD_YES; /* failure */ 58 : } 59 0 : TEH_METRICS_num_verifications[TEH_MT_SIGNATURE_EDDSA]++; 60 0 : if (GNUNET_OK != 61 0 : TALER_exchange_offline_denomination_revoke_verify ( 62 : h_denom_pub, 63 : &TEH_master_public_key, 64 : &master_sig)) 65 : { 66 0 : GNUNET_break_op (0); 67 0 : return TALER_MHD_reply_with_error ( 68 : connection, 69 : MHD_HTTP_FORBIDDEN, 70 : TALER_EC_EXCHANGE_MANAGEMENT_DENOMINATION_REVOKE_SIGNATURE_INVALID, 71 : NULL); 72 : } 73 0 : qs = TEH_plugin->insert_denomination_revocation (TEH_plugin->cls, 74 : h_denom_pub, 75 : &master_sig); 76 0 : if (qs < 0) 77 : { 78 0 : GNUNET_break (0); 79 0 : return TALER_MHD_reply_with_error (connection, 80 : MHD_HTTP_INTERNAL_SERVER_ERROR, 81 : TALER_EC_GENERIC_DB_STORE_FAILED, 82 : "denomination revocation"); 83 : } 84 0 : TEH_keys_denomination_revoke (h_denom_pub); 85 0 : return TALER_MHD_reply_static ( 86 : connection, 87 : MHD_HTTP_NO_CONTENT, 88 : NULL, 89 : NULL, 90 : 0); 91 : } 92 : 93 : 94 : /* end of taler-exchange-httpd_management_denominations_HDP_revoke.c */