diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-03-17 17:49:55 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-03-17 17:49:55 +0100 |
commit | 382e3dfedbf3384065fc19b3ea561aed754b402f (patch) | |
tree | ca515bb07a782437ee3e87c548b22832a18abd28 /src/auditor | |
parent | 8ea9b0dad7a67f0e04debcd1f6e6621538c0613f (diff) |
implement more audit checks for refunds
Diffstat (limited to 'src/auditor')
-rw-r--r-- | src/auditor/taler-auditor.c | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/src/auditor/taler-auditor.c b/src/auditor/taler-auditor.c index dab3d90a9..d04eabce3 100644 --- a/src/auditor/taler-auditor.c +++ b/src/auditor/taler-auditor.c @@ -1833,7 +1833,10 @@ refund_cb (void *cls, struct CoinContext *cc = cls; struct CoinSummary *cs; const struct TALER_EXCHANGEDB_DenominationKeyInformationP *dki; + struct DenominationSummary *ds; struct TALER_RefundRequestPS rr; + struct TALER_Amount amount_without_fee; + struct TALER_Amount refund_fee; cs = get_coin_summary (cc, coin_pub); @@ -1860,15 +1863,47 @@ refund_cb (void *cls, &merchant_sig->eddsa_sig, &merchant_pub->eddsa_pub)) { - report_row_inconsistency ("deposit", + report_row_inconsistency ("refund", rowid, - "invalid signature for coin deposit"); + "invalid signature for refund"); return GNUNET_OK; } - // TODO: update denomination key balance! + TALER_amount_ntoh (&refund_fee, + &dki->properties.fee_refund); + if (GNUNET_OK != + TALER_amount_subtract (&amount_without_fee, + amount_with_fee, + &refund_fee)) + { + report_row_inconsistency ("refund", + rowid, + "refunded amount smaller than refund fee"); + return GNUNET_OK; + } + + /* update coin's denomination balance */ + ds = get_denomination_summary (cc, + &dki->properties.denom_hash); + if (GNUNET_OK != + TALER_amount_add (&ds->denom_balance, + &ds->denom_balance, + &amount_without_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } + + /* update total refund fee balance */ + if (GNUNET_OK != + TALER_amount_add (&cc->refund_fee_balance, + &cc->refund_fee_balance, + &refund_fee)) + { + GNUNET_break (0); + return GNUNET_SYSERR; + } - // TODO: update expected amounts in 'cc' return GNUNET_OK; } |