Put KYC-related low-level DB methods.
This commit is contained in:
parent
52fa78b448
commit
edf3738b3f
@ -105,6 +105,7 @@ postgres_drop_tables (void *cls)
|
|||||||
{
|
{
|
||||||
struct PostgresClosure *pc = cls;
|
struct PostgresClosure *pc = cls;
|
||||||
struct GNUNET_PQ_ExecuteStatement es[] = {
|
struct GNUNET_PQ_ExecuteStatement es[] = {
|
||||||
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS kyc_events CASCADE;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS prewire CASCADE;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS prewire CASCADE;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback CASCADE;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS payback CASCADE;"),
|
||||||
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS aggregation_tracking CASCADE;"),
|
GNUNET_PQ_make_execute ("DROP TABLE IF EXISTS aggregation_tracking CASCADE;"),
|
||||||
@ -428,6 +429,15 @@ postgres_create_tables (void *cls)
|
|||||||
",finished BOOLEAN NOT NULL DEFAULT false"
|
",finished BOOLEAN NOT NULL DEFAULT false"
|
||||||
",buf BYTEA NOT NULL"
|
",buf BYTEA NOT NULL"
|
||||||
");"),
|
");"),
|
||||||
|
|
||||||
|
GNUNET_PQ_make_execute("CREATE TABLE IF NOT EXISTS kyc_events "
|
||||||
|
"(url TEXT NOT NULL"
|
||||||
|
",timestamp INT8 NOT NULL"
|
||||||
|
",amount_val INT8 NOT NULL"
|
||||||
|
",amount_frac INT4 NOT NULL"
|
||||||
|
",amount_curr VARCHAR("TALER_CURRENCY_LEN_STR") NOT NULL"
|
||||||
|
");"),
|
||||||
|
|
||||||
/* Index for wire_prepare_data_get and gc_prewire statement */
|
/* Index for wire_prepare_data_get and gc_prewire statement */
|
||||||
GNUNET_PQ_make_try_execute("CREATE INDEX prepare_iteration_index "
|
GNUNET_PQ_make_try_execute("CREATE INDEX prepare_iteration_index "
|
||||||
"ON prewire(finished);"),
|
"ON prewire(finished);"),
|
||||||
@ -1265,6 +1275,33 @@ postgres_prepare (PGconn *db_conn)
|
|||||||
" ORDER BY prewire_uuid ASC"
|
" ORDER BY prewire_uuid ASC"
|
||||||
" LIMIT 1;",
|
" LIMIT 1;",
|
||||||
0),
|
0),
|
||||||
|
/* Used in #postgres_insert_kyc_event */
|
||||||
|
GNUNET_PQ_make_prepare ("kyc_event_insert",
|
||||||
|
"INSERT INTO kyc_events "
|
||||||
|
"(url"
|
||||||
|
",timestamp"
|
||||||
|
",amount_val"
|
||||||
|
",amount_frac"
|
||||||
|
",amount_curr"
|
||||||
|
") VALUES "
|
||||||
|
"($1, $2, $3, $4);",
|
||||||
|
4),
|
||||||
|
|
||||||
|
/* Used in #postgres_kyc_event_get_last */
|
||||||
|
GNUNET_PQ_make_prepare ("kyc_event_get_last",
|
||||||
|
"SELECT "
|
||||||
|
" url"
|
||||||
|
",timestamp"
|
||||||
|
",amount_val"
|
||||||
|
",amount_frac"
|
||||||
|
",amount_curr"
|
||||||
|
" FROM kyc_events"
|
||||||
|
" WHERE url=$1"
|
||||||
|
" ORDER BY timestamp"
|
||||||
|
" LIMIT 1"
|
||||||
|
" OFFSET 0;",
|
||||||
|
1),
|
||||||
|
|
||||||
/* Used in #postgres_select_deposits_missing_wire */
|
/* Used in #postgres_select_deposits_missing_wire */
|
||||||
GNUNET_PQ_make_prepare ("deposits_get_overdue",
|
GNUNET_PQ_make_prepare ("deposits_get_overdue",
|
||||||
"SELECT"
|
"SELECT"
|
||||||
@ -6474,12 +6511,88 @@ postgres_select_deposits_missing_wire (void *cls,
|
|||||||
return qs;
|
return qs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a amount threshold for a KYC check that
|
||||||
|
* has been triggered for a certain merchant.
|
||||||
|
*
|
||||||
|
* @param cls plugins' closure
|
||||||
|
* @param url "payto" url identifying the merchant to be checked.
|
||||||
|
* @param amount the threshold amount associated with the check.
|
||||||
|
* @return transaction status code.
|
||||||
|
*/
|
||||||
|
static enum GNUNET_DB_QueryStatus
|
||||||
|
postgres_insert_kyc_event (void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *url,
|
||||||
|
const struct TALER_Amount *amount)
|
||||||
|
{
|
||||||
|
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_string (url),
|
||||||
|
TALER_PQ_query_param_amount (amount),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
|
||||||
|
qs = GNUNET_PQ_eval_prepared_non_select (session->conn,
|
||||||
|
"kyc_event_insert",
|
||||||
|
params);
|
||||||
|
return qs;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the _last_ KYC event associated with a certain merchant.
|
||||||
|
*
|
||||||
|
* @param cls plugin closure
|
||||||
|
* @param url the payto URL associated with the merchant whose
|
||||||
|
* KYC has to be returned.
|
||||||
|
* @param kyc_cb callback invoked with the timeout of last KYC event
|
||||||
|
* @param kyc_cb_cls closure for callback above
|
||||||
|
* @return transaction status
|
||||||
|
*/
|
||||||
|
static enum GNUNET_DB_QueryStatus
|
||||||
|
postgres_kyc_event_get_last (void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *url,
|
||||||
|
TALER_EXCHANGEDB_KycCallback kyc_cb,
|
||||||
|
void *kyc_cb_cls)
|
||||||
|
{
|
||||||
|
enum GNUNET_DB_QueryStatus qs;
|
||||||
|
struct GNUNET_TIME_Absolute ts;
|
||||||
|
|
||||||
|
struct GNUNET_PQ_QueryParam params[] = {
|
||||||
|
GNUNET_PQ_query_param_string (url),
|
||||||
|
GNUNET_PQ_query_param_end
|
||||||
|
};
|
||||||
|
|
||||||
|
struct GNUNET_PQ_ResultSpec rs[] = {
|
||||||
|
TALER_PQ_result_spec_absolute_time
|
||||||
|
("timestamp", &ts),
|
||||||
|
GNUNET_PQ_result_spec_end
|
||||||
|
};
|
||||||
|
|
||||||
|
qs = GNUNET_PQ_eval_prepared_singleton_select
|
||||||
|
(session->conn,
|
||||||
|
"kyc_event_get_last",
|
||||||
|
params,
|
||||||
|
rs);
|
||||||
|
|
||||||
|
kyc_cb (kyc_cb_cls,
|
||||||
|
ts);
|
||||||
|
|
||||||
|
if (GNUNET_DB_STATUS_SUCCESS_ONE_RESULT == qs)
|
||||||
|
GNUNET_PQ_cleanup_result (rs);
|
||||||
|
|
||||||
|
return qs;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize Postgres database subsystem.
|
* Initialize Postgres database subsystem.
|
||||||
*
|
*
|
||||||
* @param cls a configuration instance
|
* @param cls a configuration instance
|
||||||
* @return NULL on error, otherwise a `struct TALER_EXCHANGEDB_Plugin`
|
* @return NULL on error, otherwise a `struct
|
||||||
|
* TALER_EXCHANGEDB_Plugin`
|
||||||
*/
|
*/
|
||||||
void *
|
void *
|
||||||
libtaler_plugin_exchangedb_postgres_init (void *cls)
|
libtaler_plugin_exchangedb_postgres_init (void *cls)
|
||||||
@ -6607,6 +6720,10 @@ libtaler_plugin_exchangedb_postgres_init (void *cls)
|
|||||||
= &postgres_get_denomination_revocation;
|
= &postgres_get_denomination_revocation;
|
||||||
plugin->select_deposits_missing_wire
|
plugin->select_deposits_missing_wire
|
||||||
= &postgres_select_deposits_missing_wire;
|
= &postgres_select_deposits_missing_wire;
|
||||||
|
|
||||||
|
plugin->insert_kyc_event = postgres_insert_kyc_event;
|
||||||
|
plugin->kyc_event_get_last = postgres_kyc_event_get_last;
|
||||||
|
|
||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -807,6 +807,10 @@ typedef void
|
|||||||
const struct TALER_TransferPublicKeyP *tp);
|
const struct TALER_TransferPublicKeyP *tp);
|
||||||
|
|
||||||
|
|
||||||
|
typedef void
|
||||||
|
(*TALER_EXCHANGEDB_KycCallback)(void *cls,
|
||||||
|
struct GNUNET_TIME_Absolute timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Function called with details about coins that were refunding,
|
* Function called with details about coins that were refunding,
|
||||||
* with the goal of auditing the refund's execution.
|
* with the goal of auditing the refund's execution.
|
||||||
@ -2208,8 +2212,35 @@ struct TALER_EXCHANGEDB_Plugin
|
|||||||
TALER_EXCHANGEDB_WireMissingCallback cb,
|
TALER_EXCHANGEDB_WireMissingCallback cb,
|
||||||
void *cb_cls);
|
void *cb_cls);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Save a amount threshold for a KYC check that
|
||||||
|
* has been triggered for a certain merchant.
|
||||||
|
*
|
||||||
|
* @param cls plugins' closure
|
||||||
|
* @param url "payto" url identifying the merchant to be checked.
|
||||||
|
* @param amount the threshold amount associated with the check.
|
||||||
|
* @return transaction status code.
|
||||||
|
*/
|
||||||
|
enum GNUNET_DB_QueryStatus
|
||||||
|
(*insert_kyc_event)(void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *url,
|
||||||
|
const struct TALER_Amount *amount);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the _last_ KYC event associated with a certain merchant.
|
||||||
|
*
|
||||||
|
* @param cls plugin closure
|
||||||
|
* @param url the payto URL associated with the merchant whose
|
||||||
|
* KYC has to be returned.
|
||||||
|
* @return transaction status.
|
||||||
|
*/
|
||||||
|
enum GNUNET_DB_QueryStatus
|
||||||
|
(*kyc_event_get_last) (void *cls,
|
||||||
|
struct TALER_EXCHANGEDB_Session *session,
|
||||||
|
const char *url,
|
||||||
|
TALER_EXCHANGEDB_KycCallback kyc_cb,
|
||||||
|
void *kyc_cb_cls);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#endif /* _TALER_EXCHANGE_DB_H */
|
#endif /* _TALER_EXCHANGE_DB_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user