)]}'
{"swift/common/middleware/s3api/s3token.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"723c321dce775cc45a6ce6a42d649ef5115b4afc","unresolved":false,"context_lines":[{"line_number":199,"context_line":"            req.headers.update({h: None for h in KEYSTONE_AUTH_HEADERS})"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        try:"},{"line_number":202,"context_line":"            parts \u003d split_path(urllib.parse.unquote(req.path), 1, 4, True)"},{"line_number":203,"context_line":"            version, account, container, obj \u003d parts"},{"line_number":204,"context_line":"        except ValueError:"},{"line_number":205,"context_line":"            msg \u003d \u0027Not a path query: %s, skipping.\u0027 % req.path"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_157320b6","line":202,"range":{"start_line":202,"start_character":44,"end_line":202,"end_character":51},"updated":"2018-09-27 20:01:58.000000000","message":"Right, because the path property does some quoting just before returning.\n\nI wonder if we should just look directly at PATH_INFO ourselves, and avoid the quoting-just-to-unquote. Eh, I\u0027m sure we\u0027ve got worse...","commit_id":"69969f5e08e647d1cce03ad49ba4553d50773f0c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"723c321dce775cc45a6ce6a42d649ef5115b4afc","unresolved":false,"context_lines":[{"line_number":238,"context_line":"        # reseller account can connect to every account it is allowed"},{"line_number":239,"context_line":"        # by the swift_auth middleware."},{"line_number":240,"context_line":"        force_tenant \u003d None"},{"line_number":241,"context_line":"        if \u0027:\u0027 in access:"},{"line_number":242,"context_line":"            access, force_tenant \u003d access.split(\u0027:\u0027)"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        # Authenticate request."},{"line_number":245,"context_line":"        creds \u003d {\u0027credentials\u0027: {\u0027access\u0027: access,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_7565b4ae","line":242,"range":{"start_line":241,"start_character":8,"end_line":242,"end_character":52},"updated":"2018-09-27 20:01:58.000000000","message":"Might be good to have a unit test to exercise this case, too, but not super-important.","commit_id":"69969f5e08e647d1cce03ad49ba4553d50773f0c"}],"test/unit/common/middleware/s3api/test_s3token.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"723c321dce775cc45a6ce6a42d649ef5115b4afc","unresolved":false,"context_lines":[{"line_number":496,"context_line":"    def test_authorize_with_access_key_and_unquote_chars(self):"},{"line_number":497,"context_line":"        req \u003d Request.blank(\u0027/v1/access%key\u003d/c/o\u0027)"},{"line_number":498,"context_line":"        req.environ[\u0027s3api.auth_details\u0027] \u003d {"},{"line_number":499,"context_line":"            \u0027access_key\u0027: u\u0027access\u0027,"},{"line_number":500,"context_line":"            \u0027signature\u0027: u\u0027signature\u0027,"},{"line_number":501,"context_line":"            \u0027string_to_sign\u0027: u\u0027token\u0027,"},{"line_number":502,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f540e408","line":499,"range":{"start_line":499,"start_character":28,"end_line":499,"end_character":34},"updated":"2018-09-27 20:01:58.000000000","message":"I kinda expected this to be \u0027access%key\u003d\u0027, but it doesn\u0027t actually matter.","commit_id":"69969f5e08e647d1cce03ad49ba4553d50773f0c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"140af9dfcf1d670a0300d2c98765cc85425ac4c4","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            \u0027string_to_sign\u0027: u\u0027token\u0027,"},{"line_number":502,"context_line":"        }"},{"line_number":503,"context_line":"        req.get_response(self.middleware)"},{"line_number":504,"context_line":"        self._assert_authorized(req, account_path\u003d\u0027/v1/\u0027)"},{"line_number":505,"context_line":"        self.assertEqual(req.environ[\u0027PATH_INFO\u0027], \u0027/v1/AUTH_TENANT_ID/c/o\u0027)"},{"line_number":506,"context_line":""},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_f5e6a4e7","line":504,"updated":"2018-09-27 20:06:46.000000000","message":"Oh, I get it -- because down in _assert_authorized, we check that we sent \u0027access\u0027 to Keystone...","commit_id":"69969f5e08e647d1cce03ad49ba4553d50773f0c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"723c321dce775cc45a6ce6a42d649ef5115b4afc","unresolved":false,"context_lines":[{"line_number":854,"context_line":"        self.assertEqual(req.environ[\u0027PATH_INFO\u0027], \u0027/v1/AUTH_PROJECT_ID/c/o\u0027)"},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"    def test_authorize_with_access_key_and_unquote_chars(self):"},{"line_number":857,"context_line":"        req \u003d Request.blank(\u0027/v1/access%key\u003d/c/o\u0027)"},{"line_number":858,"context_line":"        req \u003d Request.blank(\u0027/v1/ab%c\u003d/c/o\u0027)"},{"line_number":859,"context_line":"        req.environ[\u0027s3api.auth_details\u0027] \u003d {"},{"line_number":860,"context_line":"            \u0027access_key\u0027: u\u0027access\u0027,"},{"line_number":861,"context_line":"            \u0027signature\u0027: u\u0027signature\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f79a3b5_9547301f","line":858,"range":{"start_line":857,"start_character":8,"end_line":858,"end_character":44},"updated":"2018-09-27 20:01:58.000000000","message":"Doubled up?","commit_id":"69969f5e08e647d1cce03ad49ba4553d50773f0c"}]}
