gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[taler-exchange] branch master updated: -get taler-exchange-httpd_reserv


From: gnunet
Subject: [taler-exchange] branch master updated: -get taler-exchange-httpd_reserves_attest.c to build (but not finished)
Date: Sun, 02 Oct 2022 13:34:54 +0200

This is an automated email from the git hooks/post-receive script.

grothoff pushed a commit to branch master
in repository exchange.

The following commit(s) were added to refs/heads/master by this push:
     new de657800 -get taler-exchange-httpd_reserves_attest.c to build (but not 
finished)
de657800 is described below

commit de657800a854a031e61f5bcc7d1c168150d1c626
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Oct 2 13:34:51 2022 +0200

    -get taler-exchange-httpd_reserves_attest.c to build (but not finished)
---
 src/exchange/Makefile.am                           |   1 +
 .../taler-exchange-httpd_reserves_attest.c         | 151 ++++++++-------------
 2 files changed, 56 insertions(+), 96 deletions(-)

diff --git a/src/exchange/Makefile.am b/src/exchange/Makefile.am
index 9a4c107c..b2365eec 100644
--- a/src/exchange/Makefile.am
+++ b/src/exchange/Makefile.am
@@ -161,6 +161,7 @@ taler_exchange_httpd_SOURCES = \
   taler-exchange-httpd_recoup-refresh.c taler-exchange-httpd_recoup-refresh.h \
   taler-exchange-httpd_refreshes_reveal.c 
taler-exchange-httpd_refreshes_reveal.h \
   taler-exchange-httpd_refund.c taler-exchange-httpd_refund.h \
+  taler-exchange-httpd_reserves_attest.c 
taler-exchange-httpd_reserves_attest.h \
   taler-exchange-httpd_reserves_close.c taler-exchange-httpd_reserves_close.h \
   taler-exchange-httpd_reserves_get.c taler-exchange-httpd_reserves_get.h \
   taler-exchange-httpd_reserves_get_attest.c 
taler-exchange-httpd_reserves_get_attest.h \
diff --git a/src/exchange/taler-exchange-httpd_reserves_attest.c 
b/src/exchange/taler-exchange-httpd_reserves_attest.c
index 2bde9eb2..6a030dbd 100644
--- a/src/exchange/taler-exchange-httpd_reserves_attest.c
+++ b/src/exchange/taler-exchange-httpd_reserves_attest.c
@@ -14,8 +14,8 @@
   TALER; see the file COPYING.  If not, see <http://www.gnu.org/licenses/>
 */
 /**
- * @file taler-exchange-httpd_reserves_close.c
- * @brief Handle /reserves/$RESERVE_PUB/close requests
+ * @file taler-exchange-httpd_reserves_attest.c
+ * @brief Handle /reserves/$RESERVE_PUB/attest requests
  * @author Florian Dold
  * @author Benedikt Mueller
  * @author Christian Grothoff
@@ -55,24 +55,25 @@ struct ReserveAttestContext
   struct GNUNET_TIME_Timestamp timestamp;
 
   /**
-   * Client signature approving the request.
+   * Expiration time for the attestation.
    */
-  struct TALER_ReserveSignatureP reserve_sig;
+  struct GNUNET_TIME_Timestamp etime;
 
   /**
-   * Attest of the reserve, set in the callback.
+   * List of requested details.
    */
-  struct TALER_EXCHANGEDB_ReserveAttest *rh;
+  json_t *details;
 
   /**
-   * Global fees applying to the request.
+   * Client signature approving the request.
    */
-  const struct TEH_GlobalFee *gf;
+  struct TALER_ReserveSignatureP reserve_sig;
 
   /**
-   * Current reserve balance.
+   * Attributes we are affirming.
    */
-  struct TALER_Amount balance;
+  json_t *json_attest;
+
 };
 
 
