gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: implement relevant parts of core


From: gnunet
Subject: [taler-exchange] branch master updated: implement relevant parts of core bank API v4 in fakebank
Date: Mon, 05 Feb 2024 11:33:19 +0100

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 14ccce8f implement relevant parts of core bank API v4 in fakebank
14ccce8f is described below

commit 14ccce8feebf4a9e5622ed4d93399cecf9a37248
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Mon Feb 5 11:33:14 2024 +0100

    implement relevant parts of core bank API v4 in fakebank
---
 src/bank-lib/Makefile.am                           |   1 +
 src/bank-lib/fakebank.c                            |   2 +-
 src/bank-lib/fakebank_bank.c                       |  35 ++-
 src/bank-lib/fakebank_bank_accounts_withdrawals.c  |   2 +-
 .../fakebank_bank_post_withdrawals_id_op.c         | 239 +++++++++++++++++++++
 .../fakebank_bank_post_withdrawals_id_op.h         |  53 +++++
 src/bank-lib/fakebank_tbi.c                        |   2 +-
 src/bank-lib/fakebank_tbr.c                        |   2 +-
 src/bank-lib/fakebank_twg.c                        |   2 +-
 9 files changed, 331 insertions(+), 7 deletions(-)

diff --git a/src/bank-lib/Makefile.am b/src/bank-lib/Makefile.am
index 3458b7a0..b849db5d 100644
--- a/src/bank-lib/Makefile.am
+++ b/src/bank-lib/Makefile.am
@@ -74,6 +74,7 @@ libtalerfakebank_la_SOURCES = \
   fakebank_bank_post_accounts_withdrawals.c 
fakebank_bank_post_accounts_withdrawals.h \
   fakebank_bank_post_withdrawals_abort.c 
fakebank_bank_post_withdrawals_abort.h \
   fakebank_bank_post_withdrawals_confirm.c 
fakebank_bank_post_withdrawals_confirm.h \
+  fakebank_bank_post_withdrawals_id_op.c 
fakebank_bank_post_withdrawals_id_op.h \
   fakebank_bank_testing_register.c fakebank_bank_testing_register.h \
   fakebank_tbr.c fakebank_tbr.h \
   fakebank_tbr_get_history.c fakebank_tbr_get_history.h \
diff --git a/src/bank-lib/fakebank.c b/src/bank-lib/fakebank.c
index 12302be7..3a004dc8 100644
--- a/src/bank-lib/fakebank.c
+++ b/src/bank-lib/fakebank.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
diff --git a/src/bank-lib/fakebank_bank.c b/src/bank-lib/fakebank_bank.c
index 353141a6..7c2d39ab 100644
--- a/src/bank-lib/fakebank_bank.c
+++ b/src/bank-lib/fakebank_bank.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
@@ -36,6 +36,7 @@
 #include "fakebank_bank_post_accounts_withdrawals.h"
 #include "fakebank_bank_post_withdrawals_abort.h"
 #include "fakebank_bank_post_withdrawals_confirm.h"
+#include "fakebank_bank_post_withdrawals_id_op.h"
 #include "fakebank_bank_testing_register.h"
 
 
@@ -73,7 +74,7 @@ TALER_FAKEBANK_bank_main_ (
       connection,
       MHD_HTTP_OK,
       GNUNET_JSON_pack_string ("version",
-                               "0:0:0"),
+                               "4:0:4"), /* not sure, API versions are not 
properly marked up! */
       GNUNET_JSON_pack_string ("currency",
                                h->currency),
       GNUNET_JSON_pack_string ("implementation",
@@ -479,6 +480,36 @@ TALER_FAKEBANK_bank_main_ (
         GNUNET_free (acc);
         return ret;
       }
+
+      if (0 == strncmp (end_acc,
+                        "/withdrawals/",
+                        strlen ("/withdrawals/")))
+      {
+        /* POST /accounts/$ACCOUNT/withdrawals/$WID/$OP */
+        MHD_RESULT ret;
+        const char *pos = &end_acc[strlen ("/withdrawals/")];
+        const char *op = strchr (pos, '/');
+
+        if (NULL != op)
+        {
+          char *wid = GNUNET_strndup (pos,
+                                      op - pos);
+
+          ret = TALER_FAKEBANK_bank_withdrawals_id_op_ (
+            h,
+            connection,
+            acc,
+            wid,
+            op,
+            upload_data,
+            upload_data_size,
+            con_cls);
+          GNUNET_free (wid);
+          GNUNET_free (acc);
+          return ret;
+        }
+        GNUNET_free (acc);
+      }
     }
   }
 
