summaryrefslogtreecommitdiff
path: root/src/auditor/taler-auditor.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-03-17 17:49:55 +0100
committerChristian Grothoff <christian@grothoff.org>2017-03-17 17:49:55 +0100
commit382e3dfedbf3384065fc19b3ea561aed754b402f (patch)
treeca515bb07a782437ee3e87c548b22832a18abd28 /src/auditor/taler-auditor.c
parent8ea9b0dad7a67f0e04debcd1f6e6621538c0613f (diff)
downloadexchange-382e3dfedbf3384065fc19b3ea561aed754b402f.tar.gz
exchange-382e3dfedbf3384065fc19b3ea561aed754b402f.tar.bz2
exchange-382e3dfedbf3384065fc19b3ea561aed754b402f.zip
implement more audit checks for refunds
Diffstat (limited to 'src/auditor/taler-auditor.c')
-rw-r--r--src/auditor/taler-auditor.c43
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;
}