WiP: age-withdraw implementation, part 4/n
- check dates of denominations (expiry, etc.) - refactor denomination checks into denomination_is_valid()
This commit is contained in:
parent
20cd46f63d
commit
2d1583f96b
@ -318,6 +318,87 @@ retrieve_original_commitment (
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO
|
||||||
|
*/
|
||||||
|
static bool
|
||||||
|
denomination_is_valid (
|
||||||
|
struct MHD_Connection *connection,
|
||||||
|
struct TEH_KeyStateHandle *ksh,
|
||||||
|
const struct TALER_DenominationHashP *denom_h,
|
||||||
|
struct TEH_DenominationKey *dks,
|
||||||
|
MHD_RESULT *result)
|
||||||
|
{
|
||||||
|
dks = TEH_keys_denomination_by_hash2 (
|
||||||
|
ksh,
|
||||||
|
denom_h,
|
||||||
|
connection,
|
||||||
|
result);
|
||||||
|
|
||||||
|
/* Does the denomination exist? */
|
||||||
|
if (NULL == dks)
|
||||||
|
{
|
||||||
|
GNUNET_assert (result != NULL);
|
||||||
|
/* Note: a HTTP-response has been queued and result has been set by
|
||||||
|
* TEH_keys_denominations_by_hash2 */
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Is the denomation still and already valid? */
|
||||||
|
|
||||||
|
if (GNUNET_TIME_absolute_is_past (dks->meta.expire_withdraw.abs_time))
|
||||||
|
{
|
||||||
|
/* This denomination is past the expiration time for withdraws */
|
||||||
|
*result = TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||||
|
connection,
|
||||||
|
denom_h,
|
||||||
|
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_EXPIRED,
|
||||||
|
"age-withdraw_reveal");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GNUNET_TIME_absolute_is_future (dks->meta.start.abs_time))
|
||||||
|
{
|
||||||
|
/* This denomination is not yet valid */
|
||||||
|
*result = TEH_RESPONSE_reply_expired_denom_pub_hash (
|
||||||
|
connection,
|
||||||
|
denom_h,
|
||||||
|
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_VALIDITY_IN_FUTURE,
|
||||||
|
"age-withdraw_reveal");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dks->recoup_possible)
|
||||||
|
{
|
||||||
|
/* This denomination has been revoked */
|
||||||
|
*result = TALER_MHD_reply_with_error (
|
||||||
|
connection,
|
||||||
|
MHD_HTTP_GONE,
|
||||||
|
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_REVOKED,
|
||||||
|
NULL);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Does the denomation support age restriction ? */
|
||||||
|
if (0 == dks->denom_pub.age_mask.bits)
|
||||||
|
{
|
||||||
|
char msg[256] = {0};
|
||||||
|
GNUNET_snprintf (msg,
|
||||||
|
sizeof(msg),
|
||||||
|
"denomination %s does not support age restriction",
|
||||||
|
GNUNET_h2s (&denom_h->hash));
|
||||||
|
|
||||||
|
*result = TALER_MHD_reply_with_error (connection,
|
||||||
|
MHD_HTTP_BAD_REQUEST,
|
||||||
|
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
|
||||||
|
msg);
|
||||||
|
return GNUNET_SYSERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if the given array of hashes of denomination_keys a) belong
|
* Check if the given array of hashes of denomination_keys a) belong
|
||||||
* to valid denominations and b) those are marked as age restricted.
|
* to valid denominations and b) those are marked as age restricted.
|
||||||
@ -364,34 +445,12 @@ all_denominations_valid (
|
|||||||
|
|
||||||
for (uint32_t i = 0; i < len; i++)
|
for (uint32_t i = 0; i < len; i++)
|
||||||
{
|
{
|
||||||
dks[i] = TEH_keys_denomination_by_hash2 (
|
if (! denomination_is_valid (connection,
|
||||||
ksh,
|
ksh,
|
||||||
&denoms_h[i],
|
&denoms_h[i],
|
||||||
connection,
|
dks[i],
|
||||||
result);
|
result))
|
||||||
|
|
||||||
/* Does the denomination exist? */
|
|
||||||
if (NULL == dks[i])
|
|
||||||
{
|
{
|
||||||
GNUNET_assert (result != NULL);
|
|
||||||
/* Note: a HTTP-response has been queued and result has been set by
|
|
||||||
* TEH_keys_denominations_by_hash2 */
|
|
||||||
return GNUNET_SYSERR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Does the denomation support age restriction ? */
|
|
||||||
if (0 == dks[i]->denom_pub.age_mask.bits)
|
|
||||||
{
|
|
||||||
char msg[256] = {0};
|
|
||||||
GNUNET_snprintf (msg,
|
|
||||||
sizeof(msg),
|
|
||||||
"denomination key no. %d does not support age restriction",
|
|
||||||
i + 1);
|
|
||||||
|
|
||||||
*result = TALER_MHD_reply_with_error (connection,
|
|
||||||
MHD_HTTP_BAD_REQUEST,
|
|
||||||
TALER_EC_EXCHANGE_GENERIC_DENOMINATION_KEY_UNKNOWN,
|
|
||||||
msg);
|
|
||||||
return GNUNET_SYSERR;
|
return GNUNET_SYSERR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user