summaryrefslogtreecommitdiff
path: root/macaroonbakery/httpbakery/_discharge.py
blob: f868d230cea361405c54219c2033229cdc87c462 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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,
    )