diff options
Diffstat (limited to 'talerblog/blog/blog.py')
-rw-r--r-- | talerblog/blog/blog.py | 26 |
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) |