gnunet-svn
[Top][All Lists]
Advanced

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

[taler-exchange] branch master updated: add cmd to get bank account toke


From: gnunet
Subject: [taler-exchange] branch master updated: add cmd to get bank account token
Date: Wed, 13 Nov 2024 14:36:08 +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 2c83e79f5 add cmd to get bank account token
2c83e79f5 is described below

commit 2c83e79f59500f3ac10331b5b86e7e5e914dbe18
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Nov 13 14:35:48 2024 +0100

    add cmd to get bank account token
---
 src/include/taler_testing_lib.h                  |  25 +++
 src/testing/Makefile.am                          |   1 +
 src/testing/testing_api_cmd_bank_account_token.c | 243 +++++++++++++++++++++++
 3 files changed, 269 insertions(+)

diff --git a/src/include/taler_testing_lib.h b/src/include/taler_testing_lib.h
index 8bd793120..53101ef47 100644
--- a/src/include/taler_testing_lib.h
+++ b/src/include/taler_testing_lib.h
@@ -747,6 +747,30 @@ TALER_TESTING_cmd_bank_credits (
   long long num_results);
 
 
+/**
+ * Make an account access token request CMD.
+ *
+ * @param label command label.
+ * @param auth login data to use
+ * @param account_name account name to request access token for
+ * @param scope requested token scope
+ * @param refreshable true if the token should be refreshable
+ * @param description human-readable token description (for token management)
+ * @param duration how long should the token be valid
+ * @param expected_http_status expected server response code
+ * @return the command.
+ */
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_bank_account_token (
+  const char *label,
+  const struct TALER_BANK_AuthenticationData *auth,
+  const char *account_name,
+  enum TALER_BANK_TokenScope scope,
+  bool refreshable,
+  struct GNUNET_TIME_Relative duration,
+  unsigned int expected_http_status);
+
+
 /**
  * Make a debit "history" CMD.
  *
@@ -2756,6 +2780,7 @@ TALER_TESTING_get_trait (const struct TALER_TESTING_Trait 
*traits,
  */
 #define TALER_TESTING_SIMPLE_TRAITS(op) \
         op (bank_row, const uint64_t)                                    \
+        op (access_token, const char)                                    \
         op (officer_pub, const struct TALER_AmlOfficerPublicKeyP)        \
         op (officer_priv, const struct TALER_AmlOfficerPrivateKeyP)      \
         op (officer_name, const char)                                    \
diff --git a/src/testing/Makefile.am b/src/testing/Makefile.am
index 68bf4cd08..31db673bf 100644
--- a/src/testing/Makefile.am
+++ b/src/testing/Makefile.am
@@ -47,6 +47,7 @@ libtalertesting_la_SOURCES = \
   testing_api_cmd_auditor_deposit_confirmation.c \
   testing_api_cmd_auditor_exec_auditor.c \
   testing_api_cmd_auditor_exec_auditor_dbinit.c \
+  testing_api_cmd_bank_account_token.c \
   testing_api_cmd_bank_admin_add_incoming.c \
   testing_api_cmd_bank_admin_add_kycauth.c \
   testing_api_cmd_bank_check.c \
