Exemple #1
0
    def _get_authenticated_context(self, req):
        #NOTE(bcwaldon): X-Roles is a csv string, but we need to parse
        # it into a list to be useful
        roles_header = req.headers.get('X-Roles', '')
        roles = [r.strip().lower() for r in roles_header.split(',')]

        #NOTE(bcwaldon): This header is deprecated in favor of X-Auth-Token
        deprecated_token = req.headers.get('X-Storage-Token')

        service_catalog = None
        if req.headers.get('X-Service-Catalog') is not None:
            try:
                catalog_header = req.headers.get('X-Service-Catalog')
                service_catalog = jsonutils.loads(catalog_header)
            except ValueError:
                raise webob.exc.HTTPInternalServerError(
                    _('Invalid service catalog json.'))

        kwargs = {
            'user': req.headers.get('X-User-Id'),
            'tenant': req.headers.get('X-Tenant-Id'),
            'roles': roles,
            'is_admin': CONF.admin_role.strip().lower() in roles,
            'auth_tok': req.headers.get('X-Auth-Token', deprecated_token),
            'owner_is_tenant': CONF.owner_is_tenant,
            'service_catalog': service_catalog,
            'policy_enforcer': self.policy_enforcer,
        }

        return sps.context.RequestContext(**kwargs)
Exemple #2
0
    def _get_authenticated_context(self, req):
        #NOTE(bcwaldon): X-Roles is a csv string, but we need to parse
        # it into a list to be useful
        roles_header = req.headers.get('X-Roles', '')
        roles = [r.strip().lower() for r in roles_header.split(',')]

        #NOTE(bcwaldon): This header is deprecated in favor of X-Auth-Token
        deprecated_token = req.headers.get('X-Storage-Token')

        service_catalog = None
        if req.headers.get('X-Service-Catalog') is not None:
            try:
                catalog_header = req.headers.get('X-Service-Catalog')
                service_catalog = jsonutils.loads(catalog_header)
            except ValueError:
                raise webob.exc.HTTPInternalServerError(
                    _('Invalid service catalog json.'))

        kwargs = {
            'user': req.headers.get('X-User-Id'),
            'tenant': req.headers.get('X-Tenant-Id'),
            'roles': roles,
            'is_admin': CONF.admin_role.strip().lower() in roles,
            'auth_tok': req.headers.get('X-Auth-Token', deprecated_token),
            'owner_is_tenant': CONF.owner_is_tenant,
            'service_catalog': service_catalog,
            'policy_enforcer': self.policy_enforcer,
        }

        return sps.context.RequestContext(**kwargs)
Exemple #3
0
    def load_json(cls, data, default_rule=None):
        """
        Allow loading of JSON rule data.
        """

        # Suck in the JSON data and parse the rules
        rules = dict(
            (k, parse_rule(v)) for k, v in jsonutils.loads(data).items())

        return cls(rules, default_rule)
Exemple #4
0
    def load_json(cls, data, default_rule=None):
        """
        Allow loading of JSON rule data.
        """

        # Suck in the JSON data and parse the rules
        rules = dict((k, parse_rule(v)) for k, v in
                     jsonutils.loads(data).items())

        return cls(rules, default_rule)
Exemple #5
0
    def test_rpc_exception_propagation(self):
        api = create_api()
        req = webob.Request.blank('/rpc')
        req.method = 'POST'
        req.content_type = 'application/json'

        req.body = jsonutils.dumps([{"command": "raise_value_error"}])
        res = req.get_response(api)
        self.assertEqual(res.status_int, 200)

        returned = jsonutils.loads(res.body)[0]
        self.assertEqual(returned['_error']['cls'], 'exceptions.ValueError')

        req.body = jsonutils.dumps([{"command": "raise_weird_error"}])
        res = req.get_response(api)
        self.assertEqual(res.status_int, 200)

        returned = jsonutils.loads(res.body)[0]
        self.assertEqual(returned['_error']['cls'],
                         'sps.common.exception.RPCError')
