summaryrefslogtreecommitdiff
path: root/talerblog/blog/blog.py
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2018-01-19 01:42:59 +0100
committerFlorian Dold <florian.dold@gmail.com>2018-01-19 01:42:59 +0100
commitdccc33da066801b7074e9541e7fcb040c61ece76 (patch)
treefde39998021d7eb3ab123f6decbae02b8fe3ba12 /talerblog/blog/blog.py
parent76e50212ac97a8be048c881f530efa4def49bab0 (diff)
downloadblog-dccc33da066801b7074e9541e7fcb040c61ece76.tar.gz
blog-dccc33da066801b7074e9541e7fcb040c61ece76.tar.bz2
blog-dccc33da066801b7074e9541e7fcb040c61ece76.zip
delete article from cache after refund
Diffstat (limited to 'talerblog/blog/blog.py')
-rw-r--r--talerblog/blog/blog.py26
1 files changed, 17 insertions, 9 deletions
diff --git a/talerblog/blog/blog.py b/talerblog/blog/blog.py
index d0e0b09..7d11294 100644
--- a/talerblog/blog/blog.py
+++ b/talerblog/blog/blog.py
@@ -110,6 +110,12 @@ def javascript_licensing():
return flask.render_template("templates/javascript.html")
+# Cache for paid articles (in the form <session_id>-<article_name>), so we
+# don't always have to ask the backend / DB, and so we don't have to store
+# variable-size cookies on the client.
+paid_articles_cache = SimpleCache()
+
+
# Triggers the refund by serving /refund/test?order_id=XY.
# Will be triggered by a "refund button".
@app.route("/refund/<order_id>", methods=["POST"])
@@ -127,9 +133,16 @@ def refund(order_id):
instance=INSTANCE,
)
resp = backend_post("refund", refund_spec)
- if resp.get("refund_redirect_url"):
- return flask.redirect(resp["refund_redirect_url"])
- err_abort(500, message="Response from backend incomplete", json=resp)
+ try:
+ # delete from paid article cache
+ article_name = refund_spec["contract_terms"]["extra"]["article_name"]
+ session_id = flask.session.get("session_id", "")
+ paid_articles_cache.delete(session_id + "-" + article_name)
+ if resp.get("refund_redirect_url"):
+ return flask.redirect(resp["refund_redirect_url"])
+ except KeyError:
+ err_abort(500, message="Response from backend incomplete", json=resp)
+
def render_article(article_name, data, order_id):
@@ -150,12 +163,6 @@ def render_article(article_name, data, order_id):
order_id=order_id)
-# Cache for paid articles (in the form <session_id>-<article_name>), so we
-# don't always have to ask the backend / DB, and so we don't have to store
-# variable-size cookies on the client.
-paid_articles_cache = SimpleCache()
-
-
@app.route("/essay/<article_name>")
@app.route("/essay/<article_name>/data/<data>")
def article(article_name, data=None):
@@ -196,6 +203,7 @@ def article(article_name, data=None):
resource_url=flask.request.base_url,
session_id=session_id,
session_sig=session_sig,
+ extra=dict(article_name=article_name)
)
pay_status = backend_get("check-payment", pay_params)