@@ -87,22 +88,44 @@ static MHD_RESULT
 reply_reserve_attest_success (struct MHD_Connection *connection,
                               const struct ReserveAttestContext *rhc)
 {
-  const struct TALER_EXCHANGEDB_ReserveAttest *rh = rhc->rh;
-  json_t *json_attest;
+  struct TALER_ExchangeSignatureP exchange_sig;
+  struct TALER_ExchangePublicKeyP exchange_pub;
+  enum TALER_ErrorCode ec;
+  struct GNUNET_TIME_Timestamp now;
 
-  json_attest = TEH_RESPONSE_compile_reserve_attest (rh);
-  if (NULL == json_attest)
+  if (NULL == rhc->json_attest)
+  {
+    GNUNET_break (0);
     return TALER_MHD_reply_with_error (connection,
                                        MHD_HTTP_INTERNAL_SERVER_ERROR,
                                        
TALER_EC_GENERIC_JSON_ALLOCATION_FAILURE,
                                        NULL);
+  }
+  now = GNUNET_TIME_timestamp_get ();
+  ec = TALER_exchange_online_reserve_attest_details_sign (
+    &TEH_keys_exchange_sign_,
+    now,
+    rhc->etime,
+    rhc->reserve_pub,
+    rhc->json_attest,
+    &exchange_pub,
+    &exchange_sig);
+  if (TALER_EC_NONE != ec)
+  {
+    GNUNET_break (0);
+    return TALER_MHD_reply_with_ec (connection,
+                                    ec,
+                                    NULL);
+  }
   return TALER_MHD_REPLY_JSON_PACK (
     connection,
     MHD_HTTP_OK,
-    TALER_JSON_pack_amount ("balance",
-                            &rhc->balance),
+    GNUNET_JSON_pack_data_auto ("exchange_sig",
+                                &exchange_sig),
+    GNUNET_JSON_pack_data_auto ("exchange_pub",
+                                &exchange_pub),
     GNUNET_JSON_pack_array_steal ("attest",
-                                  json_attest));
+                                  rhc->json_attest));
 }
 
 
@@ -129,49 +152,15 @@ reserve_attest_transaction (void *cls,
   struct ReserveAttestContext *rsc = cls;
   enum GNUNET_DB_QueryStatus qs;
 
-  if (! TALER_amount_is_zero (&rsc->gf->fees.attest))
-  {
-    bool balance_ok = false;
-    bool idempotent = true;
-
-    qs = TEH_plugin->insert_attest_request (TEH_plugin->cls,
-                                            rsc->reserve_pub,
-                                            &rsc->reserve_sig,
-                                            rsc->timestamp,
-                                            &rsc->gf->fees.attest,
-                                            &balance_ok,
-                                            &idempotent);
-    if (GNUNET_DB_STATUS_HARD_ERROR == qs)
-    {
-      GNUNET_break (0);
-      *mhd_ret
-        = TALER_MHD_reply_with_error (connection,
-                                      MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                      TALER_EC_GENERIC_DB_FETCH_FAILED,
-                                      "get_reserve_attest");
-    }
-    if (qs <= 0)
-    {
-      GNUNET_break (GNUNET_DB_STATUS_SOFT_ERROR == qs);
-      return qs;
-    }
-    if (! balance_ok)
-    {
-      return TALER_MHD_reply_with_error (connection,
-                                         MHD_HTTP_CONFLICT,
-                                         
TALER_EC_EXCHANGE_WITHDRAW_ATTEST_ERROR_INSUFFICIENT_FUNDS,
-                                         NULL);
-    }
-    if (idempotent)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
-                  "Idempotent /reserves/attest request observed. Is caching 
working?\n");
-    }
-  }
+#if FIXME
   qs = TEH_plugin->get_reserve_attest (TEH_plugin->cls,
                                        rsc->reserve_pub,
-                                       &rsc->balance,
-                                       &rsc->rh);
+                                       &rsc->json_attest,
+                                       &etime);
+#else
+  qs = GNUNET_DB_STATUS_HARD_ERROR;
+  (void) rsc;
+#endif
   if (GNUNET_DB_STATUS_HARD_ERROR == qs)
   {
     GNUNET_break (0);
@@ -181,6 +170,7 @@ reserve_attest_transaction (void *cls,
                                     TALER_EC_GENERIC_DB_FETCH_FAILED,
                                     "get_reserve_attest");
   }