Exemple #6
0
    def test_rpc_exception_propagation(self):
        api = create_api()
        req = webob.Request.blank('/rpc')
        req.method = 'POST'
        req.content_type = 'application/json'

        req.body = jsonutils.dumps([{"command": "raise_value_error"}])
        res = req.get_response(api)
        self.assertEqual(res.status_int, 200)

        returned = jsonutils.loads(res.body)[0]
        self.assertEqual(returned['_error']['cls'], 'exceptions.ValueError')

        req.body = jsonutils.dumps([{"command": "raise_weird_error"}])
        res = req.get_response(api)
        self.assertEqual(res.status_int, 200)

        returned = jsonutils.loads(res.body)[0]
        self.assertEqual(returned['_error']['cls'],
                         'sps.common.exception.RPCError')
Exemple #7
0
 def test_request(self):
     api = create_api()
     req = webob.Request.blank('/rpc')
     req.method = 'POST'
     req.body = jsonutils.dumps([{
         "command": "get_demos",
         "kwargs": {
             "keyword": 1
         }
     }])
     res = req.get_response(api)
     returned = jsonutils.loads(res.body)
     self.assertIsInstance(returned, list)
     self.assertEqual(returned[0], 1)
Exemple #8
0
 def test_request(self):
     api = create_api()
     req = webob.Request.blank('/rpc')
     req.method = 'POST'
     req.body = jsonutils.dumps([
         {
             "command": "get_demos",
             "kwargs": {"keyword": 1}
         }
     ])
     res = req.get_response(api)
     returned = jsonutils.loads(res.body)
     self.assertIsInstance(returned, list)
     self.assertEqual(returned[0], 1)
Exemple #9
0
    def test_request_exc(self):
        api = create_api()
        req = webob.Request.blank('/rpc')
        req.method = 'POST'
        req.body = jsonutils.dumps([
            {
                "command": "get_all_demos",
                "kwargs": {"keyword": 1}
            }
        ])

        # Sending non-accepted keyword
        # to get_all_demos method
        res = req.get_response(api)
        returned = jsonutils.loads(res.body)
        self.assertIn("_error", returned[0])
Exemple #10
0
    def test_request_exc(self):
        api = create_api()
        req = webob.Request.blank('/rpc')
        req.method = 'POST'
        req.body = jsonutils.dumps([{
            "command": "get_all_demos",
            "kwargs": {
                "keyword": 1
            }
        }])

        # Sending non-accepted keyword
        # to get_all_demos method
        res = req.get_response(api)
        returned = jsonutils.loads(res.body)
        self.assertIn("_error", returned[0])
Exemple #11
0
    def _read_policy_file(self):
        """Read contents of the policy file

        This re-caches policy data if the file has been changed.
        """
        mtime = os.path.getmtime(self.policy_path)
        if not self.policy_file_contents or mtime != self.policy_file_mtime:
            LOG.debug(_("Loading policy from %s") % self.policy_path)
            with open(self.policy_path) as fap:
                raw_contents = fap.read()
                rules_dict = jsonutils.loads(raw_contents)
                self.policy_file_contents = dict(
                    (k, policy.parse_rule(v))
                    for k, v in rules_dict.items())
            self.policy_file_mtime = mtime
        return self.policy_file_contents
Exemple #12
0
        def fake_do_request(cls, url, method, headers=None, body=None):
            if (not url.rstrip('/').endswith('v2.0/tokens') or
                    url.count("2.0") != 1):
                self.fail("Invalid v2.0 token path (%s)" % url)

            creds = jsonutils.loads(body)['auth']
            username = creds['passwordCredentials']['username']
            password = creds['passwordCredentials']['password']
            tenant = creds['tenantName']
            resp = webob.Response()

            if (username != 'user1' or password != 'pass' or
                    tenant != 'tenant-ok'):
                resp.status = 401
            else:
                resp.status = 200
                body = mock_token.token

            return FakeResponse(resp), jsonutils.dumps(body)
