gnunet-svn
[Top][All Lists]
Advanced

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

[taler-anastasis] branch master updated: -pass db handle to auth plugins


From: gnunet
Subject: [taler-anastasis] branch master updated: -pass db handle to auth plugins
Date: Mon, 16 Aug 2021 11:36:17 +0200

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

grothoff pushed a commit to branch master
in repository anastasis.

The following commit(s) were added to refs/heads/master by this push:
     new b2d9f59  -pass db handle to auth plugins
b2d9f59 is described below

commit b2d9f5936b7e867180199771c9e47c6d95ec8b8a
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Mon Aug 16 11:36:14 2021 +0200

    -pass db handle to auth plugins
---
 src/authorization/anastasis_authorization_plugin.c | 12 +++++--
 .../anastasis_authorization_plugin_email.c         |  9 +++++-
 .../anastasis_authorization_plugin_file.c          |  6 +++-
 .../anastasis_authorization_plugin_iban.c          | 37 ++++++++--------------
 .../anastasis_authorization_plugin_post.c          | 10 +++++-
 .../anastasis_authorization_plugin_sms.c           |  9 +++++-
 src/backend/anastasis-httpd_config.c               |  1 +
 src/backend/anastasis-httpd_truth.c                |  1 +
 src/backend/anastasis-httpd_truth_upload.c         |  1 +
 src/include/anastasis_authorization_lib.h          |  2 ++
 src/include/anastasis_authorization_plugin.h       | 18 +++++++++++
 11 files changed, 77 insertions(+), 29 deletions(-)

diff --git a/src/authorization/anastasis_authorization_plugin.c 
b/src/authorization/anastasis_authorization_plugin.c
index da28f40..6683ff3 100644
--- a/src/authorization/anastasis_authorization_plugin.c
+++ b/src/authorization/anastasis_authorization_plugin.c
@@ -20,7 +20,7 @@
  * @author Dominik Meister
  */
 #include "platform.h"
-#include "anastasis_authorization_plugin.h"
+#include "anastasis_authorization_lib.h"
 #include <ltdl.h>
 
 
@@ -66,12 +66,18 @@ struct AuthPlugin
    */
   char *lib_name;
 
+  /**
+   * Authorization context passed to the plugin.
+   */
+  struct ANASTASIS_AuthorizationContext ac;
+
 };
 
 
 struct ANASTASIS_AuthorizationPlugin *
 ANASTASIS_authorization_plugin_load (
   const char *method,
+  struct ANASTASIS_DatabasePlugin *db,
   const struct GNUNET_CONFIGURATION_Handle *AH_cfg)
 {
   struct ANASTASIS_AuthorizationPlugin *authorization;
@@ -90,6 +96,8 @@ ANASTASIS_authorization_plugin_load (
                                  &currency))
     return NULL;
   ap = GNUNET_new (struct AuthPlugin);
+  ap->ac.db = db;
+  ap->ac.cfg = AH_cfg;
   GNUNET_asprintf (&sec_name,
                    "authorization-%s",
                    method);
@@ -127,7 +135,7 @@ ANASTASIS_authorization_plugin_load (
                    "libanastasis_plugin_authorization_%s",
                    method);
   authorization = GNUNET_PLUGIN_load (lib_name,
-                                      (void *) AH_cfg);
+                                      &ap->ac);
   if (NULL == authorization)
   {
     GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
diff --git a/src/authorization/anastasis_authorization_plugin_email.c 
b/src/authorization/anastasis_authorization_plugin_email.c
index c68e542..22a7824 100644
--- a/src/authorization/anastasis_authorization_plugin_email.c
+++ b/src/authorization/anastasis_authorization_plugin_email.c
@@ -48,6 +48,11 @@ struct Email_Context
    */
   json_t *messages;
 
+  /**
+   * Context we operate in.
+   */
+  const struct ANASTASIS_AuthorizationContext *ac;
+
 };
 
 
