diff options
Diffstat (limited to 'macaroonbakery/httpbakery/discharge.py')
-rw-r--r-- | macaroonbakery/httpbakery/discharge.py | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/macaroonbakery/httpbakery/discharge.py b/macaroonbakery/httpbakery/discharge.py new file mode 100644 index 0000000..ef3481a --- /dev/null +++ b/macaroonbakery/httpbakery/discharge.py @@ -0,0 +1,33 @@ +# Copyright 2017 Canonical Ltd. +# Licensed under the LGPLv3, see LICENCE file for details. +import macaroonbakery.utils as utils +import macaroonbakery as bakery + + +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 Used to check third party caveats {macaroonbakery.ThirdPartyCaveatChecker} + @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, + ) |