diff options
Diffstat (limited to 'src/include/anastasis_database_plugin.h')
-rw-r--r-- | src/include/anastasis_database_plugin.h | 69 |
1 files changed, 57 insertions, 12 deletions
diff --git a/src/include/anastasis_database_plugin.h b/src/include/anastasis_database_plugin.h index 7bf91a2..2082bf9 100644 --- a/src/include/anastasis_database_plugin.h +++ b/src/include/anastasis_database_plugin.h @@ -1,9 +1,9 @@ /* This file is part of Anastasis - Copyright (C) 2019-2021 Anastasis SARL + Copyright (C) 2019-2022 Anastasis SARL Anastasis is free software; you can redistribute it and/or modify it under the - terms of the GNU Lesser General Public License as published by the Free Software + terms of the GNU Affero General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. Anastasis is distributed in the hope that it will be useful, but WITHOUT ANY @@ -136,7 +136,7 @@ enum ANASTASIS_DB_StoreStatus typedef void (*ANASTASIS_DB_PaymentPendingIterator)( void *cls, - struct GNUNET_TIME_Absolute timestamp, + struct GNUNET_TIME_Timestamp timestamp, const struct ANASTASIS_PaymentSecretP *payment_secret, const struct TALER_Amount *amount); @@ -159,6 +159,26 @@ typedef bool /** + * Function called on matching meta data. Note that if the client did + * not provide meta data for @a version, the function will be called + * with @a recovery_meta_data being NULL. + * + * @param cls closure + * @param version the version of the recovery document + * @param ts timestamp when the document was uploaded + * @param recovery_meta_data contains meta data about the encrypted recovery document + * @param recovery_meta_data_size size of @a recovery_meta_data blob + * @return #GNUNET_OK to continue to iterate, #GNUNET_NO to abort iteration + */ +typedef enum GNUNET_GenericReturnValue +(*ANASTASIS_DB_RecoveryMetaCallback)(void *cls, + uint32_t version, + struct GNUNET_TIME_Timestamp ts, + const void *recovery_meta_data, + size_t recovery_meta_data_size); + + +/** * Handle to interact with the database. * * Functions ending with "_TR" run their OWN transaction scope @@ -329,6 +349,8 @@ struct ANASTASIS_DatabasePlugin * @param recovery_data_hash hash of @a data * @param recovery_data contains encrypted recovery document * @param recovery_data_size size of @a recovery_data blob + * @param recovery_meta_data contains meta data about the encrypted recovery document + * @param recovery_meta_data_size size of @a recovery_meta_data blob * @param payment_secret identifier for the payment, used to later charge on uploads * @param[out] version set to the version assigned to the document by the database * @return transaction status, 0 if upload could not be finished because @a payment_secret @@ -342,11 +364,34 @@ struct ANASTASIS_DatabasePlugin const struct GNUNET_HashCode *recovery_data_hash, const void *recovery_data, size_t recovery_data_size, + const void *recovery_meta_data, + size_t recovery_meta_data_size, const struct ANASTASIS_PaymentSecretP *payment_secret, uint32_t *version); /** + * Fetch recovery document meta data for user. Returns + * meta data in descending order from @a max_version. + * The size of the result set may be limited. + * + * @param cls closure + * @param account_pub public key of the user's account + * @param max_version the maximum version number the user requests + * @param cb function to call on each result + * @param cb_cls closure for @a cb + * @return transaction status + */ + enum GNUNET_DB_QueryStatus + (*get_recovery_meta_data)( + void *cls, + const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account_pub, + uint32_t max_version, + ANASTASIS_DB_RecoveryMetaCallback cb, + void *cb_cls); + + + /** * Fetch recovery document for user according given version. * * @param cls closure @@ -468,7 +513,7 @@ struct ANASTASIS_DatabasePlugin (*lookup_account)( void *cls, const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account_pub, - struct GNUNET_TIME_Absolute *paid_until, + struct GNUNET_TIME_Timestamp *paid_until, struct GNUNET_HashCode *recovery_data_hash, uint32_t *version); @@ -525,7 +570,7 @@ struct ANASTASIS_DatabasePlugin const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account_pub, const struct ANASTASIS_PaymentSecretP *payment_identifier, struct GNUNET_TIME_Relative lifetime, - struct GNUNET_TIME_Absolute *paid_until); + struct GNUNET_TIME_Timestamp *paid_until); /** @@ -543,7 +588,7 @@ struct ANASTASIS_DatabasePlugin void *cls, const struct ANASTASIS_CRYPTO_AccountPublicKeyP *account_pub, const struct ANASTASIS_PaymentSecretP *payment_identifier, - struct GNUNET_TIME_Absolute eol); + struct GNUNET_TIME_Timestamp eol); /** @@ -596,7 +641,7 @@ struct ANASTASIS_DatabasePlugin (*check_truth_upload_paid)( void *cls, const struct ANASTASIS_CRYPTO_TruthUUIDP *uuid, - struct GNUNET_TIME_Absolute *paid_until); + struct GNUNET_TIME_Timestamp *paid_until); /** @@ -633,7 +678,7 @@ struct ANASTASIS_DatabasePlugin (*mark_challenge_code_satisfied)( void *cls, const struct ANASTASIS_CRYPTO_TruthUUIDP *truth_uuid, - const uint64_t code); + uint64_t code); /** @@ -653,7 +698,7 @@ struct ANASTASIS_DatabasePlugin void *cls, const struct ANASTASIS_CRYPTO_TruthUUIDP *truth_uuid, const uint64_t code, - struct GNUNET_TIME_Absolute after); + struct GNUNET_TIME_Timestamp after); /** @@ -679,7 +724,7 @@ struct ANASTASIS_DatabasePlugin struct GNUNET_TIME_Relative rotation_period, struct GNUNET_TIME_Relative validity_period, uint32_t retry_counter, - struct GNUNET_TIME_Absolute *retransmission_date, + struct GNUNET_TIME_Timestamp *retransmission_date, uint64_t *code); @@ -780,7 +825,7 @@ struct ANASTASIS_DatabasePlugin const struct TALER_Amount *amount, const char *debit_account, const char *credit_account, - struct GNUNET_TIME_Absolute execution_date); + struct GNUNET_TIME_Timestamp execution_date); /** @@ -802,7 +847,7 @@ struct ANASTASIS_DatabasePlugin (*test_auth_iban_payment)( void *cls, const char *debit_account, - struct GNUNET_TIME_Absolute earliest_date, + struct GNUNET_TIME_Timestamp earliest_date, ANASTASIS_DB_AuthIbanTransfercheck cb, void *cb_cls); |