diff --git a/src/bank-lib/fakebank_bank_accounts_withdrawals.c 
b/src/bank-lib/fakebank_bank_accounts_withdrawals.c
index ffcff0e2..bb435d97 100644
--- a/src/bank-lib/fakebank_bank_accounts_withdrawals.c
+++ b/src/bank-lib/fakebank_bank_accounts_withdrawals.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c 
b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c
new file mode 100644
index 00000000..90493b4b
--- /dev/null
+++ b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.c
@@ -0,0 +1,239 @@
+/*
+  This file is part of TALER
+  (C) 2016-2024 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or
+  modify it under the terms of the GNU 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 General Public License for more details.
+
+  You should have received a copy of the GNU General Public
+  License along with TALER; see the file COPYING.  If not,
+  see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file bank-lib/fakebank_bank_post_withdrawals_id_op.c
+ * @brief implement bank API POST /accounts/$ACCOUNT/withdrawals/$WID/$OP 
endpoint(s)
+ * @author Christian Grothoff <christian@grothoff.org>
+ */
+#include "platform.h"
+#include <pthread.h>
+#include "taler_fakebank_lib.h"
+#include "taler_bank_service.h"
+#include "taler_mhd_lib.h"
+#include <gnunet/gnunet_mhd_compat.h>
+#include "fakebank.h"
+#include "fakebank_bank_post_withdrawals_id_op.h"
+#include "fakebank_common_lookup.h"
+#include "fakebank_common_lp.h"
+#include "fakebank_common_make_admin_transfer.h"
+
+
+/**
+ * Handle POST /accounts/$ACC/withdrawals/{withdrawal_id}/confirm request.
+ *
+ * @param h our fakebank handle
+ * @param connection the connection
+ * @param withdrawal_id the withdrawal operation identifier
+ * @return MHD result code
+ */
+static MHD_RESULT
+bank_withdrawals_confirm (
+  struct TALER_FAKEBANK_Handle *h,
+  struct MHD_Connection *connection,
+  const char *account,
+  const char *withdrawal_id)
+{
+  const struct Account *acc;
+  struct WithdrawalOperation *wo;
+
+  GNUNET_assert (0 ==
+                 pthread_mutex_lock (&h->big_lock));
+  acc = TALER_FAKEBANK_lookup_account_ (h,
+                                        account,
+                                        NULL);
+  if (NULL == acc)
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Account %s is unknown\n",
+                account);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       TALER_EC_BANK_UNKNOWN_ACCOUNT,
+                                       account);
+  }
+  wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h,
+                                                    withdrawal_id);
+  if ( (NULL == wo) ||
+       (acc != wo->debit_account) )
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       TALER_EC_BANK_TRANSACTION_NOT_FOUND,
+                                       withdrawal_id);
+  }
+  if (NULL == wo->exchange_account)
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_BAD_REQUEST,
+                                       
TALER_EC_BANK_POST_WITHDRAWAL_OPERATION_REQUIRED,
+                                       NULL);
+  }
+  if (wo->aborted)
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_CONFLICT,
+                                       TALER_EC_BANK_CONFIRM_ABORT_CONFLICT,
+                                       withdrawal_id);
+  }
+  GNUNET_assert (0 ==
+                 pthread_mutex_unlock (&h->big_lock));
+  if (GNUNET_OK !=
+      TALER_FAKEBANK_make_admin_transfer_ (
+        h,
+        wo->debit_account->account_name,
+        wo->exchange_account->account_name,
+        &wo->amount,
+        &wo->reserve_pub,
+        &wo->row_id,
+        &wo->timestamp))
+  {
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_CONFLICT,
+                                       
TALER_EC_BANK_DUPLICATE_RESERVE_PUB_SUBJECT,
+                                       NULL);
+  }
+  /* Re-acquiring the lock and continuing to operate on 'wo'
+     is currently (!) acceptable because we NEVER free 'wo'
+     until shutdown. We may want to revise this if keeping
+     all withdraw operations in RAM becomes an issue... */
+  GNUNET_assert (0 ==
+                 pthread_mutex_lock (&h->big_lock));
+  wo->confirmation_done = true;
+  TALER_FAKEBANK_notify_withdrawal_ (h,
+                                     wo);
+  GNUNET_assert (0 ==
+                 pthread_mutex_unlock (&h->big_lock));
+  return TALER_MHD_reply_static (connection,
+                                 MHD_HTTP_NO_CONTENT,
+                                 NULL,
+                                 NULL,
+                                 0);
+}
+
+
+/**
+ * Handle POST /accounts/$ACC/withdrawals/{withdrawal_id}/abort request.
+ *
+ * @param h our fakebank handle
+ * @param connection the connection
+ * @param withdrawal_id the withdrawal operation identifier
+ * @return MHD result code
+ */
+static MHD_RESULT
+bank_withdrawals_abort (
+  struct TALER_FAKEBANK_Handle *h,
+  struct MHD_Connection *connection,
+  const char *account,
+  const char *withdrawal_id)
+{
+  struct WithdrawalOperation *wo;
+  const struct Account *acc;
+
+  GNUNET_assert (0 ==
+                 pthread_mutex_lock (&h->big_lock));
+  acc = TALER_FAKEBANK_lookup_account_ (h,
+                                        account,
+                                        NULL);
+  if (NULL == acc)
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+                "Account %s is unknown\n",
+                account);
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       TALER_EC_BANK_UNKNOWN_ACCOUNT,
+                                       account);
+  }
+  wo = TALER_FAKEBANK_lookup_withdrawal_operation_ (h,
+                                                    withdrawal_id);
+  if ( (NULL == wo) ||
+       (acc != wo->debit_account) )
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_NOT_FOUND,
+                                       TALER_EC_BANK_TRANSACTION_NOT_FOUND,
+                                       withdrawal_id);
+  }
+  if (wo->confirmation_done)
+  {
+    GNUNET_assert (0 ==
+                   pthread_mutex_unlock (&h->big_lock));
+    return TALER_MHD_reply_with_error (connection,
+                                       MHD_HTTP_CONFLICT,
+                                       TALER_EC_BANK_ABORT_CONFIRM_CONFLICT,
+                                       withdrawal_id);
+  }
+  wo->aborted = true;
+  TALER_FAKEBANK_notify_withdrawal_ (h,
+                                     wo);
+  GNUNET_assert (0 ==
+                 pthread_mutex_unlock (&h->big_lock));
+  return TALER_MHD_reply_static (connection,
+                                 MHD_HTTP_NO_CONTENT,
+                                 NULL,
+                                 NULL,
+                                 0);
+}
+
+
+MHD_RESULT
+TALER_FAKEBANK_bank_withdrawals_id_op_ (
+  struct TALER_FAKEBANK_Handle *h,
+  struct MHD_Connection *connection,
+  const char *account,
+  const char *withdrawal_id,
+  const char *op,
+  const char *upload_data,
+  size_t *upload_data_size,
+  void **con_cls)
+{
+  if (0 == strcmp (op,
+                   "/confirm"))
+  {
+    return bank_withdrawals_confirm (h,
+                                     connection,
+                                     account,
+                                     withdrawal_id);
+  }
+  if (0 == strcmp (op,
+                   "/abort"))
+  {
+    return bank_withdrawals_abort (h,
+                                   connection,
+                                   account,
+                                   withdrawal_id);
+  }
+  GNUNET_break_op (0);
+  return TALER_MHD_reply_with_error (connection,
+                                     MHD_HTTP_NOT_FOUND,
+                                     TALER_EC_GENERIC_ENDPOINT_UNKNOWN,
+                                     op);
+}
diff --git a/src/bank-lib/fakebank_bank_post_withdrawals_id_op.h 
b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.h
new file mode 100644
index 00000000..52e9e796
--- /dev/null
+++ b/src/bank-lib/fakebank_bank_post_withdrawals_id_op.h
@@ -0,0 +1,53 @@
+/*
+  This file is part of TALER
+  (C) 2016-2024 Taler Systems SA
+
+  TALER is free software; you can redistribute it and/or
+  modify it under the terms of the GNU 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 General Public License for more details.
+
+  You should have received a copy of the GNU General Public
+  License along with TALER; see the file COPYING.  If not,
+  see <http://www.gnu.org/licenses/>
+*/
+/**
+ * @file bank-lib/fakebank_bank_post_withdrawals_id_op.h
+ * @brief implement bank API POST /accounts/$ACCOUNT/withdrawals/$WID/$OP 
endpoint(s)
+ * @author Christian Grothoff <christian@grothoff.org>
+ */
+#ifndef FAKEBANK_BANK_POST_WITHDRAWALS_ID_OP_H
+#define FAKEBANK_BANK_POST_WITHDRAWALS_ID_OP_H
+
+#include "taler_fakebank_lib.h"
+#include "taler_bank_service.h"
+#include "taler_mhd_lib.h"
+#include <gnunet/gnunet_mhd_compat.h>
+#include "fakebank.h"
+
+
+/**
+ * Handle POST /accounts/{account_name}/withdrawals/{withdrawal_id}/${OP} 
request.
+ *
+ * @param h our fakebank handle
+ * @param connection the connection
+ * @param withdrawal_id the withdrawal operation identifier
+ * @return MHD result code
+ */
+MHD_RESULT
+TALER_FAKEBANK_bank_withdrawals_id_op_ (
+  struct TALER_FAKEBANK_Handle *h,
+  struct MHD_Connection *connection,
+  const char *account,
+  const char *withdrawal_id,
+  const char *op,
+  const char *upload_data,
+  size_t *upload_data_size,
+  void **con_cls);
+
+#endif
diff --git a/src/bank-lib/fakebank_tbi.c b/src/bank-lib/fakebank_tbi.c
index 00db3ddc..463ec7d3 100644
--- a/src/bank-lib/fakebank_tbi.c
+++ b/src/bank-lib/fakebank_tbi.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
diff --git a/src/bank-lib/fakebank_tbr.c b/src/bank-lib/fakebank_tbr.c
index 56681841..0f0e5bdc 100644
--- a/src/bank-lib/fakebank_tbr.c
+++ b/src/bank-lib/fakebank_tbr.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License
diff --git a/src/bank-lib/fakebank_twg.c b/src/bank-lib/fakebank_twg.c
index 775bbb58..9356e69b 100644
--- a/src/bank-lib/fakebank_twg.c
+++ b/src/bank-lib/fakebank_twg.c
@@ -1,6 +1,6 @@
 /*
   This file is part of TALER
-  (C) 2016-2023 Taler Systems SA
+  (C) 2016-2024 Taler Systems SA
 
   TALER is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License

-- 
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]