+  // FIXME: filter json_attest by requested attributes!
   return qs;
 }
 
@@ -195,6 +185,8 @@ TEH_handler_reserves_attest (struct TEH_RequestContext *rc,
   struct GNUNET_JSON_Specification spec[] = {
     GNUNET_JSON_spec_timestamp ("request_timestamp",
                                 &rsc.timestamp),
+    GNUNET_JSON_spec_json ("details",
+                           &rsc.details),
     GNUNET_JSON_spec_fixed_auto ("reserve_sig",
                                  &rsc.reserve_sig),
     GNUNET_JSON_spec_end ()
@@ -230,35 +222,12 @@ TEH_handler_reserves_attest (struct TEH_RequestContext 
*rc,
                                        TALER_EC_EXCHANGE_GENERIC_CLOCK_SKEW,
                                        NULL);
   }
-  {
-    struct TEH_KeyStateHandle *keys;
 
-    keys = TEH_keys_get_state ();
-    if (NULL == keys)
-    {
-      GNUNET_break (0);
-      GNUNET_JSON_parse_free (spec);
-      return TALER_MHD_reply_with_error (rc->connection,
-                                         MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                         
TALER_EC_EXCHANGE_GENERIC_KEYS_MISSING,
-                                         NULL);
-    }
-    rsc.gf = TEH_keys_global_fee_by_time (keys,
-                                          rsc.timestamp);
-  }
-  if (NULL == rsc.gf)
-  {
-    GNUNET_break (0);
-    return TALER_MHD_reply_with_error (rc->connection,
-                                       MHD_HTTP_INTERNAL_SERVER_ERROR,
-                                       
TALER_EC_EXCHANGE_GENERIC_BAD_CONFIGURATION,
-                                       NULL);
-  }
   if (GNUNET_OK !=
-      TALER_wallet_reserve_attest_verify (rsc.timestamp,
-                                          &rsc.gf->fees.attest,
-                                          reserve_pub,
-                                          &rsc.reserve_sig))
+      TALER_wallet_reserve_attest_request_verify (rsc.timestamp,
+                                                  rsc.details,
+                                                  reserve_pub,
+                                                  &rsc.reserve_sig))
   {
     GNUNET_break_op (0);
     return TALER_MHD_reply_with_error (rc->connection,
@@ -266,10 +235,9 @@ TEH_handler_reserves_attest (struct TEH_RequestContext *rc,
                                        
TALER_EC_EXCHANGE_RESERVES_ATTEST_BAD_SIGNATURE,
                                        NULL);
   }
-  rsc.rh = NULL;
   if (GNUNET_OK !=
       TEH_DB_run_transaction (rc->connection,
-                              "get reserve attest",
+                              "post reserve attest",
                               TEH_MT_REQUEST_OTHER,
                               &mhd_ret,
                               &reserve_attest_transaction,
@@ -277,17 +245,8 @@ TEH_handler_reserves_attest (struct TEH_RequestContext *rc,
   {
     return mhd_ret;
   }
-  if (NULL == rsc.rh)
-  {
-    return TALER_MHD_reply_with_error (rc->connection,
-                                       MHD_HTTP_NOT_FOUND,
-                                       
TALER_EC_EXCHANGE_GENERIC_RESERVE_UNKNOWN,
-                                       NULL);
-  }
   mhd_ret = reply_reserve_attest_success (rc->connection,
                                           &rsc);
-  TEH_plugin->free_reserve_attest (TEH_plugin->cls,
-                                   rsc.rh);
   return mhd_ret;
 }
 

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]