diff --git a/src/testing/testing_api_cmd_bank_account_token.c 
b/src/testing/testing_api_cmd_bank_account_token.c
new file mode 100644
index 000000000..b40bc8b09
--- /dev/null
+++ b/src/testing/testing_api_cmd_bank_account_token.c
@@ -0,0 +1,243 @@
+/*
+  This file is part of TALER
+  Copyright (C) 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 testing/testing_api_cmd_bank_account_token.c
+ * @brief implementation of a bank /account/$ACC/token command
+ * @author Christian Grothoff
+ */
+#include "platform.h"
+#include "backoff.h"
+#include "taler_json_lib.h"
+#include <gnunet/gnunet_curl_lib.h>
+#include "taler_bank_service.h"
+#include "taler_signatures.h"
+#include "taler_testing_lib.h"
+
+/**
+ * State for a "bank transfer" CMD.
+ */
+struct AccountTokenState
+{
+
+  /**
+   * Name of the account.
+   */
+  const char *account_name;
+
+  /**
+   * Scope for the requested token.
+   */
+  enum TALER_BANK_TokenScope scope;
+
+  /**
+   * Is the token refreshable?
+   */
+  bool refreshable;
+
+  /**
+   * How long should the token be valid.
+   */
+  struct GNUNET_TIME_Relative duration;
+
+  /**
+   * The access token, set on success.
+   */
+  char *access_token;
+
+  /**
+   * Data to use for authentication of the request.
+   */
+  struct TALER_BANK_AuthenticationData auth;
+
+  /**
+   * Handle to the pending request at the bank.
+   */
+  struct TALER_BANK_AccountTokenHandle *ath;
+
+  /**
+   * Interpreter state.
+   */
+  struct TALER_TESTING_Interpreter *is;
+
+  /**
+   * Expected HTTP status code.
+   */
+  unsigned int expected_http_status;
+};
+
+
+/**
+ * This callback will process the bank response to the wire
+ * transfer.  It just checks whether the HTTP response code is
+ * acceptable.
+ *
+ * @param cls closure with the interpreter state
+ * @param atr response details
+ */
+static void
+token_result_cb (void *cls,
+                 const struct TALER_BANK_AccountTokenResponse *atr)
+{
+  struct AccountTokenState *fts = cls;
+  struct TALER_TESTING_Interpreter *is = fts->is;
+
+  fts->ath = NULL;
+  if (atr->http_status != fts->expected_http_status)
+  {
+    TALER_TESTING_unexpected_status (is,
+                                     atr->http_status,
+                                     fts->expected_http_status);
+    return;
+  }
+  switch (atr->http_status)
+  {
+  case MHD_HTTP_OK:
+    fts->access_token
+      = GNUNET_strdup (atr->details.ok.access_token);
+    break;
+  default:
+    break;
+  }
+  TALER_TESTING_interpreter_next (is);
+}
+
+
+static void
+account_token_run (
+  void *cls,
+  const struct TALER_TESTING_Command *cmd,
+  struct TALER_TESTING_Interpreter *is)
+{
+  struct AccountTokenState *fts = cls;
+
+  (void) cmd;
+  fts->is = is;
+  fts->ath
+    = TALER_BANK_account_token (
+        TALER_TESTING_interpreter_get_context (is),
+        &fts->auth,
+        fts->account_name,
+        fts->scope,
+        fts->refreshable,
+        NULL /* description */,
+        fts->duration,
+        &token_result_cb,
+        fts);
+  if (NULL == fts->ath)
+  {
+    GNUNET_break (0);
+    TALER_TESTING_interpreter_fail (is);
+    return;
+  }
+}
+
+
+/**
+ * Free the state of a "/admin/add-incoming" CMD, and possibly
+ * cancel a pending operation thereof.
+ *
+ * @param cls closure
+ * @param cmd current CMD being cleaned up.
+ */
+static void
+account_token_cleanup (
+  void *cls,
+  const struct TALER_TESTING_Command *cmd)
+{
+  struct AccountTokenState *fts = cls;
+
+  if (NULL != fts->ath)
+  {
+    TALER_TESTING_command_incomplete (fts->is,
+                                      cmd->label);
+    TALER_BANK_account_token_cancel (fts->ath);
+    fts->ath = NULL;
+  }
+  GNUNET_free (fts->access_token);
+  GNUNET_free (fts);
+}
+
+
+/**
+ * Offer internal data from a "/admin/add-incoming" CMD to other
+ * commands.
+ *
+ * @param cls closure.
+ * @param[out] ret result
+ * @param trait name of the trait.
+ * @param index index number of the object to offer.
+ * @return #GNUNET_OK on success.
+ */
+static enum GNUNET_GenericReturnValue
+account_token_traits (void *cls,
+                      const void **ret,
+                      const char *trait,
+                      unsigned int index)
+{
+  struct AccountTokenState *fts = cls;
+  struct TALER_TESTING_Trait traits[] = {
+    TALER_TESTING_make_trait_access_token (fts->access_token),
+    TALER_TESTING_trait_end ()
+  };
+
+  if (MHD_HTTP_OK !=
+      fts->expected_http_status)
+    return GNUNET_NO; /* requests that failed generate no history */
+
+  return TALER_TESTING_get_trait (traits,
+                                  ret,
+                                  trait,
+                                  index);
+}
+
+
+struct TALER_TESTING_Command
+TALER_TESTING_cmd_bank_account_token (
+  const char *label,
+  const struct TALER_BANK_AuthenticationData *auth,
+  const char *account_name,
+  enum TALER_BANK_TokenScope scope,
+  bool refreshable,
+  struct GNUNET_TIME_Relative duration,
+  unsigned int expected_http_status)
+{
+  struct AccountTokenState *fts;
+
+  fts = GNUNET_new (struct AccountTokenState);
+  fts->account_name = account_name;
+  fts->scope = scope;
+  fts->refreshable = refreshable;
+  fts->duration = duration;
+  fts->auth = *auth;
+  fts->expected_http_status = expected_http_status;
+  {
+    struct TALER_TESTING_Command cmd = {
+      .cls = fts,
+      .label = label,
+      .run = &account_token_run,
+      .cleanup = &account_token_cleanup,
+      .traits = &account_token_traits
+    };
+
+    return cmd;
+  }
+}
+
+
+/* end of testing_api_cmd_bank_account_token.c */

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