def agent_visit(url, request):
            if request.method != "POST":
                raise Exception('unexpected method')
            log.info('agent_visit url {}'.format(url))
            body = json.loads(request.body.decode('utf-8'))
            if body['username'] != 'test-user':
                raise Exception('unexpected username in body {!r}'.format(request.body))
            public_key = bakery.PublicKey.deserialize(body['public_key'])
            ms = httpbakery.extract_macaroons(request.headers)
            if len(ms) == 0:
                b = bakery.Bakery(key=discharge_key)
                m = b.oven.macaroon(
                    version=bakery.LATEST_VERSION,
                    expiry=datetime.utcnow() + timedelta(days=1),
                    caveats=[bakery.local_third_party_caveat(
                        public_key,
                        version=httpbakery.request_version(request.headers))],
                    ops=[bakery.Op(entity='agent', action='login')])
                content, headers = httpbakery.discharge_required_response(
                    m, '/',
                    'test',
                    'message')
                resp = response(status_code=401,
                                content=content,
                                headers=headers)
                return request.hooks['response'][0](resp)

            return {
                'status_code': 200,
                'content': {
                    'agent_login': True
                }
            }
예제 #2
0
        def agent_visit(url, request):
            if request.method != "POST":
                raise Exception('unexpected method')
            log.info('agent_visit url {}'.format(url))
            body = json.loads(request.body.decode('utf-8'))
            if body['username'] != 'test-user':
                raise Exception('unexpected username in body {!r}'.format(
                    request.body))
            public_key = bakery.PublicKey.deserialize(body['public_key'])
            ms = httpbakery.extract_macaroons(request.headers)
            if len(ms) == 0:
                b = bakery.Bakery(key=discharge_key)
                m = b.oven.macaroon(
                    version=bakery.LATEST_VERSION,
                    expiry=datetime.utcnow() + timedelta(days=1),
                    caveats=[
                        bakery.local_third_party_caveat(
                            public_key,
                            version=httpbakery.request_version(
                                request.headers))
                    ],
                    ops=[bakery.Op(entity='agent', action='login')])
                content, headers = httpbakery.discharge_required_response(
                    m, '/', 'test', 'message')
                resp = response(status_code=401,
                                content=content,
                                headers=headers)
                return request.hooks['response'][0](resp)

            return {'status_code': 200, 'content': {'agent_login': True}}
예제 #3
0
 def test_discharge_all_local_discharge_version1(self):
     oc = common.new_bakery('ts', None)
     client_key = bakery.generate_key()
     m = oc.oven.macaroon(bakery.VERSION_1, common.ages, [
         bakery.local_third_party_caveat(
             client_key.public_key, bakery.VERSION_1)
     ], [bakery.LOGIN_OP])
     ms = bakery.discharge_all(m, no_discharge(self), client_key)
     oc.checker.auth([ms]).allow(common.test_context,
                                 [bakery.LOGIN_OP])
예제 #4
0
 def login(url, request):
     b = bakery.Bakery(key=discharge_key)
     m = b.oven.macaroon(
         version=bakery.LATEST_VERSION,
         expiry=datetime.utcnow() + timedelta(days=1),
         caveats=[
             bakery.local_third_party_caveat(
                 auth_info.key.public_key,
                 version=httpbakery.request_version(request.headers))
         ],
         ops=[bakery.Op(entity='agent', action='login')])
     return {'status_code': 200, 'content': {'macaroon': m.to_dict()}}
예제 #5
0
 def login(url, request):
     qs = parse_qs(urlparse(request.url).query)
     self.assertEqual(request.method, 'GET')
     self.assertEqual(qs, {
         'username': ['test-user'],
         'public-key': [PUBLIC_KEY]
     })
     b = bakery.Bakery(key=discharge_key)
     m = b.oven.macaroon(
         version=bakery.LATEST_VERSION,
         expiry=datetime.utcnow() + timedelta(days=1),
         caveats=[
             bakery.local_third_party_caveat(
                 PUBLIC_KEY,
                 version=httpbakery.request_version(request.headers))
         ],
         ops=[bakery.Op(entity='agent', action='login')])
     return {'status_code': 200, 'content': {'macaroon': m.to_dict()}}
 def login(url, request):
     qs = parse_qs(urlparse(request.url).query)
     self.assertEqual(request.method, 'GET')
     self.assertEqual(
         qs, {'username': ['test-user'], 'public-key': [PUBLIC_KEY]})
     b = bakery.Bakery(key=discharge_key)
     m = b.oven.macaroon(
         version=bakery.LATEST_VERSION,
         expiry=datetime.utcnow() + timedelta(days=1),
         caveats=[bakery.local_third_party_caveat(
             PUBLIC_KEY,
             version=httpbakery.request_version(request.headers))],
         ops=[bakery.Op(entity='agent', action='login')])
     return {
         'status_code': 200,
         'content': {
             'macaroon': m.to_dict()
         }
     }