towards GET /purses/PID

This commit is contained in:
Christian Grothoff 2022-04-22 23:48:15 +02:00
parent c30c7cde4d
commit e40a16aa8e
No known key found for this signature in database
GPG Key ID: 939E6BE1E29FC3CC
2 changed files with 138 additions and 0 deletions

View File

@ -0,0 +1,47 @@
/*
This file is part of TALER
Copyright (C) 2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* @file taler-exchange-httpd_purses_deposit.h
* @brief Handle /purses/$PID/deposit requests
* @author Christian Grothoff
*/
#ifndef TALER_EXCHANGE_HTTPD_PURSES_DEPOSIT_H
#define TALER_EXCHANGE_HTTPD_PURSES_DEPOSIT_H
#include <gnunet/gnunet_util_lib.h>
#include <microhttpd.h>
#include "taler-exchange-httpd.h"
/**
* Handle a "/purses/$PURSE_PUB/deposit" request. Parses the JSON, and, if
* successful, passes the JSON data to #deposit_transaction() to further check
* the details of the operation specified. If everything checks out, this
* will ultimately lead to the "purses deposit" being executed, or rejected.
*
* @param connection the MHD connection to handle
* @param purse_pub public key of the purse
* @param root uploaded JSON data
* @return MHD result code
*/
MHD_RESULT
TEH_handler_purses_deposit (
struct MHD_Connection *connection,
const struct TALER_PurseContractPublicKeyP *purse_pub,
const json_t *root);
#endif

View File

@ -0,0 +1,91 @@
/*
This file is part of TALER
Copyright (C) 2022 Taler Systems SA
TALER is free software; you can redistribute it and/or modify it under the
terms of the GNU Affero 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 Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along with
TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
*/
/**
* @file taler-exchange-httpd_purses_get.c
* @brief Handle GET /purses/$PID requests
* @author Christian Grothoff
*/
#include "platform.h"
#include <gnunet/gnunet_util_lib.h>
#include <jansson.h>
#include <microhttpd.h>
#include "taler_mhd_lib.h"
#include "taler-exchange-httpd_purses.h"
#include "taler-exchange-httpd_mhd.h"
#include "taler-exchange-httpd_responses.h"
// FIXME: add long-polling support!
MHD_RESULT
TEH_handler_pursess_get (struct TEH_RequestContext *rc,
const char *const args[1])
{
struct TALER_PurseContractPublicKeyP purse_pub;
enum GNUNET_DB_QueryStatus qs;
MHD_RESULT res;
struct GNUNET_TIME_Timestamp merge_timestamp = {0};
if (GNUNET_OK !=
GNUNET_STRINGS_string_to_data (args[0],
strlen (args[0]),
&purse_pub,
sizeof (purse_pub)))
{
GNUNET_break_op (0);
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_BAD_REQUEST,
TALER_EC_EXCHANGE_PURSES_INVALID_PURSE_PUB,
args[0]);
}
#if FIXME
qs = TEH_plugin->select_purse (TEH_plugin->cls,
&purse_pub,
&merge_timestamp,
...);
switch (qs)
{
case GNUNET_DB_STATUS_HARD_ERROR:
GNUNET_break (0);
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_FETCH_FAILED,
"select_purses");
case GNUNET_DB_STATUS_SOFT_ERROR:
GNUNET_break (0);
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_INTERNAL_SERVER_ERROR,
TALER_EC_GENERIC_DB_FETCH_FAILED,
"select_purses");
case GNUNET_DB_STATUS_SUCCESS_NO_RESULTS:
return TALER_MHD_reply_with_error (rc->connection,
MHD_HTTP_NOT_FOUND,
TALER_EC_EXCHANGE_PURSESS_UNKNOWN,
NULL);
case GNUNET_DB_STATUS_SUCCESS_ONE_RESULT:
break; /* handled below */
}
#endif
res = TALER_MHD_REPLY_JSON_PACK (
rc->connection,
MHD_HTTP_OK,
GNUNET_JSON_pack_timestamp ("merge_timestamp",
&merge_timestamp));
GNUNET_free (epurses);
return res;
}
/* end of taler-exchange-httpd_purses_get.c */