Exemple #13
0
        def fake_do_request(cls, url, method, headers=None, body=None):
            if (not url.rstrip('/').endswith('v2.0/tokens')
                    or url.count("2.0") != 1):
                self.fail("Invalid v2.0 token path (%s)" % url)

            creds = jsonutils.loads(body)['auth']
            username = creds['passwordCredentials']['username']
            password = creds['passwordCredentials']['password']
            tenant = creds['tenantName']
            resp = webob.Response()

            if (username != 'user1' or password != 'pass'
                    or tenant != 'tenant-ok'):
                resp.status = 401
            else:
                resp.status = 200
                body = mock_token.token

            return FakeResponse(resp), jsonutils.dumps(body)
 def test_get_version_list(self):
     req = webob.Request.blank('/', base_url='http://127.0.0.1:9292/')
     req.accept = 'application/json'
     self.config(bind_host='127.0.0.1', bind_port=9292)
     res = versions.Controller().index(req)
     self.assertEqual(res.status_int, 300)
     self.assertEqual(res.content_type, 'application/json')
     results = jsonutils.loads(res.body)['versions']
     expected = [
         {
             'id': 'v2.2',
             'status': 'CURRENT',
             'links': [{'rel': 'self',
                        'href': 'http://127.0.0.1:9292/v2/'}],
         },
         {
             'id': 'v2.1',
             'status': 'SUPPORTED',
             'links': [{'rel': 'self',
                        'href': 'http://127.0.0.1:9292/v2/'}],
         },
         {
             'id': 'v2.0',
             'status': 'SUPPORTED',
             'links': [{'rel': 'self',
                        'href': 'http://127.0.0.1:9292/v2/'}],
         },
         {
             'id': 'v1.1',
             'status': 'CURRENT',
             'links': [{'rel': 'self',
                        'href': 'http://127.0.0.1:9292/v1/'}],
         },
         {
             'id': 'v1.0',
             'status': 'SUPPORTED',
             'links': [{'rel': 'self',
                        'href': 'http://127.0.0.1:9292/v1/'}],
         },
     ]
     self.assertEqual(results, expected)
Exemple #15
0
    def _v2_auth(self, token_url):

        creds = self.creds

        creds = {
            "auth": {
                "tenantName": creds['tenant'],
                "passwordCredentials": {
                    "username": creds['username'],
                    "password": creds['password']
                }
            }
        }

        headers = {}
        headers['Content-Type'] = 'application/json'
        req_body = jsonutils.dumps(creds)

        resp, resp_body = self._do_request(
            token_url, 'POST', headers=headers, body=req_body)

        if resp.status == 200:
            resp_auth = jsonutils.loads(resp_body)['access']
            creds_region = self.creds.get('region')
            if self.configure_via_auth:
                endpoint = get_endpoint(resp_auth['serviceCatalog'],
                                        endpoint_region=creds_region)
                self.management_url = endpoint
            self.auth_token = resp_auth['token']['id']
        elif resp.status == 305:
            raise exception.RedirectException(resp['location'])
        elif resp.status == 400:
            raise exception.AuthBadRequest(url=token_url)
        elif resp.status == 401:
            raise exception.NotAuthenticated()
        elif resp.status == 404:
            raise exception.AuthUrlNotFound(url=token_url)
        else:
            raise Exception(_('Unexpected response: %s') % resp.status)
Exemple #16
0
 def process_result_value(self, value, dialect):
     if value is not None:
         value = jsonutils.loads(value)
     return value
Exemple #17
0
 def process_result_value(self, value, dialect):
     if value is not None:
         value = jsonutils.loads(value)
     return value
Exemple #18
0
 def assertEqualdemos(self, res, uuids, key='demos', unjsonify=True):
     demos = jsonutils.loads(res.body)[key] if unjsonify else res
     self.assertEqual(len(demos), len(uuids))
     for i, value in enumerate(uuids):
         self.assertEqual(demos[i]['id'], value)
Exemple #19
0
 def assertEqualdemos(self, res, uuids, key='demos', unjsonify=True):
     demos = jsonutils.loads(res.body)[key] if unjsonify else res
     self.assertEqual(len(demos), len(uuids))
     for i, value in enumerate(uuids):
         self.assertEqual(demos[i]['id'], value)