summaryrefslogtreecommitdiff
path: root/macaroonbakery/httpbakery/_discharge.py
diff options
context:
space:
mode:
Diffstat (limited to 'macaroonbakery/httpbakery/_discharge.py')
-rw-r--r--macaroonbakery/httpbakery/_discharge.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/macaroonbakery/httpbakery/_discharge.py b/macaroonbakery/httpbakery/_discharge.py
new file mode 100644
index 0000000..f868d23
--- /dev/null
+++ b/macaroonbakery/httpbakery/_discharge.py
@@ -0,0 +1,34 @@
+# Copyright 2017 Canonical Ltd.
+# Licensed under the LGPLv3, see LICENCE file for details.
+import macaroonbakery.bakery as bakery
+import macaroonbakery._utils as utils
+
+
+def discharge(ctx, content, key, locator, checker):
+ '''Handles a discharge request as received by the /discharge
+ endpoint.
+ @param ctx The context passed to the checker {checkers.AuthContext}
+ @param content URL and form parameters {dict}
+ @param locator Locator used to add third party caveats returned by
+ the checker {macaroonbakery.ThirdPartyLocator}
+ @param checker {macaroonbakery.ThirdPartyCaveatChecker} Used to check third
+ party caveats.
+ @return The discharge macaroon {macaroonbakery.Macaroon}
+ '''
+ id = content.get('id')
+ if id is None:
+ id = content.get('id64')
+ if id is not None:
+ id = utils.b64decode(id)
+ caveat = content.get('caveat64')
+ if caveat is not None:
+ caveat = utils.b64decode(caveat)
+
+ return bakery.discharge(
+ ctx,
+ id=id,
+ caveat=caveat,
+ key=key,
+ checker=checker,
+ locator=locator,
+ )