[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-merchant] branch master updated: allow other processes to immedia
From: |
gnunet |
Subject: |
[taler-merchant] branch master updated: allow other processes to immediately trigger KYC check |
Date: |
Sun, 08 Sep 2024 10:08:25 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository merchant.
The following commit(s) were added to refs/heads/master by this push:
new da2e3961 allow other processes to immediately trigger KYC check
da2e3961 is described below
commit da2e3961570f9f4da8bd20ddb8d5c581131412f4
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sun Sep 8 10:08:22 2024 +0200
allow other processes to immediately trigger KYC check
---
src/backend/taler-merchant-kyccheck.c | 133 +++++++++++++++++++++++++++++++++-
src/include/taler_merchantdb_plugin.h | 5 ++
2 files changed, 136 insertions(+), 2 deletions(-)
diff --git a/src/backend/taler-merchant-kyccheck.c
b/src/backend/taler-merchant-kyccheck.c
index bfa22451..c55b12c4 100644
--- a/src/backend/taler-merchant-kyccheck.c
+++ b/src/backend/taler-merchant-kyccheck.c
@@ -280,6 +280,13 @@ static struct GNUNET_DB_EventHandler *eh_accounts;
*/
static struct GNUNET_DB_EventHandler *eh_keys;
+/**
+ * Event handler to learn that there was a KYC
+ * rule triggered and we need to check the KYC
+ * status for an account.
+ */
+static struct GNUNET_DB_EventHandler *eh_rule;
+
/**
* Main task to discover (new) accounts.
*/
@@ -739,8 +746,12 @@ start_inquiry (struct Exchange *e,
switch (i->last_http_status)
{
case MHD_HTTP_OK:
- /* KYC is OK, only check again if triggered */
- i->due = GNUNET_TIME_UNIT_FOREVER_ABS;
+ /* KYC is OK, but we could have missed some triggers,
+ so let's check, but slowly within the next minute
+ so that we do not overdo it if this process happens
+ to be restarted a lot. */
+ i->due = GNUNET_TIME_relative_to_absolute (
+ GNUNET_TIME_randomize (GNUNET_TIME_UNIT_MINUTES));
break;
case MHD_HTTP_ACCEPTED:
/* KYC required, due immediately */
@@ -1071,6 +1082,106 @@ keys_changed (void *cls,
}
+/**
+ * Function called when a KYC rule was triggered by
+ * a transaction and we need to get the latest KYC
+ * status immediately.
+ *
+ * @param cls closure (NULL)
+ * @param extra additional event data provided
+ * @param extra_size number of bytes in @a extra
+ */
+static void
+rule_triggered (void *cls,
+ const void *extra,
+ size_t extra_size)
+{
+ const char *text = extra;
+ const char *space;
+ struct TALER_MerchantWireHashP h_wire;
+ const char *exchange_url;
+
+ (void) cls;
+ if ( (NULL == extra) ||
+ (0 == extra_size) )
+ {
+ GNUNET_break (0);
+ return;
+ }
+ if ('\0' != text[extra_size - 1])
+ {
+ GNUNET_break (0);
+ return;
+ }
+ space = memchr (extra,
+ ' ',
+ extra_size);
+ if (NULL == space)
+ {
+ GNUNET_break (0);
+ return;
+ }
+ if (GNUNET_OK !=
+ GNUNET_STRINGS_string_to_data (extra,
+ space - text,
+ &h_wire,
+ sizeof (h_wire)))
+ {
+ GNUNET_break (0);
+ return;
+ }
+ exchange_url = &space[1];
+ if (! TALER_is_web_url (exchange_url))
+ {
+ GNUNET_break (0);
+ return;
+ }
+
+ for (struct Account *a = a_head;
+ NULL != a;
+ a = a->next)
+ {
+ if (0 !=
+ GNUNET_memcmp (&h_wire,
+ &a->h_wire))
+ continue;
+ for (struct Inquiry *i = a->i_head;
+ NULL != i;
+ i = i->next)
+ {
+ if (0 != strcmp (exchange_url,
+ i->e->keys->exchange_url))
+ continue;
+ i->kyc_ok = false;
+ i->due = GNUNET_TIME_UNIT_ZERO_ABS;
+ if (NULL != i->task)
+ {
+ GNUNET_SCHEDULER_cancel (i->task);
+ i->task = NULL;
+ }
+ if (NULL != i->kyc)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "/kyc-check already running for %s\n",
+ text);
+ return;
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_INFO,
+ "Starting %skyc-check for `%s' due to KYC rule trigger\n",
+ exchange_url,
+ i->a->merchant_account_uri);
+ i->task = GNUNET_SCHEDULER_add_at (i->due,
+ &inquiry_work,
+ i);
+ return;
+ }
+ }
+ GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
+ "KYC rule trigger notification `%s' matches none of our
accounts\n",
+ text);
+}
+
+
/**
* Function called on each configuration section. Finds sections
* about exchanges, parses the entries.
@@ -1164,6 +1275,11 @@ shutdown_task (void *cls)
db_plugin->event_listen_cancel (eh_keys);
eh_keys = NULL;
}
+ if (NULL != eh_rule)
+ {
+ db_plugin->event_listen_cancel (eh_rule);
+ eh_rule = NULL;
+ }
TALER_MERCHANTDB_plugin_unload (db_plugin);
db_plugin = NULL;
cfg = NULL;
@@ -1241,6 +1357,19 @@ run (void *cls,
&keys_changed,
NULL);
}
+ {
+ struct GNUNET_DB_EventHeaderP es = {
+ .size = htons (sizeof (es)),
+ .type = htons (TALER_DBEVENT_MERCHANT_EXCHANGE_KYC_RULE_TRIGGERED)
+ };
+
+ eh_rule
+ = db_plugin->event_listen (db_plugin->cls,
+ &es,
+ GNUNET_TIME_UNIT_FOREVER_REL,
+ &rule_triggered,
+ NULL);
+ }
GNUNET_CONFIGURATION_iterate_sections (cfg,
&accept_exchanges,
NULL);
diff --git a/src/include/taler_merchantdb_plugin.h
b/src/include/taler_merchantdb_plugin.h
index d88a93df..5e50845c 100644
--- a/src/include/taler_merchantdb_plugin.h
+++ b/src/include/taler_merchantdb_plugin.h
@@ -77,6 +77,11 @@ struct TALER_MerchantAuthenticationSaltP
};
+/**
+ * Format of the data hashed to generate the notification
+ * string whenever the KYC status for an account has
+ * changed.
+ */
struct TALER_MERCHANTDB_MerchantKycStatusChangeEventP
{
/**
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-merchant] branch master updated: allow other processes to immediately trigger KYC check,
gnunet <=