@@ -522,11 +527,13 @@ email_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 void *
 libanastasis_plugin_authorization_email_init (void *cls)
 {
+  const struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AuthorizationPlugin *plugin;
-  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  const struct GNUNET_CONFIGURATION_Handle *cfg = ac->cfg;
   struct Email_Context *ctx;
 
   ctx = GNUNET_new (struct Email_Context);
+  ctx->ac = ac;
   {
     char *fn;
     json_error_t err;
diff --git a/src/authorization/anastasis_authorization_plugin_file.c 
b/src/authorization/anastasis_authorization_plugin_file.c
index e8e53a0..38939a0 100644
--- a/src/authorization/anastasis_authorization_plugin_file.c
+++ b/src/authorization/anastasis_authorization_plugin_file.c
@@ -58,7 +58,7 @@ struct ANASTASIS_AUTHORIZATION_State
  *
  * To be possibly used before issuing a 402 payment required to the client.
  *
- * @param cls closure
+ * @param cls closure with a `const struct ANASTASIS_AuthorizationContext *`
  * @param connection HTTP client request (for queuing response)
  * @param truth_mime mime type of @e data
  * @param data input to validate (i.e. is it a valid phone number, etc.)
@@ -77,6 +77,7 @@ file_validate (void *cls,
   char *filename;
   bool flag;
 
+  (void) cls;
   if (NULL == data)
     return GNUNET_NO;
   filename = GNUNET_STRINGS_data_to_string_alloc (data,
@@ -122,6 +123,7 @@ file_start (void *cls,
             const void *data,
             size_t data_length)
 {
+  const struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AUTHORIZATION_State *as;
 
   as = GNUNET_new (struct ANASTASIS_AUTHORIZATION_State);
@@ -271,9 +273,11 @@ file_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 void *
 libanastasis_plugin_authorization_file_init (void *cls)
 {
+  const struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AuthorizationPlugin *plugin;
 
   plugin = GNUNET_new (struct ANASTASIS_AuthorizationPlugin);
+  plugin->cls = (void *) ac;
   plugin->code_validity_period = GNUNET_TIME_UNIT_MINUTES;
   plugin->code_rotation_period = GNUNET_TIME_UNIT_MINUTES;
   plugin->code_retransmission_frequency = GNUNET_TIME_UNIT_MINUTES;
diff --git a/src/authorization/anastasis_authorization_plugin_iban.c 
b/src/authorization/anastasis_authorization_plugin_iban.c
index d1a71f9..548b5c0 100644
--- a/src/authorization/anastasis_authorization_plugin_iban.c
+++ b/src/authorization/anastasis_authorization_plugin_iban.c
@@ -57,9 +57,9 @@ struct IBAN_Context
   char *business_name;
 
   /**
-   * Database handle.
+   * Handle to interact with a authorization backend.
    */
-  struct ANASTASIS_DatabasePlugin *db;
+  const struct ANASTASIS_AuthorizationContext *ac;
 
   /**
    * Amount we expect to be transferred.
@@ -407,14 +407,14 @@ iban_process (struct ANASTASIS_AUTHORIZATION_State *as,
     GNUNET_CRYPTO_hash (as->iban_number,
                         strlen (as->iban_number),
                         &espec.debit_iban_hash);
-    as->eh = ctx->db->event_listen (ctx->db->cls,
-                                    &espec.header,
-                                    &bank_event_cb,
-                                    as);
+    as->eh = ctx->ac->db->event_listen (ctx->ac->db->cls,
+                                        &espec.header,
+                                        &bank_event_cb,
+                                        as);
   }
-  qs = ctx->db->test_challenge_code_satisfied (ctx->db->cls,
-                                               &as->truth_uuid,
-                                               as->code);
+  qs = ctx->ac->db->test_challenge_code_satisfied (ctx->ac->db->cls,
+                                                   &as->truth_uuid,
+                                                   as->code);
   switch (qs)
   {
   case GNUNET_DB_STATUS_HARD_ERROR:
@@ -458,7 +458,7 @@ iban_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 
   if (NULL != as->eh)
   {
-    ctx->db->event_listen_cancel (as->eh);
+    ctx->ac->db->event_listen_cancel (as->eh);
     as->eh = NULL;
   }
   GNUNET_free (as->iban_number);
@@ -469,14 +469,15 @@ iban_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 /**
  * Initialize email based authorization plugin
  *
- * @param cls a configuration instance
+ * @param cls a `struct ANASTASIS_AuthorizationContext`
  * @return NULL on error, otherwise a `struct ANASTASIS_AuthorizationPlugin`
  */
 void *
 libanastasis_plugin_authorization_iban_init (void *cls)
 {
+  struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AuthorizationPlugin *plugin;
-  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  const struct GNUNET_CONFIGURATION_Handle *cfg = ac->cfg;
   struct IBAN_Context *ctx;
 
   ctx = GNUNET_new (struct IBAN_Context);
@@ -531,21 +532,12 @@ libanastasis_plugin_authorization_iban_init (void *cls)
     }
     GNUNET_free (fn);
   }
-  ctx->db = ANASTASIS_DB_plugin_load (cfg);
-  if (NULL == ctx->db)
-  {
-    json_decref (ctx->messages);
-    GNUNET_free (ctx->business_iban);
-    GNUNET_free (ctx->business_name);
-    GNUNET_free (ctx);
-    return NULL;
-  }
+  ctx->ac = ac;
   if (GNUNET_OK !=
       TALER_BANK_auth_parse_cfg (cfg,
                                  "authorization-iban",
                                  &ctx->auth))
   {
-    ANASTASIS_DB_plugin_unload (ctx->db);
     json_decref (ctx->messages);
     GNUNET_free (ctx->business_iban);
     GNUNET_free (ctx->business_name);
@@ -579,7 +571,6 @@ libanastasis_plugin_authorization_iban_done (void *cls)
   struct ANASTASIS_AuthorizationPlugin *plugin = cls;
   struct IBAN_Context *ctx = plugin->cls;
 
-  ANASTASIS_DB_plugin_unload (ctx->db);
   TALER_BANK_auth_free (&ctx->auth);
   json_decref (ctx->messages);
   GNUNET_free (ctx->business_iban);
diff --git a/src/authorization/anastasis_authorization_plugin_post.c 
b/src/authorization/anastasis_authorization_plugin_post.c
index bca4451..dddd273 100644
--- a/src/authorization/anastasis_authorization_plugin_post.c
+++ b/src/authorization/anastasis_authorization_plugin_post.c
@@ -42,6 +42,12 @@ struct PostContext
    * Messages of the plugin, read from a resource file.
    */
   json_t *messages;
+
+  /**
+   * Argument passed to the "init" function of each
+   * plugin.
+   */
+  const struct ANASTASIS_AuthorizationContext *ac;
 };
 
 
@@ -576,11 +582,13 @@ post_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 void *
 libanastasis_plugin_authorization_post_init (void *cls)
 {
+  const struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AuthorizationPlugin *plugin;
-  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  const struct GNUNET_CONFIGURATION_Handle *cfg = ac->cfg;
   struct PostContext *ctx;
 
   ctx = GNUNET_new (struct PostContext);
+  ctx->ac = ac;
   {
     char *fn;
     json_error_t err;
diff --git a/src/authorization/anastasis_authorization_plugin_sms.c 
b/src/authorization/anastasis_authorization_plugin_sms.c
index 05d7148..b780c68 100644
--- a/src/authorization/anastasis_authorization_plugin_sms.c
+++ b/src/authorization/anastasis_authorization_plugin_sms.c
@@ -47,6 +47,11 @@ struct SMS_Context
    * Messages of the plugin, read from a resource file.
    */
   json_t *messages;
+
+  /**
+   * Context we operate in.
+   */
+  const struct ANASTASIS_AuthorizationContext *ac;
 };
 
 
@@ -513,11 +518,13 @@ sms_cleanup (struct ANASTASIS_AUTHORIZATION_State *as)
 void *
 libanastasis_plugin_authorization_sms_init (void *cls)
 {
+  const struct ANASTASIS_AuthorizationContext *ac = cls;
   struct ANASTASIS_AuthorizationPlugin *plugin;
-  struct GNUNET_CONFIGURATION_Handle *cfg = cls;
+  const struct GNUNET_CONFIGURATION_Handle *cfg = ac->cfg;
   struct SMS_Context *ctx;
 
   ctx = GNUNET_new (struct SMS_Context);
+  ctx->ac = ac;
   {
     char *fn;
     json_error_t err;
diff --git a/src/backend/anastasis-httpd_config.c 
b/src/backend/anastasis-httpd_config.c
index d265f99..d96d57e 100644
--- a/src/backend/anastasis-httpd_config.c
+++ b/src/backend/anastasis-httpd_config.c
@@ -53,6 +53,7 @@ add_methods (void *cls,
     return;
   section += strlen ("authorization-");
   p = ANASTASIS_authorization_plugin_load (section,
+                                           db,
                                            AH_cfg);
   if (NULL == p)
   {
diff --git a/src/backend/anastasis-httpd_truth.c 
b/src/backend/anastasis-httpd_truth.c
index 0b9f4a3..8fb1aee 100644
--- a/src/backend/anastasis-httpd_truth.c
+++ b/src/backend/anastasis-httpd_truth.c
@@ -1168,6 +1168,7 @@ AH_handler_truth_get (
     {
       gc->authorization
         = ANASTASIS_authorization_plugin_load (method,
+                                               db,
                                                AH_cfg);
       if (NULL == gc->authorization)
       {
diff --git a/src/backend/anastasis-httpd_truth_upload.c 
b/src/backend/anastasis-httpd_truth_upload.c
index 0781f73..d9e63c3 100644
--- a/src/backend/anastasis-httpd_truth_upload.c
+++ b/src/backend/anastasis-httpd_truth_upload.c
@@ -674,6 +674,7 @@ AH_handler_truth_post (
                      type)) &&
        (NULL ==
         ANASTASIS_authorization_plugin_load (type,
+                                             db,
                                              AH_cfg)) )
   {
     GNUNET_JSON_parse_free (spec);
diff --git a/src/include/anastasis_authorization_lib.h 
b/src/include/anastasis_authorization_lib.h
index e8eaf74..975dd5f 100644
--- a/src/include/anastasis_authorization_lib.h
+++ b/src/include/anastasis_authorization_lib.h
@@ -29,12 +29,14 @@
  * Load authorization plugin.
  *
  * @param method name of the method to load
+ * @param db database handle to use
  * @param AH_cfg configuration to use
  * @return plugin handle on success
  */
 struct ANASTASIS_AuthorizationPlugin *
 ANASTASIS_authorization_plugin_load (
   const char *method,
+  struct ANASTASIS_DatabasePlugin *db,
   const struct GNUNET_CONFIGURATION_Handle *AH_cfg);
 
 
diff --git a/src/include/anastasis_authorization_plugin.h 
b/src/include/anastasis_authorization_plugin.h
index a1006a7..55f6369 100644
--- a/src/include/anastasis_authorization_plugin.h
+++ b/src/include/anastasis_authorization_plugin.h
@@ -85,6 +85,24 @@ enum ANASTASIS_AUTHORIZATION_Result
 };
 
 
+/**
+ * Argument passed to the "init" function of each
+ * plugin.
+ */
+struct ANASTASIS_AuthorizationContext
+{
+  /**
+   * Database handle.
+   */
+  struct ANASTASIS_DatabasePlugin *db;
+
+  /**
+   * Configuration to use.
+   */
+  const struct GNUNET_CONFIGURATION_Handle *cfg;
+};
+
+
 /**
  * Handle to interact with a authorization backend.
  */

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