aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2024-11-04 15:20:00 +0100
committerFlorian Dold <florian@dold.me>2024-11-04 15:20:03 +0100
commitf6a86e8680ec57d5389e58c88bb462600894b25f (patch)
tree0ce13df7ca1957b197f89e1406be812d098899c4
parent97a767743cbbad2886d285f2885d3761bcb58d4a (diff)
kyc: create legi process before running instant measure aml program
-rw-r--r--src/exchange/taler-exchange-httpd_aml-decision.c29
-rw-r--r--src/exchangedb/exchange_do_insert_aml_decision.sql10
-rw-r--r--src/exchangedb/pg_insert_aml_decision.c6
-rw-r--r--src/exchangedb/pg_insert_aml_decision.h5
-rw-r--r--src/include/taler_exchangedb_plugin.h5
5 files changed, 48 insertions, 7 deletions
diff --git a/src/exchange/taler-exchange-httpd_aml-decision.c b/src/exchange/taler-exchange-httpd_aml-decision.c
index 1096bb7dd..cbd1f0a5f 100644
--- a/src/exchange/taler-exchange-httpd_aml-decision.c
+++ b/src/exchange/taler-exchange-httpd_aml-decision.c
@@ -168,6 +168,7 @@ TEH_handler_post_aml_decision (
struct TALER_PaytoHashP h_payto;
struct TALER_AmlOfficerSignatureP officer_sig;
struct TALER_KYCLOGIC_LegitimizationRuleSet *lrs = NULL;
+ uint64_t legi_measure_serial_id = 0;
MHD_RESULT ret;
struct GNUNET_JSON_Specification spec[] = {
GNUNET_JSON_spec_mark_optional (
@@ -332,7 +333,8 @@ TEH_handler_post_aml_decision (
&officer_sig,
&invalid_officer,
&unknown_account,
- &last_date);
+ &last_date,
+ &legi_measure_serial_id);
json_decref (jmeasures);
if (qs <= 0)
{
@@ -381,6 +383,7 @@ TEH_handler_post_aml_decision (
{
const struct TALER_KYCLOGIC_Measure *instant_ms = NULL;
struct MHD_Response *empty_response;
+ enum GNUNET_DB_QueryStatus qs;
if (NULL != new_measures)
{
@@ -394,6 +397,7 @@ TEH_handler_post_aml_decision (
to select some measure and contribute their KYC data. */
json_t *attributes
= json_object (); /* instant: empty attributes */
+ uint64_t process_row;
GNUNET_log (GNUNET_ERROR_TYPE_INFO,
"Running instant measure after AML decision\n");
@@ -403,10 +407,31 @@ TEH_handler_post_aml_decision (
= MHD_create_response_from_buffer_static (0,
"");
GNUNET_assert (NULL != empty_response);
+
+ qs = TEH_plugin->insert_kyc_requirement_process (
+ TEH_plugin->cls,
+ &h_payto,
+ 0, /* measure index */
+ legi_measure_serial_id,
+ "SKIP",
+ NULL, /* provider_account_id */
+ NULL, /* provider_legitimziation_id */
+ &process_row);
+ if (qs < 0)
+ {
+ GNUNET_break (0);
+ ret = TALER_MHD_reply_with_error (
+ rc->connection,
+ MHD_HTTP_INTERNAL_SERVER_ERROR,
+ TALER_EC_GENERIC_DB_STORE_FAILED,
+ "insert_kyc_requirement_process");
+ goto done;
+ }
+ /* FIXME: Insert start time of KYC process' AML program */
adc->kat
= TEH_kyc_finished2 (
&rc->async_scope_id,
- 0LL,
+ process_row,
instant_ms,
&h_payto,
"SKIP", /* provider */
diff --git a/src/exchangedb/exchange_do_insert_aml_decision.sql b/src/exchangedb/exchange_do_insert_aml_decision.sql
index 401d6e23e..7e2c9e716 100644
--- a/src/exchangedb/exchange_do_insert_aml_decision.sql
+++ b/src/exchangedb/exchange_do_insert_aml_decision.sql
@@ -31,7 +31,8 @@ CREATE FUNCTION exchange_do_insert_aml_decision(
IN in_notify_s TEXT,
OUT out_invalid_officer BOOLEAN,
OUT out_account_unknown BOOLEAN,
- OUT out_last_date INT8)
+ OUT out_last_date INT8,
+ OUT out_legitimization_measure_serial_id INT8)
LANGUAGE plpgsql
AS $$
DECLARE
@@ -40,6 +41,7 @@ DECLARE
BEGIN
out_account_unknown=FALSE;
+out_legitimization_measure_serial_id=0;
-- Check officer is eligible to make decisions.
@@ -132,7 +134,11 @@ THEN
(my_access_token
,in_decision_time
,in_jmeasures
- ,1);
+ ,1)
+ RETURNING
+ legitimization_measure_serial_id
+ INTO
+ out_legitimization_measure_serial_id;
END IF;
-- end if for where we had in_jmeasures
diff --git a/src/exchangedb/pg_insert_aml_decision.c b/src/exchangedb/pg_insert_aml_decision.c
index 4da711577..3e8a9b809 100644
--- a/src/exchangedb/pg_insert_aml_decision.c
+++ b/src/exchangedb/pg_insert_aml_decision.c
@@ -44,7 +44,8 @@ TEH_PG_insert_aml_decision (
const struct TALER_AmlOfficerSignatureP *decider_sig,
bool *invalid_officer,
bool *unknown_account,
- struct GNUNET_TIME_Timestamp *last_date)
+ struct GNUNET_TIME_Timestamp *last_date,
+ uint64_t *legitimization_measure_serial_id)
{
struct PostgresClosure *pg = cls;
struct TALER_KycCompletedEventP rep = {
@@ -85,6 +86,8 @@ TEH_PG_insert_aml_decision (
unknown_account),
GNUNET_PQ_result_spec_timestamp ("out_last_date",
last_date),
+ GNUNET_PQ_result_spec_uint64 ("out_legitimization_measure_serial_id",
+ legitimization_measure_serial_id),
GNUNET_PQ_result_spec_end
};
enum GNUNET_DB_QueryStatus qs;
@@ -95,6 +98,7 @@ TEH_PG_insert_aml_decision (
" out_invalid_officer"
",out_account_unknown"
",out_last_date"
+ ",out_legitimization_measure_serial_id"
" FROM exchange_do_insert_aml_decision"
"($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13);");
qs = GNUNET_PQ_eval_prepared_singleton_select (pg->conn,
diff --git a/src/exchangedb/pg_insert_aml_decision.h b/src/exchangedb/pg_insert_aml_decision.h
index 15441b4d4..afdd7f3a7 100644
--- a/src/exchangedb/pg_insert_aml_decision.h
+++ b/src/exchangedb/pg_insert_aml_decision.h
@@ -49,6 +49,8 @@
* @param[out] unknown_account set to TRUE if @a h_payto does not refer to a known account and @a jmeasures was given
* @param[out] last_date set to the previous decision time;
* the INSERT is not performed if @a last_date is not before @a decision_time
+ * @param[out] legitimization_measure_serial_id serial ID of the legitimization measures
+ * of the decision
* @return database transaction status
*/
enum GNUNET_DB_QueryStatus
@@ -68,7 +70,8 @@ TEH_PG_insert_aml_decision (
const struct TALER_AmlOfficerSignatureP *decider_sig,
bool *invalid_officer,
bool *unknown_account,
- struct GNUNET_TIME_Timestamp *last_date);
+ struct GNUNET_TIME_Timestamp *last_date,
+ uint64_t *legitimization_measure_serial_id);
#endif
diff --git a/src/include/taler_exchangedb_plugin.h b/src/include/taler_exchangedb_plugin.h
index ea5c0b560..bb1072485 100644
--- a/src/include/taler_exchangedb_plugin.h
+++ b/src/include/taler_exchangedb_plugin.h
@@ -7679,6 +7679,8 @@ struct TALER_EXCHANGEDB_Plugin
* @param[out] unknown_account set to TRUE if @a h_payto does not refer to a known account and @a jmeasures was given
* @param[out] last_date set to the previous decision time;
* the INSERT is not performed if @a last_date is not before @a decision_time
+ * @param[out] legitimization_measure_serial_id serial ID of the legitimization measures
+ * of the decision
* @return database transaction status
*/
enum GNUNET_DB_QueryStatus
@@ -7698,7 +7700,8 @@ struct TALER_EXCHANGEDB_Plugin
const struct TALER_AmlOfficerSignatureP *decider_sig,
bool *invalid_officer,
bool *unknown_account,
- struct GNUNET_TIME_Timestamp *last_date);
+ struct GNUNET_TIME_Timestamp *last_date,
+ uint64_t *legitimization_measure_serial_id);
/**