[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-exchange] 118/124: -fix FTBFS
From: |
gnunet |
Subject: |
[taler-exchange] 118/124: -fix FTBFS |
Date: |
Tue, 17 Sep 2024 21:28:50 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to tag cg-aml-branch-compiles
in repository exchange.
commit d78697313166cf3cae73ee4dc2193ba92c86fec0
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Jul 24 22:47:54 2024 +0200
-fix FTBFS
---
src/exchange/taler-exchange-httpd.c | 1 +
src/exchange/taler-exchange-httpd_kyc-upload.c | 181 ++++++++++++++++++-------
src/exchange/taler-exchange-httpd_kyc-upload.h | 7 +
3 files changed, 137 insertions(+), 52 deletions(-)
diff --git a/src/exchange/taler-exchange-httpd.c
b/src/exchange/taler-exchange-httpd.c
index 6a1934181..bec6cc87b 100644
--- a/src/exchange/taler-exchange-httpd.c
+++ b/src/exchange/taler-exchange-httpd.c
@@ -2570,6 +2570,7 @@ do_shutdown (void *cls)
mhd = TALER_MHD_daemon_stop ();
TEH_resume_keys_requests (true);
+ TEH_kyc_upload_cleanup ();
TEH_deposits_get_cleanup ();
TEH_reserves_get_cleanup ();
TEH_purses_get_cleanup ();
diff --git a/src/exchange/taler-exchange-httpd_kyc-upload.c
b/src/exchange/taler-exchange-httpd_kyc-upload.c
index 814767ea1..c9f983ed7 100644
--- a/src/exchange/taler-exchange-httpd_kyc-upload.c
+++ b/src/exchange/taler-exchange-httpd_kyc-upload.c
@@ -19,6 +19,7 @@
* @author Christian Grothoff
*/
#include "platform.h"
+#include "taler-exchange-httpd_common_kyc.h"
#include "taler-exchange-httpd_kyc-upload.h"
/**
@@ -36,6 +37,16 @@
struct UploadContext
{
+ /**
+ * Kept in a DLL.
+ */
+ struct UploadContext *next;
+
+ /**
+ * Kept in a DLL.
+ */
+ struct UploadContext *prev;
+
/**
* Access token for the KYC data of the account.
*/
@@ -46,17 +57,37 @@ struct UploadContext
*/
unsigned int measure_index;
+ /**
+ * HTTP status code to use with @e response.
+ */
+ unsigned int response_code;
+
/**
* Index in the legitimization measures table this ID
* refers to.
*/
unsigned long long legitimization_measure_serial_id;
+ /**
+ * Response to return, NULL if none yet.
+ */
+ struct MHD_Response *response;
+
/**
* Our post processor.
*/
struct MHD_PostProcessor *pp;
+ /**
+ * Request we are processing.
+ */
+ struct TEH_RequestContext *rc;
+
+ /**
+ * Handle for async KYC processing.
+ */
+ struct TEH_KycAmlTrigger *kat;
+
/**
* Uploaded data, in JSON.
*/
@@ -95,6 +126,32 @@ struct UploadContext
};
+/**
+ * Kept in a DLL.
+ */
+static struct UploadContext *uc_head;
+
+/**
+ * Kept in a DLL.
+ */
+static struct UploadContext *uc_tail;
+
+
+void
+TEH_kyc_upload_cleanup ()
+{
+ struct UploadContext *uc;
+
+ while (NULL != (uc = uc_head))
+ {
+ MHD_resume_connection (uc->rc->connection);
+ GNUNET_CONTAINER_DLL_remove (uc_head,
+ uc_tail,
+ uc);
+ }
+}
+
+
/**
* Check if the upload data is in binary and thus
* must be base32-encoded.
@@ -178,6 +235,11 @@ upload_cleaner (struct TEH_RequestContext *rc)
{
struct UploadContext *uc = rc->rh_ctx;
+ if (NULL != uc->kat)
+ {
+ TEH_kyc_finished_cancel (uc->kat);
+ uc->kat = NULL;
+ }
MHD_destroy_post_processor (uc->pp);
GNUNET_free (uc->filename);
GNUNET_free (uc->content_type);
@@ -261,6 +323,31 @@ post_helper (void *cls,
}
+/**
+ * Function called after the KYC-AML trigger is done.
+ *
+ * @param cls closure
+ * @param http_status final HTTP status to return
+ * @param[in] response final HTTP ro return
+ */
+static void
+aml_trigger_callback (
+ void *cls,
+ unsigned int http_status,
+ struct MHD_Response *response)
+{
+ struct UploadContext *uc = cls;
+
+ uc->response_code = http_status;
+ uc->response = response;
+ MHD_resume_connection (uc->rc->connection);
+ GNUNET_CONTAINER_DLL_remove (uc_head,
+ uc_tail,
+ uc);
+ TALER_MHD_daemon_trigger ();
+}
+
+
MHD_RESULT
TEH_handler_kyc_upload (struct TEH_RequestContext *rc,
const char *id,
@@ -275,6 +362,7 @@ TEH_handler_kyc_upload (struct TEH_RequestContext *rc,
char dummy;
uc = GNUNET_new (struct UploadContext);
+ uc->rc = rc;
uc->pp = MHD_create_post_processor (rc->connection,
UPLOAD_BUFFER_SIZE,
&post_helper,
@@ -332,6 +420,13 @@ TEH_handler_kyc_upload (struct TEH_RequestContext *rc,
}
return MHD_YES;
}
+ if (NULL != uc->response)
+ {
+ return MHD_queue_response (rc->connection,
+ uc->response_code,
+ uc->response);
+
+ }
if (0 != *upload_data_size)
{
MHD_RESULT mres;
@@ -349,6 +444,7 @@ TEH_handler_kyc_upload (struct TEH_RequestContext *rc,
struct TALER_PaytoHashP h_payto;
enum GNUNET_DB_QueryStatus qs;
json_t *jmeasures;
+ struct MHD_Response *empty_response;
qs = TEH_plugin->lookup_pending_legitimization (
TEH_plugin->cls,
@@ -410,60 +506,41 @@ TEH_handler_kyc_upload (struct TEH_RequestContext *rc,
"insert_kyc_requirement_process");
}
- /* Now finally encrypt and store attribute data */
+ empty_response
+ = MHD_create_response_from_buffer (0,
+ "",
+ MHD_RESPMEM_PERSISTENT);
+ uc->kat = TEH_kyc_finished (
+ &rc->async_scope_id,
+ legi_process_row,
+ &h_payto,
+ NULL /* provider name */,
+ NULL /* provider account */,
+ NULL /* provider legi ID */,
+ GNUNET_TIME_UNIT_FOREVER_ABS, /* expiration time */
+ uc->result,
+ MHD_HTTP_NO_CONTENT,
+ empty_response,
+ &aml_trigger_callback,
+ uc);
+ if (NULL == uc->kat)
{
- struct GNUNET_TIME_Timestamp now;
- struct GNUNET_TIME_Absolute expiration_time;
- void *enc_attributes;
- size_t enc_attributes_size;
-
- now = GNUNET_TIME_timestamp_get ();
-
- TALER_CRYPTO_kyc_attributes_encrypt (
- &TEH_attribute_key,
- uc->result,
- &enc_attributes,
- &enc_attributes_size);
- qs = TEH_plugin->insert_kyc_attributes (
- TEH_plugin->cls,
- legi_process_row,
- &h_payto,
- 0 /* birthday unknown */,
- now,
- NULL /* provider name */,
- NULL /* provider account */,
- NULL /* provider legi ID */,
- expiration_time,
- enc_attributes_size,
- enc_attributes,
- false /* FIXME: require aml!? Pass do not know? */
- );
- GNUNET_free (enc_attributes);
- if (qs < 0)
- {
- GNUNET_break (0);
- return TALER_MHD_reply_with_error (
- rc->connection,
- MHD_HTTP_INTERNAL_SERVER_ERROR,
- TALER_EC_GENERIC_DB_STORE_FAILED,
- "insert_kyc_attributes");
- }
- if (0 == qs)
- {
- // FIXME: should check for idempotency!
- return TALER_MHD_reply_with_error (
- rc->connection,
- MHD_HTTP_CONFLICT,
- TALER_EC_EXCHANGE_KYC_FORM_ALREADY_UPLOADED,
- "insert_kyc_attributes");
- }
+ GNUNET_break (0);
+ return TALER_MHD_reply_with_error (
+ rc->connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ -1, // FIXME
+ "TEH_kyc_finished");
}
+ GNUNET_CONTAINER_DLL_insert (uc_head,
+ uc_tail,
+ uc);
+ return MHD_YES;
}
-
- return TALER_MHD_reply_static (
+ // FIXME: should check for idempotency above!
+ return TALER_MHD_reply_with_error (
rc->connection,
- MHD_HTTP_NO_CONTENT,
- NULL,
- NULL,
- 0);
+ MHD_HTTP_CONFLICT,
+ TALER_EC_EXCHANGE_KYC_FORM_ALREADY_UPLOADED,
+ "insert_kyc_attributes");
}
diff --git a/src/exchange/taler-exchange-httpd_kyc-upload.h
b/src/exchange/taler-exchange-httpd_kyc-upload.h
index 7e2062066..7d395988a 100644
--- a/src/exchange/taler-exchange-httpd_kyc-upload.h
+++ b/src/exchange/taler-exchange-httpd_kyc-upload.h
@@ -29,6 +29,13 @@
#include "taler-exchange-httpd_responses.h"
+/**
+ * Resume suspended connections, called on shutdown.
+ */
+void
+TEH_kyc_upload_cleanup (void);
+
+
/**
* Handle a "/kyc-upload/$ID" request.
*
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
- [taler-exchange] 63/124: complete GET /aml//measures endpoint, (continued)
- [taler-exchange] 63/124: complete GET /aml//measures endpoint, gnunet, 2024/09/17
- [taler-exchange] 46/124: -minor testing fixups, gnunet, 2024/09/17
- [taler-exchange] 77/124: finish kyc_start API, gnunet, 2024/09/17
- [taler-exchange] 41/124: work all over the place, gnunet, 2024/09/17
- [taler-exchange] 67/124: -fix FTBFS, gnunet, 2024/09/17
- [taler-exchange] 53/124: work on kyc-info endpoint, gnunet, 2024/09/17
- [taler-exchange] 32/124: work on taler-exchange-kyc-tester, gnunet, 2024/09/17
- [taler-exchange] 76/124: start on kyc_start API, gnunet, 2024/09/17
- [taler-exchange] 72/124: first draft for kyc-upload, gnunet, 2024/09/17
- [taler-exchange] 60/124: implement TALER_EXCHANGE_lookup_kyc_attributes, gnunet, 2024/09/17
- [taler-exchange] 118/124: -fix FTBFS,
gnunet <=
- [taler-exchange] 95/124: -fix auditor insanity, gnunet, 2024/09/17
- [taler-exchange] 119/124: add new ECs, gnunet, 2024/09/17
- [taler-exchange] 91/124: implement kycauth_in_insert, gnunet, 2024/09/17
- [taler-exchange] 116/124: move TALER_JSON_ symbols into libtalerjson where they belong, gnunet, 2024/09/17
- [taler-exchange] 109/124: -diagnostic notes, gnunet, 2024/09/17
- [taler-exchange] 122/124: fix age restriction FTBFS, gnunet, 2024/09/17
- [taler-exchange] 102/124: introduce default check, gnunet, 2024/09/17
- [taler-exchange] 82/124: enable kyc-start endpoint, gnunet, 2024/09/17
- [taler-exchange] 61/124: work on more GET handlers, gnunet, 2024/09/17
- [taler-exchange] 36/124: store provider_name, instead of provider_section, gnunet, 2024/09/17