)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"760203ab834c96af17a4e9656f8bf4063ed970bc","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement Fernet tokens for v2.0 tokens"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: This takes the existing Fernet token work and extends it for v2.0 tokens."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"TODOs: Refactor providers common.py"},{"line_number":12,"context_line":"       Remove unsued code"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9a80dd14_ca32760f","line":9,"updated":"2015-03-13 00:44:47.000000000","message":"Is this still a WIP?","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"e36b76ed8935b7e189dfcfd5f9e201f1697146f9","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implement Fernet tokens for v2.0 tokens"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: This takes the existing Fernet token work and extends it for v2.0 tokens."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"TODOs: Refactor providers common.py"},{"line_number":12,"context_line":"       Remove unsued code"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9a80dd14_49293336","line":9,"in_reply_to":"9a80dd14_ca32760f","updated":"2015-03-13 01:15:43.000000000","message":"Yes, I still need to add some negative test cases.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"760203ab834c96af17a4e9656f8bf4063ed970bc","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: This takes the existing Fernet token work and extends it for v2.0 tokens."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"TODOs: Refactor providers common.py"},{"line_number":12,"context_line":"       Remove unsued code"},{"line_number":13,"context_line":"       Add unit/functional test"},{"line_number":14,"context_line":"       Finished all todos"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9a80dd14_2a3eb2da","line":11,"updated":"2015-03-13 00:44:47.000000000","message":"Do these need to be done before this patch is complete?","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"e36b76ed8935b7e189dfcfd5f9e201f1697146f9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"WIP: This takes the existing Fernet token work and extends it for v2.0 tokens."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"TODOs: Refactor providers common.py"},{"line_number":12,"context_line":"       Remove unsued code"},{"line_number":13,"context_line":"       Add unit/functional test"},{"line_number":14,"context_line":"       Finished all todos"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":29,"id":"9a80dd14_29db1f50","line":11,"in_reply_to":"9a80dd14_2a3eb2da","updated":"2015-03-13 01:15:43.000000000","message":"Yes, except maybe fixing the unicode token, which is an existing issue.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"}],"keystone/common/controller.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"563056c6b9481187ee8f781b1f0f470a3c8879c5","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def filter_domain(ref):"},{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_1f8e097a","line":229,"updated":"2015-03-16 23:20:54.000000000","message":"This needs to reference CONF.identity.default_domain_id","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"702b08f7ae8264e47d884559f454031d04530dab","unresolved":false,"context_lines":[{"line_number":226,"context_line":"    def filter_domain(ref):"},{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_7f61c5a7","line":229,"in_reply_to":"9a80dd14_1f8e097a","updated":"2015-03-16 23:22:39.000000000","message":"Done","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"481a1a32115a6932f05b3413a02e58b83a83ade2","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_79d64529","line":230,"updated":"2015-03-16 22:34:23.000000000","message":"I\u0027d love to see a test that exercises this.","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"702b08f7ae8264e47d884559f454031d04530dab","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_9f5679cd","line":230,"in_reply_to":"9a80dd14_79d64529","updated":"2015-03-16 23:22:39.000000000","message":"Done","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        return ref"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @staticmethod"},{"line_number":226,"context_line":"    def filter_domain(ref):"},{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d CONF.identity.default_domain_id:"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_c8a03994","line":226,"updated":"2015-03-17 02:04:24.000000000","message":"this needs to be done now that we have fernet tokens?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        return ref"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"    @staticmethod"},{"line_number":226,"context_line":"    def filter_domain(ref):"},{"line_number":227,"context_line":"        \"\"\"Remove domain since v2 calls are not domain-aware.\"\"\""},{"line_number":228,"context_line":"        if \u0027domain\u0027 in ref:"},{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d CONF.identity.default_domain_id:"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_49ec2f90","line":226,"in_reply_to":"9a80dd14_c8a03994","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d CONF.identity.default_domain_id:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"},{"line_number":234,"context_line":"        return ref"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_a8ea25aa","line":232,"updated":"2015-03-17 02:04:24.000000000","message":"suggest remove else here, easier to see what\u0027s going on.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            if ref[\u0027domain\u0027].get(\u0027id\u0027) !\u003d CONF.identity.default_domain_id:"},{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"},{"line_number":234,"context_line":"        return ref"},{"line_number":235,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_5ea13e94","line":232,"in_reply_to":"9a80dd14_a8ea25aa","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"},{"line_number":234,"context_line":"        return ref"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_68b90dcb","line":233,"updated":"2015-03-17 02:04:24.000000000","message":"suggest use\n\n del ref[\u0027domain\u0027]\n\nwe already know that domain is in ref.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"                raise exception.Unauthorized("},{"line_number":231,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"},{"line_number":232,"context_line":"            else:"},{"line_number":233,"context_line":"                ref.pop(\u0027domain\u0027, None)"},{"line_number":234,"context_line":"        return ref"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_49ba6f6f","line":233,"in_reply_to":"9a80dd14_68b90dcb","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/tests/unit/fernet/utils.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystone.token.providers.fernet import utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class KeyRepositoryTestMixin(object):"},{"line_number":20,"context_line":"    def setUpKeyRepository(self):"},{"line_number":21,"context_line":"        directory \u003d tempfile.mkdtemp()"},{"line_number":22,"context_line":"        self.addCleanup(shutil.rmtree, directory)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_c8f59985","line":19,"updated":"2015-03-17 02:04:24.000000000","message":"rather than continue with this antipattern, use https://review.openstack.org/#/c/164817/","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystone.token.providers.fernet import utils"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class KeyRepositoryTestMixin(object):"},{"line_number":20,"context_line":"    def setUpKeyRepository(self):"},{"line_number":21,"context_line":"        directory \u003d tempfile.mkdtemp()"},{"line_number":22,"context_line":"        self.addCleanup(shutil.rmtree, directory)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_49f7cff5","line":19,"in_reply_to":"9a80dd14_c8f59985","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/tests/unit/rest.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c904df8f4858e016f5df6777cd2c1d7ef149ccab","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def _get_token_id(self, r):"},{"line_number":247,"context_line":"        \"\"\"Helper method to return a token ID from a response.\"\"\""},{"line_number":248,"context_line":"        response_body \u003d jsonutils.loads(r.body)"},{"line_number":249,"context_line":"        return response_body[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_3ad4f6bb","line":249,"updated":"2015-03-09 20:25:56.000000000","message":"this looks like a solid refactor that should be split out into a prereq commit","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3eb59952484c916a607df3cc0892bf1d498a8d35","unresolved":false,"context_lines":[{"line_number":246,"context_line":"    def _get_token_id(self, r):"},{"line_number":247,"context_line":"        \"\"\"Helper method to return a token ID from a response.\"\"\""},{"line_number":248,"context_line":"        response_body \u003d jsonutils.loads(r.body)"},{"line_number":249,"context_line":"        return response_body[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_702e828d","line":249,"in_reply_to":"9a80dd14_3ad4f6bb","updated":"2015-03-10 15:38:26.000000000","message":"Removed change. Not needed for patch.","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"}],"keystone/tests/unit/test_v2.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from keystone.common import extension as keystone_extension"},{"line_number":25,"context_line":"from keystone.tests.unit import rest"},{"line_number":26,"context_line":"from keystone.tests.unit.token import test_fernet_provider as fernet"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_d49deb58","line":26,"updated":"2015-03-12 06:25:52.000000000","message":"that\u0027s a very strange dependency path; consider moving what you need (i assume just the Mixin) into a more general place","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from keystone.common import extension as keystone_extension"},{"line_number":25,"context_line":"from keystone.tests.unit import rest"},{"line_number":26,"context_line":"from keystone.tests.unit.token import test_fernet_provider as fernet"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_5d69fb8a","line":26,"in_reply_to":"9a80dd14_d49deb58","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"        self.setUpKeyRepository()"},{"line_number":1400,"context_line":""},{"line_number":1401,"context_line":"    def _get_token_id(self, r):"},{"line_number":1402,"context_line":"        return r.result[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def config_overrides(self):"},{"line_number":1405,"context_line":"        super(TestFernetTokenProviderV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_4daae085","line":1402,"updated":"2015-03-14 15:17:57.000000000","message":"It doesn\u0027t look like this method is being called anywhere.","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":1399,"context_line":"        self.setUpKeyRepository()"},{"line_number":1400,"context_line":""},{"line_number":1401,"context_line":"    def _get_token_id(self, r):"},{"line_number":1402,"context_line":"        return r.result[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":1403,"context_line":""},{"line_number":1404,"context_line":"    def config_overrides(self):"},{"line_number":1405,"context_line":"        super(TestFernetTokenProviderV2, self).config_overrides()"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_eec1c0e4","line":1402,"in_reply_to":"9a80dd14_4daae085","updated":"2015-03-16 02:42:55.000000000","message":"This is used by RestfulTestCase.","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"            expected_status\u003d401)"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"    def test_validate_v2_scoped_token(self):"},{"line_number":1474,"context_line":"        project1_id \u003d uuid.uuid4().hex"},{"line_number":1475,"context_line":"        project1_ref \u003d {\u0027id\u0027: project1_id,"},{"line_number":1476,"context_line":"                        \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1477,"context_line":"                        \u0027description\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_ed98f476","line":1474,"updated":"2015-03-14 15:17:57.000000000","message":"nit: could just do this in the project reference: \n\n    project_ref1 \u003d {\u0027id\u0027: uuid.uuid4().hex,","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":1471,"context_line":"            expected_status\u003d401)"},{"line_number":1472,"context_line":""},{"line_number":1473,"context_line":"    def test_validate_v2_scoped_token(self):"},{"line_number":1474,"context_line":"        project1_id \u003d uuid.uuid4().hex"},{"line_number":1475,"context_line":"        project1_ref \u003d {\u0027id\u0027: project1_id,"},{"line_number":1476,"context_line":"                        \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1477,"context_line":"                        \u0027description\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_ce4cfca0","line":1474,"in_reply_to":"9a80dd14_ed98f476","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"                        \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":1478,"context_line":"                        \u0027domain_id\u0027: \u0027default\u0027,"},{"line_number":1479,"context_line":"                        \u0027enabled\u0027: True}"},{"line_number":1480,"context_line":"        self.resource_api.create_project(project1_id, project1_ref)"},{"line_number":1481,"context_line":"        self.assignment_api.add_role_to_user_and_project(self.user_foo[\u0027id\u0027],"},{"line_number":1482,"context_line":"                                                         project1_id,"},{"line_number":1483,"context_line":"                                                         self.role_admin[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_ed6f145e","line":1480,"updated":"2015-03-14 15:17:57.000000000","message":"then do: \n\n    self.resource_api.create_project(project1_ref[\u0027id\u0027], project1_ref)","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":1477,"context_line":"                        \u0027description\u0027: uuid.uuid4().hex,"},{"line_number":1478,"context_line":"                        \u0027domain_id\u0027: \u0027default\u0027,"},{"line_number":1479,"context_line":"                        \u0027enabled\u0027: True}"},{"line_number":1480,"context_line":"        self.resource_api.create_project(project1_id, project1_ref)"},{"line_number":1481,"context_line":"        self.assignment_api.add_role_to_user_and_project(self.user_foo[\u0027id\u0027],"},{"line_number":1482,"context_line":"                                                         project1_id,"},{"line_number":1483,"context_line":"                                                         self.role_admin[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_ee4f0090","line":1480,"in_reply_to":"9a80dd14_ed6f145e","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"                        \u0027enabled\u0027: True}"},{"line_number":1480,"context_line":"        self.resource_api.create_project(project1_id, project1_ref)"},{"line_number":1481,"context_line":"        self.assignment_api.add_role_to_user_and_project(self.user_foo[\u0027id\u0027],"},{"line_number":1482,"context_line":"                                                         project1_id,"},{"line_number":1483,"context_line":"                                                         self.role_admin[\u0027id\u0027])"},{"line_number":1484,"context_line":"        project2_id \u003d uuid.uuid4().hex"},{"line_number":1485,"context_line":"        project2_ref \u003d {\u0027id\u0027: project2_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_0d92a84b","line":1482,"updated":"2015-03-14 15:17:57.000000000","message":"and pass \n\n    project1_ref[\u0027id\u0027] \n\nhere too","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":1479,"context_line":"                        \u0027enabled\u0027: True}"},{"line_number":1480,"context_line":"        self.resource_api.create_project(project1_id, project1_ref)"},{"line_number":1481,"context_line":"        self.assignment_api.add_role_to_user_and_project(self.user_foo[\u0027id\u0027],"},{"line_number":1482,"context_line":"                                                         project1_id,"},{"line_number":1483,"context_line":"                                                         self.role_admin[\u0027id\u0027])"},{"line_number":1484,"context_line":"        project2_id \u003d uuid.uuid4().hex"},{"line_number":1485,"context_line":"        project2_ref \u003d {\u0027id\u0027: project2_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_0e43746c","line":1482,"in_reply_to":"9a80dd14_0d92a84b","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"481a1a32115a6932f05b3413a02e58b83a83ade2","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003dproject_ref[\u0027id\u0027])"},{"line_number":1444,"context_line":"        self.assertLess(len(token), 255)"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_authenticate_for_v2_no_project_access_return_401(self):"},{"line_number":1447,"context_line":"        project_ref \u003d self.new_project_ref()"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_798ba51e","line":1446,"updated":"2015-03-16 22:34:23.000000000","message":"Is isn\u0027t specific to your changes right? This is just testing for a 401 when there is no assignment?","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"    def _get_token_id(self, r):"},{"line_number":1403,"context_line":"        return r.result[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    def new_project_ref(self):"},{"line_number":1406,"context_line":"        return {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1407,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1408,"context_line":"                \u0027description\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_68158d9a","line":1405,"updated":"2015-03-17 02:04:24.000000000","message":"how many of copies of this do we need?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1402,"context_line":"    def _get_token_id(self, r):"},{"line_number":1403,"context_line":"        return r.result[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":1404,"context_line":""},{"line_number":1405,"context_line":"    def new_project_ref(self):"},{"line_number":1406,"context_line":"        return {\u0027id\u0027: uuid.uuid4().hex,"},{"line_number":1407,"context_line":"                \u0027name\u0027: uuid.uuid4().hex,"},{"line_number":1408,"context_line":"                \u0027description\u0027: uuid.uuid4().hex,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_6973a1b4","line":1405,"in_reply_to":"9a80dd14_68158d9a","updated":"2015-03-17 20:24:09.000000000","message":"This is used in several test cases. Is there an issue with creating new projects?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            group\u003d\u0027token\u0027,"},{"line_number":1416,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"    def test_authenticate_for_v2_unscoped_token(self):"},{"line_number":1419,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"},{"line_number":1420,"context_line":"        self.assertLess(len(unscoped_token), 255)"},{"line_number":1421,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_4861a910","line":1418,"updated":"2015-03-17 02:04:24.000000000","message":"remove v2 from all these, that\u0027s already in the test case.\n\nAlso, don\u0027t we have a bunch of existing v2 token tests that can be re-used?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            group\u003d\u0027token\u0027,"},{"line_number":1416,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"    def test_authenticate_for_v2_unscoped_token(self):"},{"line_number":1419,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"},{"line_number":1420,"context_line":"        self.assertLess(len(unscoped_token), 255)"},{"line_number":1421,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_3e0d6a38","line":1418,"in_reply_to":"9a80dd14_4861a910","updated":"2015-03-17 20:24:09.000000000","message":"Done, I tried using existing test, but failed since Fernet tokens require uuid of ids and other test use \u0027bar\u0027 which would fail here: https://github.com/openstack/keystone/blob/aff22c95e975eb3e4bc753e7bd1e367239e0ab99/keystone/token/providers/fernet/token_formatters.py#L226.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"    def test_authenticate_for_v2_unscoped_token(self):"},{"line_number":1419,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"},{"line_number":1420,"context_line":"        self.assertLess(len(unscoped_token), 255)"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    def test_validate_v2_unscoped_token(self):"},{"line_number":1423,"context_line":"        # Grab an admin token to validate with"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_687cadec","line":1420,"updated":"2015-03-17 02:04:24.000000000","message":"what\u0027s important about 255? add a comment.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1417,"context_line":""},{"line_number":1418,"context_line":"    def test_authenticate_for_v2_unscoped_token(self):"},{"line_number":1419,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"},{"line_number":1420,"context_line":"        self.assertLess(len(unscoped_token), 255)"},{"line_number":1421,"context_line":""},{"line_number":1422,"context_line":"    def test_validate_v2_unscoped_token(self):"},{"line_number":1423,"context_line":"        # Grab an admin token to validate with"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_2fdc5b46","line":1420,"in_reply_to":"9a80dd14_687cadec","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1441,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":1442,"context_line":"            self.user_foo[\u0027id\u0027], project_ref[\u0027id\u0027], self.role_service[\u0027id\u0027])"},{"line_number":1443,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003dproject_ref[\u0027id\u0027])"},{"line_number":1444,"context_line":"        self.assertLess(len(token), 255)"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_authenticate_for_v2_no_project_access_return_401(self):"},{"line_number":1447,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_28f7155b","line":1444,"updated":"2015-03-17 02:04:24.000000000","message":"what\u0027s important about 255?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1441,"context_line":"        self.assignment_api.add_role_to_user_and_project("},{"line_number":1442,"context_line":"            self.user_foo[\u0027id\u0027], project_ref[\u0027id\u0027], self.role_service[\u0027id\u0027])"},{"line_number":1443,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003dproject_ref[\u0027id\u0027])"},{"line_number":1444,"context_line":"        self.assertLess(len(token), 255)"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_authenticate_for_v2_no_project_access_return_401(self):"},{"line_number":1447,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_cf157fe6","line":1444,"in_reply_to":"9a80dd14_28f7155b","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003dproject_ref[\u0027id\u0027])"},{"line_number":1444,"context_line":"        self.assertLess(len(token), 255)"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_authenticate_for_v2_no_project_access_return_401(self):"},{"line_number":1447,"context_line":"        project_ref \u003d self.new_project_ref()"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_c874b9d2","line":1446,"updated":"2015-03-17 02:04:24.000000000","message":"why is this special for fernet tokens?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        token \u003d self.get_scoped_token(tenant_id\u003dproject_ref[\u0027id\u0027])"},{"line_number":1444,"context_line":"        self.assertLess(len(token), 255)"},{"line_number":1445,"context_line":""},{"line_number":1446,"context_line":"    def test_authenticate_for_v2_no_project_access_return_401(self):"},{"line_number":1447,"context_line":"        project_ref \u003d self.new_project_ref()"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_ef35e3a8","line":1446,"in_reply_to":"9a80dd14_c874b9d2","updated":"2015-03-17 20:24:09.000000000","message":"Removed.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":1481,"context_line":"            path\u003dpath,"},{"line_number":1482,"context_line":"            token\u003dadmin_token,"},{"line_number":1483,"context_line":"            expected_status\u003d200)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"    def test_v2_token_authentication(self):"},{"line_number":1486,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_8810015b","line":1483,"updated":"2015-03-17 02:04:24.000000000","message":"this test should also validate that the token it gets back has access to the project.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1480,"context_line":"            method\u003d\u0027GET\u0027,"},{"line_number":1481,"context_line":"            path\u003dpath,"},{"line_number":1482,"context_line":"            token\u003dadmin_token,"},{"line_number":1483,"context_line":"            expected_status\u003d200)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"    def test_v2_token_authentication(self):"},{"line_number":1486,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_9ee3b6a3","line":1483,"in_reply_to":"9a80dd14_8810015b","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1482,"context_line":"            token\u003dadmin_token,"},{"line_number":1483,"context_line":"            expected_status\u003d200)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"    def test_v2_token_authentication(self):"},{"line_number":1486,"context_line":"        project_ref \u003d self.new_project_ref()"},{"line_number":1487,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":1488,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_684d8d99","line":1485,"updated":"2015-03-17 02:04:24.000000000","message":"add a comment what this is testing.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1482,"context_line":"            token\u003dadmin_token,"},{"line_number":1483,"context_line":"            expected_status\u003d200)"},{"line_number":1484,"context_line":""},{"line_number":1485,"context_line":"    def test_v2_token_authentication(self):"},{"line_number":1486,"context_line":"        project_ref \u003d self.new_project_ref()"},{"line_number":1487,"context_line":"        self.resource_api.create_project(project_ref[\u0027id\u0027], project_ref)"},{"line_number":1488,"context_line":"        unscoped_token \u003d self.get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_bebf9aa9","line":1485,"in_reply_to":"9a80dd14_684d8d99","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"                    }"},{"line_number":1501,"context_line":"                }"},{"line_number":1502,"context_line":"            },"},{"line_number":1503,"context_line":"            expected_status\u003d200)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_0856d12a","line":1503,"updated":"2015-03-17 02:04:24.000000000","message":"this test should also validate that the token it gets back has access to the project.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":1500,"context_line":"                    }"},{"line_number":1501,"context_line":"                }"},{"line_number":1502,"context_line":"            },"},{"line_number":1503,"context_line":"            expected_status\u003d200)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_0103eb0d","line":1503,"in_reply_to":"9a80dd14_0856d12a","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad524a012405a8943c3af824aa0343487fa10ae4","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"            expected_status\u003d200)"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def test_token_authentication_and_validation(self):"},{"line_number":1469,"context_line":"        \"\"\"Test token authentication for Fernet token proivder."},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        Verify that token authentication returns validate response code and"},{"line_number":1472,"context_line":"        validate token belongs to project."}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_09678552","line":1469,"updated":"2015-03-18 02:15:28.000000000","message":"change \"proivder\" to \"provider\"","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"11086781c4934f714fda35d3e4effede8cdfeab4","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"            expected_status\u003d200)"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"    def test_token_authentication_and_validation(self):"},{"line_number":1469,"context_line":"        \"\"\"Test token authentication for Fernet token proivder."},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        Verify that token authentication returns validate response code and"},{"line_number":1472,"context_line":"        validate token belongs to project."}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_2a5d0ded","line":1469,"in_reply_to":"9a80dd14_09678552","updated":"2015-03-18 02:58:10.000000000","message":"Done","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad524a012405a8943c3af824aa0343487fa10ae4","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"    def test_token_authentication_and_validation(self):"},{"line_number":1469,"context_line":"        \"\"\"Test token authentication for Fernet token proivder."},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        Verify that token authentication returns validate response code and"},{"line_number":1472,"context_line":"        validate token belongs to project."},{"line_number":1473,"context_line":"        \"\"\""},{"line_number":1474,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_29760907","line":1471,"updated":"2015-03-18 02:15:28.000000000","message":"change \"validate\" to \"valid\"","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"11086781c4934f714fda35d3e4effede8cdfeab4","unresolved":false,"context_lines":[{"line_number":1468,"context_line":"    def test_token_authentication_and_validation(self):"},{"line_number":1469,"context_line":"        \"\"\"Test token authentication for Fernet token proivder."},{"line_number":1470,"context_line":""},{"line_number":1471,"context_line":"        Verify that token authentication returns validate response code and"},{"line_number":1472,"context_line":"        validate token belongs to project."},{"line_number":1473,"context_line":"        \"\"\""},{"line_number":1474,"context_line":"        project_ref \u003d self.new_project_ref()"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_4a6081a4","line":1471,"in_reply_to":"9a80dd14_29760907","updated":"2015-03-18 02:58:10.000000000","message":"Done","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":4065,"context_line":"    def _get_unscoped_token(self):"},{"line_number":4066,"context_line":"        auth_data \u003d self.build_authentication_request("},{"line_number":4067,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":4068,"context_line":"            user_domain_id\u003dself.user[\u0027domain_id\u0027],"},{"line_number":4069,"context_line":"            password\u003dself.user[\u0027password\u0027])"},{"line_number":4070,"context_line":"        return self._make_auth_request(auth_data)"},{"line_number":4071,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_931e725e","line":4068,"updated":"2015-03-17 02:04:24.000000000","message":"is this fixing a bug?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":4065,"context_line":"    def _get_unscoped_token(self):"},{"line_number":4066,"context_line":"        auth_data \u003d self.build_authentication_request("},{"line_number":4067,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":4068,"context_line":"            user_domain_id\u003dself.user[\u0027domain_id\u0027],"},{"line_number":4069,"context_line":"            password\u003dself.user[\u0027password\u0027])"},{"line_number":4070,"context_line":"        return self._make_auth_request(auth_data)"},{"line_number":4071,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_61ad87ea","line":4068,"in_reply_to":"9a80dd14_931e725e","updated":"2015-03-17 20:24:09.000000000","message":"Removed. Not needed.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":4407,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4408,"context_line":"                          trust_scoped_token)"},{"line_number":4409,"context_line":""},{"line_number":4410,"context_line":"    def test_v2_validate_v3_unscoped_token_returns_401(self):"},{"line_number":4411,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"},{"line_number":4412,"context_line":"        self.assertRaises(exception.Unauthorized,"},{"line_number":4413,"context_line":"                          self.token_provider_api.validate_v2_token,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_b35a9628","line":4410,"updated":"2015-03-17 02:04:24.000000000","message":"why is this a failure? Add a comment.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":4413,"context_line":"                          self.token_provider_api.validate_v2_token,"},{"line_number":4414,"context_line":"                          unscoped_token)"},{"line_number":4415,"context_line":""},{"line_number":4416,"context_line":"    def test_v2_validate_v3_project_scoped_token_returns_401(self):"},{"line_number":4417,"context_line":"        # Grant user access to project"},{"line_number":4418,"context_line":"        self.assignment_api.create_grant(self.role[\u0027id\u0027],"},{"line_number":4419,"context_line":"                                         user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_f33b2ec6","line":4416,"updated":"2015-03-17 02:04:24.000000000","message":"same here.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c904df8f4858e016f5df6777cd2c1d7ef149ccab","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test_issue_v2_token_raises_not_implemented(self):"},{"line_number":51,"context_line":"        \"\"\"Test that exception is raised when call creating v2 token.\"\"\""},{"line_number":52,"context_line":"        # TODO(jorge_munoz) Write unit test"},{"line_number":53,"context_line":"        pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_validate_v2_token_raises_not_implemented(self):"},{"line_number":56,"context_line":"        \"\"\"Test that exception is raised when validating a v2 token.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_9a9242f4","line":53,"updated":"2015-03-09 20:25:56.000000000","message":"i delete a lot of these tests in https://review.openstack.org/#/c/162031/8/keystone/tests/unit/token/test_fernet_provider.py in favor of purely functional tests, which it looks like you\u0027ve already written","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3eb59952484c916a607df3cc0892bf1d498a8d35","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    def test_issue_v2_token_raises_not_implemented(self):"},{"line_number":51,"context_line":"        \"\"\"Test that exception is raised when call creating v2 token.\"\"\""},{"line_number":52,"context_line":"        # TODO(jorge_munoz) Write unit test"},{"line_number":53,"context_line":"        pass"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_validate_v2_token_raises_not_implemented(self):"},{"line_number":56,"context_line":"        \"\"\"Test that exception is raised when validating a v2 token.\"\"\""}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_8ab907ce","line":53,"in_reply_to":"9a80dd14_9a9242f4","updated":"2015-03-10 15:38:26.000000000","message":"These test still exit in change in patch 162031? Are unit test no longer require?","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.setUpKeyRepository()"},{"line_number":44,"context_line":"        self.provider \u003d fernet.Provider()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_issue_v2_token_raises_not_implemented(self):"},{"line_number":47,"context_line":"        \"\"\"Test that exception is raised when call creating v2 token.\"\"\""},{"line_number":48,"context_line":"        # TODO(jorge_munoz) Write unit test"},{"line_number":49,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_0fc3ee57","line":46,"updated":"2015-03-12 06:25:52.000000000","message":"you can just delete these two tests","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.setUpKeyRepository()"},{"line_number":44,"context_line":"        self.provider \u003d fernet.Provider()"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def test_issue_v2_token_raises_not_implemented(self):"},{"line_number":47,"context_line":"        \"\"\"Test that exception is raised when call creating v2 token.\"\"\""},{"line_number":48,"context_line":"        # TODO(jorge_munoz) Write unit test"},{"line_number":49,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_892fc287","line":46,"in_reply_to":"9a80dd14_0fc3ee57","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertRaises("},{"line_number":44,"context_line":"            exception.Unauthorized,"},{"line_number":45,"context_line":"            self.provider.validate_v3_token,"},{"line_number":46,"context_line":"            uuid.uuid4().hex)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class TestPayloads(tests.TestCase, utils.KeyRepositoryTestMixin):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_eda634aa","line":46,"updated":"2015-03-14 15:17:57.000000000","message":"We could add this same test but for validate_v2_token: \n\n    def test_invalid_v2_token_raises_401(self):\n        self.assertRaises(\n            exception.Unauthorized,\n            self.provider.validate_v2_token,\n            uuid.uuid4().hex)\n\nand then rename the above test to be v3 specific since it\u0027s calling `validate_v3_token`\n\nWe could also add tests that ensure federated tokens and trust tokens aren\u0027t validated using v2, since we  have code that details that behavior if fernet.core","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.assertRaises("},{"line_number":44,"context_line":"            exception.Unauthorized,"},{"line_number":45,"context_line":"            self.provider.validate_v3_token,"},{"line_number":46,"context_line":"            uuid.uuid4().hex)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class TestPayloads(tests.TestCase, utils.KeyRepositoryTestMixin):"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_84abc573","line":46,"in_reply_to":"9a80dd14_eda634aa","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0d30c3b5d804e5a8c325aba2353c3725cf9b29cf","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertRaises(exception.NotImplemented,"},{"line_number":40,"context_line":"                          self.provider._get_token_id, token_data)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_invalid_token(self):"},{"line_number":43,"context_line":"        self.assertRaises("},{"line_number":44,"context_line":"            exception.Unauthorized,"},{"line_number":45,"context_line":"            self.provider.validate_v3_token,"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_e1d8ca20","line":42,"updated":"2015-03-16 18:57:11.000000000","message":"nit: \n\n   def test_invalid_v3_token_raises_401(self):\n\nJust to be consistent with the new method.","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"702b08f7ae8264e47d884559f454031d04530dab","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertRaises(exception.NotImplemented,"},{"line_number":40,"context_line":"                          self.provider._get_token_id, token_data)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_invalid_token(self):"},{"line_number":43,"context_line":"        self.assertRaises("},{"line_number":44,"context_line":"            exception.Unauthorized,"},{"line_number":45,"context_line":"            self.provider.validate_v3_token,"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_ff45b515","line":42,"in_reply_to":"9a80dd14_792e45fc","updated":"2015-03-16 23:22:39.000000000","message":"Done","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"481a1a32115a6932f05b3413a02e58b83a83ade2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        self.assertRaises(exception.NotImplemented,"},{"line_number":40,"context_line":"                          self.provider._get_token_id, token_data)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def test_invalid_token(self):"},{"line_number":43,"context_line":"        self.assertRaises("},{"line_number":44,"context_line":"            exception.Unauthorized,"},{"line_number":45,"context_line":"            self.provider.validate_v3_token,"}],"source_content_type":"text/x-python","patch_set":35,"id":"9a80dd14_792e45fc","line":42,"in_reply_to":"9a80dd14_e1d8ca20","updated":"2015-03-16 22:34:23.000000000","message":"++","commit_id":"6001756520fbf78bf507fa6ebc77c488d8a94be4"}],"keystone/token/provider.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f5b2d1409bc6b5a4e86d7fbee2a2bd8b084f468","unresolved":false,"context_lines":[{"line_number":356,"context_line":"                    bind\u003dtoken_ref.get(\u0027bind\u0027),"},{"line_number":357,"context_line":"                    trust_id\u003dtoken_ref[\u0027metadata\u0027].get(\u0027trust_id\u0027),"},{"line_number":358,"context_line":"                    token_version\u003dself.V2)"},{"line_number":359,"context_line":"        if self._needs_persistence:"},{"line_number":360,"context_line":"            self._create_token(token_id, data)"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        return token_id, token_data"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_9db221e3","line":359,"updated":"2015-02-26 15:43:55.000000000","message":"(nit) This could be moved in front of the dict creation too.","commit_id":"fac46ddef92650cad01d91f4326d8dd46bd7a688"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                    trust_id\u003dtoken_ref[\u0027metadata\u0027].get(\u0027trust_id\u0027),"},{"line_number":331,"context_line":"                    token_version\u003dself.V2)"},{"line_number":332,"context_line":"        if self._needs_persistence:"},{"line_number":333,"context_line":"            self._create_token(token_id, data)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        return token_id, token_data"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_d3ac6af1","line":333,"updated":"2015-03-17 02:04:24.000000000","message":"move building data in this leg since otherwise it\u0027s not used.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":330,"context_line":"                    trust_id\u003dtoken_ref[\u0027metadata\u0027].get(\u0027trust_id\u0027),"},{"line_number":331,"context_line":"                    token_version\u003dself.V2)"},{"line_number":332,"context_line":"        if self._needs_persistence:"},{"line_number":333,"context_line":"            self._create_token(token_id, data)"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        return token_id, token_data"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_54ae7f30","line":333,"in_reply_to":"9a80dd14_d3ac6af1","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/token/providers/common.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"216ee53b6adfc3a7edaa76487aebb13f329cb803","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class V2TokenDataHelper(object):"},{"line_number":38,"context_line":"    \"\"\"Creates V2 token data.\"\"\""},{"line_number":39,"context_line":"    def __init__(self):"},{"line_number":40,"context_line":"        super(V2TokenDataHelper, self).__init__()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def v3_to_v2_token(self, token_id, v3_token_data):"},{"line_number":43,"context_line":"        token_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_b7a138fa","line":40,"updated":"2015-03-12 18:39:04.000000000","message":"Not needed","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":37,"context_line":"class V2TokenDataHelper(object):"},{"line_number":38,"context_line":"    \"\"\"Creates V2 token data.\"\"\""},{"line_number":39,"context_line":"    def __init__(self):"},{"line_number":40,"context_line":"        super(V2TokenDataHelper, self).__init__()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def v3_to_v2_token(self, token_id, v3_token_data):"},{"line_number":43,"context_line":"        token_data \u003d {}"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_bd0bd7d4","line":40,"in_reply_to":"9a80dd14_b7a138fa","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"from six.moves.urllib import parse"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.common.controller import V2Controller"},{"line_number":23,"context_line":"from keystone.common import dependency"},{"line_number":24,"context_line":"from keystone.contrib import federation"},{"line_number":25,"context_line":"from keystone import exception"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_7146e8c1","line":22,"updated":"2015-03-12 21:06:35.000000000","message":"to maintain consistency with the rest of the imports in this module, we could do: \n\n    from keystone.common import controller as common_controller\n    ...\n    token[\u0027tenant\u0027] \u003d common_controller.V2controller.filter_domain_id(tenant)","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import six"},{"line_number":20,"context_line":"from six.moves.urllib import parse"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from keystone.common.controller import V2Controller"},{"line_number":23,"context_line":"from keystone.common import dependency"},{"line_number":24,"context_line":"from keystone.contrib import federation"},{"line_number":25,"context_line":"from keystone import exception"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_79eecaee","line":22,"in_reply_to":"9a80dd14_7146e8c1","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":61,"context_line":"        user \u003d V2Controller.v3_to_v2_user(v3_user)"},{"line_number":62,"context_line":"        # Filter user domain"},{"line_number":63,"context_line":"        user.pop(\u0027domain\u0027, None)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Set user roles"},{"line_number":66,"context_line":"        user[\u0027roles\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_310d503f","line":63,"updated":"2015-03-12 21:06:35.000000000","message":"the v3_to_v3_user method calls fitler_domain_id() but is \u0027domain\u0027 still in the user_ref once we get it back from v3_to_v2_user()? If so, that sounds like a bug in that method.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":61,"context_line":"        user \u003d V2Controller.v3_to_v2_user(v3_user)"},{"line_number":62,"context_line":"        # Filter user domain"},{"line_number":63,"context_line":"        user.pop(\u0027domain\u0027, None)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Set user roles"},{"line_number":66,"context_line":"        user[\u0027roles\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_141e755f","line":63,"in_reply_to":"9a80dd14_310d503f","updated":"2015-03-12 23:02:08.000000000","message":"Removed","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Filter user domain"},{"line_number":63,"context_line":"        user.pop(\u0027domain\u0027, None)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Set user roles"},{"line_number":66,"context_line":"        user[\u0027roles\u0027] \u003d []"},{"line_number":67,"context_line":"        role_ids \u003d []"},{"line_number":68,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_2c42573e","line":65,"updated":"2015-03-12 21:06:35.000000000","message":"The following could be simplified: \n\n\n    user[\u0027roles\u0027] \u003d []\n    for role in v3_token_get(\u0027roles\u0027, []):\n        role.pop(\u0027id\u0027, None)\n        user[\u0027roles\u0027].append(role)\n\nNot sure that role_ids is used anywhere?","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Filter user domain"},{"line_number":63,"context_line":"        user.pop(\u0027domain\u0027, None)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        # Set user roles"},{"line_number":66,"context_line":"        user[\u0027roles\u0027] \u003d []"},{"line_number":67,"context_line":"        role_ids \u003d []"},{"line_number":68,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_d6d6a54e","line":65,"in_reply_to":"9a80dd14_2c42573e","updated":"2015-03-12 23:02:08.000000000","message":"Its used when building the metadata.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        role_ids \u003d []"},{"line_number":68,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"},{"line_number":69,"context_line":"            role_ids.append(role[\u0027id\u0027])"},{"line_number":70,"context_line":"            # Filter role id"},{"line_number":71,"context_line":"            role.pop(\u0027id\u0027, None)"},{"line_number":72,"context_line":"            user[\u0027roles\u0027].append(role)"},{"line_number":73,"context_line":"        user[\u0027roles_links\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_71f9884d","line":70,"updated":"2015-03-12 21:06:35.000000000","message":"we\u0027re filtering role[\u0027id\u0027] because it\u0027s not traditionally included in the v2 token responses, correct? If so, that might make a good comment.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        role_ids \u003d []"},{"line_number":68,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"},{"line_number":69,"context_line":"            role_ids.append(role[\u0027id\u0027])"},{"line_number":70,"context_line":"            # Filter role id"},{"line_number":71,"context_line":"            role.pop(\u0027id\u0027, None)"},{"line_number":72,"context_line":"            user[\u0027roles\u0027].append(role)"},{"line_number":73,"context_line":"        user[\u0027roles_links\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_f9daba49","line":70,"in_reply_to":"9a80dd14_71f9884d","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":82,"context_line":"            if catalog_ref is not None:"},{"line_number":83,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d (V2TokenDataHelper."},{"line_number":84,"context_line":"                                                format_catalog(catalog_ref))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        # Build v2 metadata"},{"line_number":87,"context_line":"        metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_4cdb0b7c","line":84,"updated":"2015-03-12 21:06:35.000000000","message":"You should just be able to call cls.format_catalog(catalog_ref) since we are in the V2TokenDataHelper anyway.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":82,"context_line":"            if catalog_ref is not None:"},{"line_number":83,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d (V2TokenDataHelper."},{"line_number":84,"context_line":"                                                format_catalog(catalog_ref))"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"        # Build v2 metadata"},{"line_number":87,"context_line":"        metadata \u003d {}"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_99145eea","line":84,"in_reply_to":"9a80dd14_4cdb0b7c","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        metadata \u003d {}"},{"line_number":88,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":89,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":90,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":91,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return {\u0027access\u0027: token_data}"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_ac3807a1","line":90,"updated":"2015-03-12 21:06:35.000000000","message":"I believe this only denotes if we are using the admin token in the request or not, right? \n\nhttps://github.com/openstack/keystone/blob/ce701f27710c1000d5d7babd3a7bd3fe7e1af083/keystone/middleware/core.py#L70","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        metadata \u003d {}"},{"line_number":88,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":89,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":90,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":91,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        return {\u0027access\u0027: token_data}"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_36970192","line":90,"in_reply_to":"9a80dd14_ac3807a1","updated":"2015-03-12 23:02:08.000000000","message":"Yes it does. Do we wish to keep it in the fernet token response? I added it to keep consistency.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"760203ab834c96af17a4e9656f8bf4063ed970bc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"},{"line_number":68,"context_line":"            role_ids.append(role[\u0027id\u0027])"},{"line_number":69,"context_line":"            # Filter role id since it\u0027s not included in v2 token response"},{"line_number":70,"context_line":"            role.pop(\u0027id\u0027, None)"},{"line_number":71,"context_line":"            user[\u0027roles\u0027].append(role)"},{"line_number":72,"context_line":"        user[\u0027roles_links\u0027] \u003d []"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_657a9d25","line":70,"updated":"2015-03-13 00:44:47.000000000","message":"I did a double take here because I thought I was missing something. The None is only needed to prevent a KeyError, but the key must exist because of the previous line. More idiomatic Python would be \"del role[\u0027id\u0027]\". Or even better you can combine both lines like: \"role_ids.append(role.pop(\u0027id\u0027))\"","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3dd0491cf065af7ecd0c6f21317581d58a5ead21","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        for role in v3_token.get(\u0027roles\u0027, []):"},{"line_number":68,"context_line":"            role_ids.append(role[\u0027id\u0027])"},{"line_number":69,"context_line":"            # Filter role id since it\u0027s not included in v2 token response"},{"line_number":70,"context_line":"            role.pop(\u0027id\u0027, None)"},{"line_number":71,"context_line":"            user[\u0027roles\u0027].append(role)"},{"line_number":72,"context_line":"        user[\u0027roles_links\u0027] \u003d []"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_94922a55","line":70,"in_reply_to":"9a80dd14_657a9d25","updated":"2015-03-14 00:04:07.000000000","message":"Done","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"760203ab834c96af17a4e9656f8bf4063ed970bc","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        token_data[\u0027serviceCatalog\u0027] \u003d []"},{"line_number":78,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":79,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":80,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":81,"context_line":"            if catalog_ref is not None:"},{"line_number":82,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_45e839e2","line":80,"updated":"2015-03-13 00:44:47.000000000","message":"If token doesn\u0027t have a tenant then the \".get(\u0027id\u0027)\" will explode with an AttributeError","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"e36b76ed8935b7e189dfcfd5f9e201f1697146f9","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        token_data[\u0027serviceCatalog\u0027] \u003d []"},{"line_number":78,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":79,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":80,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":81,"context_line":"            if catalog_ref is not None:"},{"line_number":82,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_69def76e","line":80,"in_reply_to":"9a80dd14_45e839e2","updated":"2015-03-13 01:15:43.000000000","message":"The if statement checks to see if the token has a tenant.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"aeab877684983dd34bf9710042d8d78031b2db4a","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        token_data[\u0027serviceCatalog\u0027] \u003d []"},{"line_number":78,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":79,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":80,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":81,"context_line":"            if catalog_ref is not None:"},{"line_number":82,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_6f0d173e","line":80,"in_reply_to":"9a80dd14_69def76e","updated":"2015-03-13 02:27:06.000000000","message":"Ah, I didn\u0027t notice that. So instead of using \u0027token.get\u0027 you should probably token[\u0027tenant\u0027].get(\u0027id\u0027)","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3dd0491cf065af7ecd0c6f21317581d58a5ead21","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        token_data[\u0027serviceCatalog\u0027] \u003d []"},{"line_number":78,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":79,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":80,"context_line":"                user[\u0027id\u0027], token.get(\u0027tenant\u0027).get(\u0027id\u0027))"},{"line_number":81,"context_line":"            if catalog_ref is not None:"},{"line_number":82,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":83,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_b49d6e68","line":80,"in_reply_to":"9a80dd14_6f0d173e","updated":"2015-03-14 00:04:07.000000000","message":"Done","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"760203ab834c96af17a4e9656f8bf4063ed970bc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # Build v2 metadata"},{"line_number":85,"context_line":"        metadata \u003d {}"},{"line_number":86,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":87,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":88,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":89,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_4521194c","line":87,"updated":"2015-03-13 00:44:47.000000000","message":"This seems important todo before we merge this patch.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"e36b76ed8935b7e189dfcfd5f9e201f1697146f9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # Build v2 metadata"},{"line_number":85,"context_line":"        metadata \u003d {}"},{"line_number":86,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":87,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":88,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":89,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_c9fd23b3","line":87,"in_reply_to":"9a80dd14_4521194c","updated":"2015-03-13 01:15:43.000000000","message":"I tested this against master assigning an admin role to a user (matching policy file) and I could never make is_admin be 1. It\u0027s only set when the ADMIN token from keystone.conf is used. I really don\u0027t know the purpose of having the \u0027is_admin\u0027. It should probably be remove.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3dd0491cf065af7ecd0c6f21317581d58a5ead21","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # Build v2 metadata"},{"line_number":85,"context_line":"        metadata \u003d {}"},{"line_number":86,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":87,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":88,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":89,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_d4982277","line":87,"in_reply_to":"9a80dd14_583bb7d0","updated":"2015-03-14 00:04:07.000000000","message":"Done","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"d4f2213b1551c7e2bc6bba58523e44aab3a03583","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # Build v2 metadata"},{"line_number":85,"context_line":"        metadata \u003d {}"},{"line_number":86,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":87,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":88,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":89,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_fd2c5d9b","line":87,"in_reply_to":"9a80dd14_c9fd23b3","updated":"2015-03-13 02:52:29.000000000","message":"Legacy cruft. Welcome to v2.0 tokens.","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"89538c330869eca6f67a9b9aa56f79362c37357b","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        # Build v2 metadata"},{"line_number":85,"context_line":"        metadata \u003d {}"},{"line_number":86,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":87,"context_line":"        # TODO(jorge_munoz) Determine if user is an admin"},{"line_number":88,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":89,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_583bb7d0","line":87,"in_reply_to":"9a80dd14_fd2c5d9b","updated":"2015-03-13 03:20:20.000000000","message":"I thought that this bit was only flipped by this comparison: \n\nhttps://github.com/openstack/keystone/blob/ce701f27710c1000d5d7babd3a7bd3fe7e1af083/keystone/middleware/core.py#L70","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":62,"context_line":"        user \u003d common_controller.V2Controller.v3_to_v2_user(v3_user)"},{"line_number":63,"context_line":"        # Verify v2 user"},{"line_number":64,"context_line":"        if \u0027domain\u0027 in v3_user:"},{"line_number":65,"context_line":"            if v3_user[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":66,"context_line":"                raise exception.Unauthorized("},{"line_number":67,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_8dccd86b","line":64,"updated":"2015-03-14 15:17:57.000000000","message":"Isn\u0027t this somewhat handled here?\n\nhttps://github.com/openstack/keystone/blob/master/keystone/common/controller.py#L276-L281","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":62,"context_line":"        user \u003d common_controller.V2Controller.v3_to_v2_user(v3_user)"},{"line_number":63,"context_line":"        # Verify v2 user"},{"line_number":64,"context_line":"        if \u0027domain\u0027 in v3_user:"},{"line_number":65,"context_line":"            if v3_user[\u0027domain\u0027].get(\u0027id\u0027) !\u003d \u0027default\u0027:"},{"line_number":66,"context_line":"                raise exception.Unauthorized("},{"line_number":67,"context_line":"                    _(\u0027Non-default domain is not supported\u0027))"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2e3d98dd","line":64,"in_reply_to":"9a80dd14_8dccd86b","updated":"2015-03-16 02:42:55.000000000","message":"No, v3_to_v2_user only filters the domain_id, and not a domain object. I\u0027ll modified the v3_to_v2_user method to filter the domain.","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":83,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":84,"context_line":"                user[\u0027id\u0027], token[\u0027tenant\u0027].get(\u0027id\u0027))"},{"line_number":85,"context_line":"            if catalog_ref is not None:"},{"line_number":86,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Build v2 metadata"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_edbd54b2","line":85,"updated":"2015-03-14 15:17:57.000000000","message":"nit: could simplify this to be\n\n    if catalog_ref:","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        if \u0027tenant\u0027 in token:"},{"line_number":83,"context_line":"            catalog_ref \u003d self.catalog_api.get_catalog("},{"line_number":84,"context_line":"                user[\u0027id\u0027], token[\u0027tenant\u0027].get(\u0027id\u0027))"},{"line_number":85,"context_line":"            if catalog_ref is not None:"},{"line_number":86,"context_line":"                token_data[\u0027serviceCatalog\u0027] \u003d self.format_catalog(catalog_ref)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        # Build v2 metadata"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_2e14b84b","line":85,"in_reply_to":"9a80dd14_edbd54b2","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        metadata \u003d {}"},{"line_number":90,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":91,"context_line":"        # Setting is_admin to keep consistency in v2 response"},{"line_number":92,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":93,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        return {\u0027access\u0027: token_data}"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_4de660e9","line":92,"updated":"2015-03-14 15:17:57.000000000","message":"This should only be set if the user sends the admin_token as the X-Auth-Token, correct?","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        metadata \u003d {}"},{"line_number":90,"context_line":"        metadata[\u0027roles\u0027] \u003d role_ids"},{"line_number":91,"context_line":"        # Setting is_admin to keep consistency in v2 response"},{"line_number":92,"context_line":"        metadata[\u0027is_admin\u0027] \u003d 0"},{"line_number":93,"context_line":"        token_data[\u0027metadata\u0027] \u003d metadata"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        return {\u0027access\u0027: token_data}"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_0e11b45c","line":92,"in_reply_to":"9a80dd14_4de660e9","updated":"2015-03-16 02:42:55.000000000","message":"Right, I don\u0027t believe the admin_token can ever produce a validate or authenticate response.","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        token[\u0027issued_at\u0027] \u003d v3_token.get(\u0027issued_at\u0027)"},{"line_number":49,"context_line":"        token[\u0027audit_ids\u0027] \u003d v3_token.get(\u0027audit_ids\u0027)"},{"line_number":50,"context_line":"        if \u0027bind\u0027 in v3_token:"},{"line_number":51,"context_line":"            token[\u0027bind\u0027] \u003d v3_token.get(\u0027bind\u0027)"},{"line_number":52,"context_line":"        if \u0027project\u0027 in v3_token:"},{"line_number":53,"context_line":"            # v3 token_data does not contain all tenant attributes"},{"line_number":54,"context_line":"            tenant \u003d self.resource_api.get_project("}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_b37ff665","line":51,"updated":"2015-03-17 02:04:24.000000000","message":"coverage report shows that this isn\u0027t tested. Do we even support token binding in v2 tokens?\n\nAlso, use v3_token[\u0027bind\u0027] here, since we already know that \u0027bind\u0027 is in v3_token.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        token[\u0027issued_at\u0027] \u003d v3_token.get(\u0027issued_at\u0027)"},{"line_number":49,"context_line":"        token[\u0027audit_ids\u0027] \u003d v3_token.get(\u0027audit_ids\u0027)"},{"line_number":50,"context_line":"        if \u0027bind\u0027 in v3_token:"},{"line_number":51,"context_line":"            token[\u0027bind\u0027] \u003d v3_token.get(\u0027bind\u0027)"},{"line_number":52,"context_line":"        if \u0027project\u0027 in v3_token:"},{"line_number":53,"context_line":"            # v3 token_data does not contain all tenant attributes"},{"line_number":54,"context_line":"            tenant \u003d self.resource_api.get_project("}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_545cbf4c","line":51,"in_reply_to":"9a80dd14_b37ff665","updated":"2015-03-17 20:24:09.000000000","message":"Removed. I think you are correct, v2 does not support bind.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if \u0027project\u0027 in v3_token:"},{"line_number":53,"context_line":"            # v3 token_data does not contain all tenant attributes"},{"line_number":54,"context_line":"            tenant \u003d self.resource_api.get_project("},{"line_number":55,"context_line":"                v3_token[\u0027project\u0027].get(\u0027id\u0027))"},{"line_number":56,"context_line":"            token[\u0027tenant\u0027] \u003d common_controller.V2Controller.filter_domain_id("},{"line_number":57,"context_line":"                tenant)"},{"line_number":58,"context_line":"        token_data[\u0027token\u0027] \u003d token"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_f3beceff","line":55,"updated":"2015-03-17 02:04:24.000000000","message":"why is .get(\u0027id\u0027) used here? this means that get_project could be called with None, which doesn\u0027t seem useful.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        if \u0027project\u0027 in v3_token:"},{"line_number":53,"context_line":"            # v3 token_data does not contain all tenant attributes"},{"line_number":54,"context_line":"            tenant \u003d self.resource_api.get_project("},{"line_number":55,"context_line":"                v3_token[\u0027project\u0027].get(\u0027id\u0027))"},{"line_number":56,"context_line":"            token[\u0027tenant\u0027] \u003d common_controller.V2Controller.filter_domain_id("},{"line_number":57,"context_line":"                tenant)"},{"line_number":58,"context_line":"        token_data[\u0027token\u0027] \u003d token"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_f729358a","line":55,"in_reply_to":"9a80dd14_f3beceff","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Build v2 user"},{"line_number":61,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":62,"context_line":"        user \u003d common_controller.V2Controller.v3_to_v2_user(v3_user)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Set user roles"},{"line_number":65,"context_line":"        user[\u0027roles\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_136a8281","line":62,"updated":"2015-03-17 02:04:24.000000000","message":"v3_user could apparently be None here, since .get(\u0027user\u0027) was used... which is just going to fail, so change .get() to []","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        # Build v2 user"},{"line_number":61,"context_line":"        v3_user \u003d v3_token.get(\u0027user\u0027)"},{"line_number":62,"context_line":"        user \u003d common_controller.V2Controller.v3_to_v2_user(v3_user)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Set user roles"},{"line_number":65,"context_line":"        user[\u0027roles\u0027] \u003d []"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_773545da","line":62,"in_reply_to":"9a80dd14_136a8281","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/token/providers/fernet/core.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f0765a71e4094f73cd7b506a7a6d0156628b2968","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        trust_ref \u003d None"},{"line_number":53,"context_line":"        if CONF.trust.enabled and metadata_ref and \u0027trust_id\u0027 in metadata_ref:"},{"line_number":54,"context_line":"            trust_ref \u003d self.trust_api.get_trust(metadata_ref[\u0027trust_id\u0027])"},{"line_number":55,"context_line":"            token_format \u003d \u0027KLWT01\u0027"},{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            token_format \u003d \u0027KLWT00\u0027"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_aa02843b","line":55,"updated":"2015-03-03 15:44:10.000000000","message":"So tokens are now called Fernet and format is still identified by \u0027KLWT..\u0027?","commit_id":"2f4aae57cb96941bbd56ccea66affb6142d71bee"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"368d13a96dcb47223bba4077596261d5550968a1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        trust_ref \u003d None"},{"line_number":53,"context_line":"        if CONF.trust.enabled and metadata_ref and \u0027trust_id\u0027 in metadata_ref:"},{"line_number":54,"context_line":"            trust_ref \u003d self.trust_api.get_trust(metadata_ref[\u0027trust_id\u0027])"},{"line_number":55,"context_line":"            token_format \u003d \u0027KLWT01\u0027"},{"line_number":56,"context_line":"        else:"},{"line_number":57,"context_line":"            token_format \u003d \u0027KLWT00\u0027"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_a688fc71","line":55,"in_reply_to":"ba7be1f8_aa02843b","updated":"2015-03-03 16:11:09.000000000","message":"correct, this needs to be rebased.","commit_id":"2f4aae57cb96941bbd56ccea66affb6142d71bee"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c904df8f4858e016f5df6777cd2c1d7ef149ccab","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        token_data \u003d self.v2_token_data_helper.v3_to_v2_token(token_id,"},{"line_number":67,"context_line":"                                                              token_data_raw)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        return token_id, token_data"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def issue_v3_token(self, user_id, method_names, expires_at\u003dNone,"},{"line_number":72,"context_line":"                       project_id\u003dNone, domain_id\u003dNone, auth_context\u003dNone,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_307fb767","line":69,"updated":"2015-03-09 20:25:56.000000000","message":"most of this method is wrapped up into self.token_formatter.create_token() after rebasing onto https://review.openstack.org/#/c/162338/3/keystone/token/providers/fernet/core.py","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3eb59952484c916a607df3cc0892bf1d498a8d35","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        token_data \u003d self.v2_token_data_helper.v3_to_v2_token(token_id,"},{"line_number":67,"context_line":"                                                              token_data_raw)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        return token_id, token_data"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def issue_v3_token(self, user_id, method_names, expires_at\u003dNone,"},{"line_number":72,"context_line":"                       project_id\u003dNone, domain_id\u003dNone, auth_context\u003dNone,"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_1630c206","line":69,"in_reply_to":"9a80dd14_307fb767","updated":"2015-03-10 15:38:26.000000000","message":"Done","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"c904df8f4858e016f5df6777cd2c1d7ef149ccab","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                token_formatter.validate_token(token_str))"},{"line_number":144,"context_line":"            return token_data"},{"line_number":145,"context_line":"        # If the token_format is not recognized, raise Unauthorized."},{"line_number":146,"context_line":"        raise exception.Unauthorized(\u0027This is not a recognized KLW token.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def validate_v3_token(self, token_ref):"},{"line_number":149,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_f0efdf1b","line":146,"updated":"2015-03-09 20:25:56.000000000","message":"after rebasing onto https://review.openstack.org/#/c/162338/3/keystone/token/providers/fernet/core.py this should just come down to self.token_formatter.validate_token(token) and then check to make sure that neither a domain ID or trust ID are returned -- neither of which are supported in v2","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3eb59952484c916a607df3cc0892bf1d498a8d35","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                token_formatter.validate_token(token_str))"},{"line_number":144,"context_line":"            return token_data"},{"line_number":145,"context_line":"        # If the token_format is not recognized, raise Unauthorized."},{"line_number":146,"context_line":"        raise exception.Unauthorized(\u0027This is not a recognized KLW token.\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def validate_v3_token(self, token_ref):"},{"line_number":149,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_d62d4aaa","line":146,"in_reply_to":"9a80dd14_f0efdf1b","updated":"2015-03-10 15:38:26.000000000","message":"Done","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4c01ecb01aa70838db25c9eaf8ad03b1805d6451","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone import exception"},{"line_number":18,"context_line":"from keystone.token.providers import common"},{"line_number":19,"context_line":"from keystone.token.providers.fernet import token_formatters as tf"},{"line_number":20,"context_line":"from keystone.token import provider"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_41c0b6e0","line":20,"updated":"2015-03-10 15:51:10.000000000","message":"pep8: imports not alphabetized","commit_id":"96eb34d0bfdc248d19acda7516998010c676b52b"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"753d568c78c568fe5af8521363684ae84a612398","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystone import exception"},{"line_number":18,"context_line":"from keystone.token.providers import common"},{"line_number":19,"context_line":"from keystone.token.providers.fernet import token_formatters as tf"},{"line_number":20,"context_line":"from keystone.token import provider"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_5ce6d9e9","line":20,"in_reply_to":"9a80dd14_41c0b6e0","updated":"2015-03-10 16:01:16.000000000","message":"Done","commit_id":"96eb34d0bfdc248d19acda7516998010c676b52b"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4c01ecb01aa70838db25c9eaf8ad03b1805d6451","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                                            v3_token_data)"},{"line_number":159,"context_line":"        # If the token_str is not a v2 token, raise Unauthorized."},{"line_number":160,"context_line":"        raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def validate_v3_token(self, token):"},{"line_number":164,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_4167d625","line":161,"updated":"2015-03-10 15:51:10.000000000","message":"pep8: extra whitespace","commit_id":"96eb34d0bfdc248d19acda7516998010c676b52b"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"753d568c78c568fe5af8521363684ae84a612398","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                                            v3_token_data)"},{"line_number":159,"context_line":"        # If the token_str is not a v2 token, raise Unauthorized."},{"line_number":160,"context_line":"        raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    def validate_v3_token(self, token):"},{"line_number":164,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":19,"id":"9a80dd14_1cdc6118","line":161,"in_reply_to":"9a80dd14_4167d625","updated":"2015-03-10 16:01:16.000000000","message":"Done","commit_id":"96eb34d0bfdc248d19acda7516998010c676b52b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"340c39489599639ebe9153b2fe6dc3693cebd665","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027,)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        tenant_ref \u003d token_ref.get(\u0027tenant\u0027)"},{"line_number":51,"context_line":"        if tenant_ref is not None:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_8950a2d5","line":48,"updated":"2015-03-12 16:11:47.000000000","message":"you can probably make this a list like the following: \n\n    [\u0027password\u0027]\n\nUnless there is a way to pull this out of the token_ref?","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027,)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        tenant_ref \u003d token_ref.get(\u0027tenant\u0027)"},{"line_number":51,"context_line":"        if tenant_ref is not None:"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_9ad1b959","line":48,"in_reply_to":"9a80dd14_8950a2d5","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027,)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        tenant_ref \u003d token_ref.get(\u0027tenant\u0027)"},{"line_number":51,"context_line":"        if tenant_ref is not None:"},{"line_number":52,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_cf8f162d","line":49,"updated":"2015-03-12 06:25:52.000000000","message":"you can simplify the next 4 lines down to:\n\n  project_id \u003d token_ref.get(\u0027tenant\u0027, {}).get(\u0027id\u0027)","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027,)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        tenant_ref \u003d token_ref.get(\u0027tenant\u0027)"},{"line_number":51,"context_line":"        if tenant_ref is not None:"},{"line_number":52,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_0924b2ad","line":49,"in_reply_to":"9a80dd14_cf8f162d","updated":"2015-03-12 19:35:02.000000000","message":"tenant in token_ref can be None, which will cause an error with the code provided.","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":55,"context_line":"        if parent_audit_id is None:"},{"line_number":56,"context_line":"            parent_audit_id \u003d provider.audit_info("},{"line_number":57,"context_line":"                token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_6f82aa01","line":56,"updated":"2015-03-12 06:25:52.000000000","message":"you\u0027re sticking something called _info into something called _id","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":55,"context_line":"        if parent_audit_id is None:"},{"line_number":56,"context_line":"            parent_audit_id \u003d provider.audit_info("},{"line_number":57,"context_line":"                token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_293a56cd","line":56,"in_reply_to":"9a80dd14_6f82aa01","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"91b7064b61421d927e52de33d2aac4e2a54238b3","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":55,"context_line":"        if parent_audit_id is None:"},{"line_number":56,"context_line":"            parent_audit_id \u003d provider.audit_info("},{"line_number":57,"context_line":"                token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_e9091e2d","line":56,"in_reply_to":"9a80dd14_6f82aa01","updated":"2015-03-12 16:07:34.000000000","message":"So, something like the following? \n\n    parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)\n    audit_ids \u003d provider.audit_info(parent_audit_id)\n    \nthe audit_info() method has logic to determine what to do if a list of audit_ids are passed in.","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f1f7347e713c602d1f7470edb9572861ebbfd21b","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":55,"context_line":"        if parent_audit_id is None:"},{"line_number":56,"context_line":"            parent_audit_id \u003d provider.audit_info("},{"line_number":57,"context_line":"                token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_0972f2ac","line":56,"in_reply_to":"9a80dd14_e9091e2d","updated":"2015-03-12 16:09:47.000000000","message":"the above could even be simplified to: \n\n    audit_ids \u003d provider.audit_info(token_ref.get(\u0027parent_audit_id\u0027))\n\nIn the V3 path, this is handled with kwargs instead.","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            include_catalog\u003dFalse,"},{"line_number":65,"context_line":"            audit_info\u003dparent_audit_id)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        token_id \u003d self.token_formatter.create_token(user_id, parent_audit_id,"},{"line_number":68,"context_line":"                                                     project_id\u003dproject_id)"},{"line_number":69,"context_line":"        token_data \u003d self.v2_token_data_helper.v3_to_v2_token(token_id,"},{"line_number":70,"context_line":"                                                              v3_token_data)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_cf76363f","line":67,"updated":"2015-03-12 06:25:52.000000000","message":"the second argument will have to be the token\u0027s intended expiration -- i assume that\u0027s in the token_ref you\u0027re given above?","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            include_catalog\u003dFalse,"},{"line_number":65,"context_line":"            audit_info\u003dparent_audit_id)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        token_id \u003d self.token_formatter.create_token(user_id, parent_audit_id,"},{"line_number":68,"context_line":"                                                     project_id\u003dproject_id)"},{"line_number":69,"context_line":"        token_data \u003d self.v2_token_data_helper.v3_to_v2_token(token_id,"},{"line_number":70,"context_line":"                                                              v3_token_data)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_4935cad9","line":67,"in_reply_to":"9a80dd14_cf76363f","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"216ee53b6adfc3a7edaa76487aebb13f329cb803","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :raises keystone.exception.Unauthorized"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if isinstance(token_ref, unicode):"},{"line_number":142,"context_line":"            token_str \u003d str(token_ref)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_77998078","line":141,"updated":"2015-03-12 18:39:04.000000000","message":"\u0027unicode\u0027 is not around in Python 3. We should be using six.text_type","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        :raises keystone.exception.Unauthorized"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if isinstance(token_ref, unicode):"},{"line_number":142,"context_line":"            token_str \u003d str(token_ref)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_605298df","line":141,"in_reply_to":"9a80dd14_77998078","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"216ee53b6adfc3a7edaa76487aebb13f329cb803","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if isinstance(token_ref, unicode):"},{"line_number":142,"context_line":"            token_str \u003d str(token_ref)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"},{"line_number":145,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_b795b834","line":142,"updated":"2015-03-12 18:39:04.000000000","message":"\u0027str\u0027 is different  in Python 3. Maybe this needs to be encoded?","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        \"\"\""},{"line_number":141,"context_line":"        if isinstance(token_ref, unicode):"},{"line_number":142,"context_line":"            token_str \u003d str(token_ref)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"},{"line_number":145,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_e03e888a","line":142,"in_reply_to":"9a80dd14_b795b834","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"82c6f309ed7c5deb9a5418468cf473f530451fd2","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            return self.v2_token_data_helper.v3_to_v2_token(token_str,"},{"line_number":158,"context_line":"                                                            v3_token_data)"},{"line_number":159,"context_line":"        # If the token_str is not a v2 token, raise Unauthorized."},{"line_number":160,"context_line":"        raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def validate_v3_token(self, token):"},{"line_number":163,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_8f9c3e5f","line":160,"updated":"2015-03-12 06:25:52.000000000","message":"to make this easier to read, do this the other way around - fail early if you\u0027re out of scope for v3, so that the business logic ( self.v3_token_data_helper.get_token_data ) is done at the highest scope in the method.","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"b7661a9c96fbedfb7ac9e54eda4a72ed3c43b0fe","unresolved":false,"context_lines":[{"line_number":157,"context_line":"            return self.v2_token_data_helper.v3_to_v2_token(token_str,"},{"line_number":158,"context_line":"                                                            v3_token_data)"},{"line_number":159,"context_line":"        # If the token_str is not a v2 token, raise Unauthorized."},{"line_number":160,"context_line":"        raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def validate_v3_token(self, token):"},{"line_number":163,"context_line":"        \"\"\"Validate a V3 formatted token."}],"source_content_type":"text/x-python","patch_set":24,"id":"9a80dd14_3da1a794","line":160,"in_reply_to":"9a80dd14_8f9c3e5f","updated":"2015-03-12 19:35:02.000000000","message":"Done","commit_id":"c23fa078713752fda6edefe74870ab1e9e79a38d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :param token_ref: reference describing the token"},{"line_number":42,"context_line":"        :param roles_ref: reference describing the roles for the token"},{"line_number":43,"context_line":"        :param catalog_ref: reference describing the token\u0027s catalog"},{"line_number":44,"context_line":"        :returns: tuple containing the id of the token and the token data"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_8c4fc333","line":44,"updated":"2015-03-12 21:06:35.000000000","message":"ID*","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :param token_ref: reference describing the token"},{"line_number":42,"context_line":"        :param roles_ref: reference describing the roles for the token"},{"line_number":43,"context_line":"        :param catalog_ref: reference describing the token\u0027s catalog"},{"line_number":44,"context_line":"        :returns: tuple containing the id of the token and the token data"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_b632110e","line":44,"in_reply_to":"9a80dd14_8c4fc333","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":51,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_4c706b72","line":48,"updated":"2015-03-12 21:06:35.000000000","message":"set this to a list to be consistent: \n\n    method_names \u003d [\u0027password\u0027]\n\nMight need to determine how this is handled to. I\u0027m not sure how v2 does it, but can it support having something like [\u0027token\u0027, \u0027password\u0027]?","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"        \"\"\""},{"line_number":47,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":48,"context_line":"        method_names \u003d (\u0027password\u0027)"},{"line_number":49,"context_line":"        project_id \u003d None"},{"line_number":50,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":51,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_995c5e1b","line":48,"in_reply_to":"9a80dd14_4c706b72","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :raises: keystone.exception.Unauthorized"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        token_str \u003d token_ref.encode(\u0027ascii\u0027)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"},{"line_number":135,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_ecdaff49","line":132,"updated":"2015-03-12 21:06:35.000000000","message":"this encodes the entire token_ref dict, right?","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :raises: keystone.exception.Unauthorized"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        token_str \u003d token_ref.encode(\u0027ascii\u0027)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"},{"line_number":135,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_967b4dbd","line":132,"in_reply_to":"9a80dd14_ecdaff49","updated":"2015-03-12 23:02:08.000000000","message":"token_ref is just the fernet token.","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d32f16914b59909ada14653f720ccf2c90874548","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if trust_id or domain_id:"},{"line_number":138,"context_line":"            raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":141,"context_line":"            user_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_6c17efee","line":138,"updated":"2015-03-12 21:06:35.000000000","message":"Fernet","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"9b3509d1c027dc9ba6c7fa97355dfb441083ac00","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"        if trust_id or domain_id:"},{"line_number":138,"context_line":"            raise exception.Unauthorized(\u0027This is not a v2 fernet token.\u0027)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":141,"context_line":"            user_id,"}],"source_content_type":"text/x-python","patch_set":27,"id":"9a80dd14_b64bf185","line":138,"in_reply_to":"9a80dd14_6c17efee","updated":"2015-03-12 23:02:08.000000000","message":"Done","commit_id":"5d60f493ef26dae10d6cfacdf6b2395b48887533"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"59f17ccffd2fed50da92bc7dca181c89048a3087","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        :raises: keystone.exception.Unauthorized"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        \"\"\""},{"line_number":132,"context_line":"        token_str \u003d token_ref.encode(\u0027ascii\u0027)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        (user_id, audit_ids, domain_id, project_id, trust_id, created_at,"},{"line_number":135,"context_line":"            expires_at) \u003d self.token_formatter.validate_token(token_str)"}],"source_content_type":"text/x-python","patch_set":29,"id":"9a80dd14_08f46359","line":132,"updated":"2015-03-13 22:04:01.000000000","message":"another option we could do here would be: \n\n    if not isinstance(token_str, six.binary_type):\n        token_str \u003d token_ref.encode(\u0027ascii\u0027)","commit_id":"4a2dc1b9cb64c1dae4b328c6dd39031e7519d2af"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d391756bf4daa0e2d945481510da7fc728b2bc20","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":50,"context_line":"        project_id \u003d None"},{"line_number":51,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":52,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"},{"line_number":53,"context_line":"        audit_ids \u003d provider.audit_info(token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_12856559","line":52,"updated":"2015-03-14 11:53:34.000000000","message":"in the token_formatter.create_token method we default project id to being None if it isn\u0027t provided. With that we could probably collapse lines 50 - 52 into the following: \n\n    project_id \u003d token_ref.get(\u0027tenant\u0027, {}).get(\u0027id\u0027)","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":50,"context_line":"        project_id \u003d None"},{"line_number":51,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":52,"context_line":"            project_id \u003d token_ref.get(\u0027tenant\u0027).get(\u0027id\u0027)"},{"line_number":53,"context_line":"        audit_ids \u003d provider.audit_info(token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_aeffc800","line":52,"in_reply_to":"9a80dd14_12856559","updated":"2015-03-16 02:42:55.000000000","message":"This can\u0027t change since tenant is defined in token_ref even if its None. Meaning that token_ref.get(\u0027tenant\u0027. {}) would return None instead of an empty dic.","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d391756bf4daa0e2d945481510da7fc728b2bc20","unresolved":false,"context_lines":[{"line_number":185,"context_line":"         expires_at) \u003d self.token_formatter.validate_token(token_ref)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if trust_id or domain_id or federated_info:"},{"line_number":188,"context_line":"            raise exception.Unauthorized(\u0027This is not a v2 Fernet token.\u0027)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":191,"context_line":"            user_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_527b5d7a","line":188,"updated":"2015-03-14 11:53:34.000000000","message":"nit: v2.0","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":185,"context_line":"         expires_at) \u003d self.token_formatter.validate_token(token_ref)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if trust_id or domain_id or federated_info:"},{"line_number":188,"context_line":"            raise exception.Unauthorized(\u0027This is not a v2 Fernet token.\u0027)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":191,"context_line":"            user_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_adcefc57","line":188,"in_reply_to":"9a80dd14_527b5d7a","updated":"2015-03-14 15:17:57.000000000","message":"Could elaborate on this message a little more and explain that if the user wishes to use these features, they should use Keystone V3","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"82eb5ac1d46fed65f045fd74f4867905f24e1adb","unresolved":false,"context_lines":[{"line_number":185,"context_line":"         expires_at) \u003d self.token_formatter.validate_token(token_ref)"},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"        if trust_id or domain_id or federated_info:"},{"line_number":188,"context_line":"            raise exception.Unauthorized(\u0027This is not a v2 Fernet token.\u0027)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":191,"context_line":"            user_id,"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_24b219e5","line":188,"in_reply_to":"9a80dd14_adcefc57","updated":"2015-03-16 02:42:55.000000000","message":"Done","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":51,"context_line":"        project_id \u003d None"},{"line_number":52,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":53,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027].get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_f31a4e17","line":50,"updated":"2015-03-17 02:04:24.000000000","message":"where does this come from?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":51,"context_line":"        project_id \u003d None"},{"line_number":52,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":53,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027].get(\u0027id\u0027)"},{"line_number":54,"context_line":"        audit_ids \u003d provider.audit_info(token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_73d65e29","line":52,"updated":"2015-03-17 02:04:24.000000000","message":"should be able to use\n\n if \u0027tenant\u0027 in token_ref\n\nhere","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":51,"context_line":"        project_id \u003d None"},{"line_number":52,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":53,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027].get(\u0027id\u0027)"},{"line_number":54,"context_line":"        audit_ids \u003d provider.audit_info(token_ref.get(\u0027parent_audit_id\u0027))"},{"line_number":55,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_57ada1e9","line":52,"in_reply_to":"9a80dd14_73d65e29","updated":"2015-03-17 20:24:09.000000000","message":"token_ref can have \u0027tenant\u0027 set to None.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            method_names,"},{"line_number":59,"context_line":"            project_id\u003dproject_id,"},{"line_number":60,"context_line":"            token\u003dtoken_ref,"},{"line_number":61,"context_line":"            include_catalog\u003dFalse,"},{"line_number":62,"context_line":"            audit_info\u003daudit_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        expires_at \u003d v3_token_data[\u0027token\u0027][\u0027expires_at\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_339a266f","line":61,"updated":"2015-03-17 02:04:24.000000000","message":"why is this false?","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            method_names,"},{"line_number":59,"context_line":"            project_id\u003dproject_id,"},{"line_number":60,"context_line":"            token\u003dtoken_ref,"},{"line_number":61,"context_line":"            include_catalog\u003dFalse,"},{"line_number":62,"context_line":"            audit_info\u003daudit_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        expires_at \u003d v3_token_data[\u0027token\u0027][\u0027expires_at\u0027]"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_9701d9b1","line":61,"in_reply_to":"9a80dd14_339a266f","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            audit_info\u003daudit_ids)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        expires_at \u003d v3_token_data[\u0027token\u0027][\u0027expires_at\u0027]"},{"line_number":65,"context_line":"        methods \u003d v3_token_data[\u0027token\u0027][\u0027methods\u0027]"},{"line_number":66,"context_line":"        token_id \u003d self.token_formatter.create_token(user_id, expires_at,"},{"line_number":67,"context_line":"                                                     audit_ids,"},{"line_number":68,"context_line":"                                                     methods\u003dmethods,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_f376ce3e","line":65,"updated":"2015-03-17 02:04:24.000000000","message":"?? we already have method_names above.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        :param token_ref: reference describing the token to validate"},{"line_number":178,"context_line":"        :returns: the token data"},{"line_number":179,"context_line":"        :raises: keystone.exception.Unauthorized"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        (user_id, methods,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_13c28234","line":179,"updated":"2015-03-17 02:04:24.000000000","message":"this is invalid rst, should be like\n\n :raises keystone.exception.Unauthorized: if the token is invalid","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"        :param token_ref: reference describing the token to validate"},{"line_number":178,"context_line":"        :returns: the token data"},{"line_number":179,"context_line":"        :raises: keystone.exception.Unauthorized"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        \"\"\""},{"line_number":182,"context_line":"        (user_id, methods,"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_97747937","line":179,"in_reply_to":"9a80dd14_13c28234","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad524a012405a8943c3af824aa0343487fa10ae4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_279aa8c5","line":50,"updated":"2015-03-18 02:15:28.000000000","message":"is this a bug? Seems like a bug.","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"11086781c4934f714fda35d3e4effede8cdfeab4","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_6a40e507","line":50,"in_reply_to":"9a80dd14_279aa8c5","updated":"2015-03-18 02:58:10.000000000","message":"Are methods defined in v2.0? Could this only for v3?","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"5dd1482ee7ef8c906f17327d5588116035697860","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_8d2efca3","line":50,"in_reply_to":"9a80dd14_6a40e507","updated":"2015-03-18 14:46:23.000000000","message":"I have tested this using master and the default provider and methods is not included in the token_ref.","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"b29f0e27a574aca67b13a50624fc7c756c05a91d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":55,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027][\u0027id\u0027]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_5b713e0b","line":53,"updated":"2015-03-17 22:35:00.000000000","message":"(nit) if you need to push another patch i\u0027d rephrase this comment","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d3ecc66b91c6357bdfab3adbb659774fadf7d2b5","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":55,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027][\u0027id\u0027]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_c7d0f1cb","line":53,"in_reply_to":"9a80dd14_5b713e0b","updated":"2015-03-17 23:39:39.000000000","message":"++ but this could be done in a follow up patch as well.","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"11086781c4934f714fda35d3e4effede8cdfeab4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":55,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027][\u0027id\u0027]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_ea53f5df","line":53,"in_reply_to":"9a80dd14_5b713e0b","updated":"2015-03-18 02:58:10.000000000","message":"Done","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"11086781c4934f714fda35d3e4effede8cdfeab4","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # \u0027tenant\u0027 can be defined has None"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"},{"line_number":55,"context_line":"            project_id \u003d token_ref[\u0027tenant\u0027][\u0027id\u0027]"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_8a435912","line":53,"in_reply_to":"9a80dd14_c7d0f1cb","updated":"2015-03-18 02:58:10.000000000","message":"Done","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ad524a012405a8943c3af824aa0343487fa10ae4","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        :param token_ref: reference describing the token to validate"},{"line_number":187,"context_line":"        :returns: the token data"},{"line_number":188,"context_line":"        :raises: keystone.exception.Unauthorized: if a v3 token is used"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        (user_id, methods,"}],"source_content_type":"text/x-python","patch_set":38,"id":"9a80dd14_47d23c5c","line":188,"updated":"2015-03-18 02:15:28.000000000","message":"remove the : after raises, otherwise invalid rst.","commit_id":"f7ed49b490977719d4815413c8c1ceb0823654b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"201d9946c7ed263b853ecf3e72a2f09d191cab3b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # Verify that tenant is not None in token_ref"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_40404635","line":51,"updated":"2015-03-18 16:11:43.000000000","message":"why are we messing with method_names when it\u0027s just going to get stripped out?","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3c662ef83f6eaf14e65edd74973cb6c6c3fd3f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        \"\"\""},{"line_number":49,"context_line":"        user_id \u003d token_ref[\u0027user\u0027][\u0027id\u0027]"},{"line_number":50,"context_line":"        # Default to password since methods not provided by token_ref"},{"line_number":51,"context_line":"        method_names \u003d [\u0027password\u0027]"},{"line_number":52,"context_line":"        project_id \u003d None"},{"line_number":53,"context_line":"        # Verify that tenant is not None in token_ref"},{"line_number":54,"context_line":"        if token_ref.get(\u0027tenant\u0027):"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_60e1cafb","line":51,"in_reply_to":"9a80dd14_40404635","updated":"2015-03-18 16:15:12.000000000","message":"see comment below","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"201d9946c7ed263b853ecf3e72a2f09d191cab3b","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":58,"context_line":"        # If parent_audit_id is defined then a token authentication was made"},{"line_number":59,"context_line":"        if parent_audit_id:"},{"line_number":60,"context_line":"            method_names.append(\u0027token\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_006e4ec9","line":60,"updated":"2015-03-18 16:11:43.000000000","message":"why are we messing with method_names when it\u0027s just going to get stripped out?","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"cd3c662ef83f6eaf14e65edd74973cb6c6c3fd3f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"        parent_audit_id \u003d token_ref.get(\u0027parent_audit_id\u0027)"},{"line_number":58,"context_line":"        # If parent_audit_id is defined then a token authentication was made"},{"line_number":59,"context_line":"        if parent_audit_id:"},{"line_number":60,"context_line":"            method_names.append(\u0027token\u0027)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_00264e68","line":60,"in_reply_to":"9a80dd14_006e4ec9","updated":"2015-03-18 16:15:12.000000000","message":"V2 unscoped token: http://cdn.pasteraw.com/c20zzfr5v41uoe46353k4vn06f9jv4s\nV2 unscoped token, rescoped: http://paste.openstack.org/show/193158/\nV3 validation of rescoped token: http://paste.openstack.org/show/193159/","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"18b6d4a1bc87057a15137b8b5925ebae5e1bf12e","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Get v3 token data and exclude building v3 specific catalog"},{"line_number":65,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":66,"context_line":"            user_id,"},{"line_number":67,"context_line":"            method_names,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_dd07bdc7","line":64,"updated":"2015-03-18 16:04:52.000000000","message":"why go through the rigamarole of getting a v3 token and converting it to v2, can\u0027t we just get a v2 token to begin with?","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5f9922b95e330b029f893320bc1e632329774a19","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Get v3 token data and exclude building v3 specific catalog"},{"line_number":65,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":66,"context_line":"            user_id,"},{"line_number":67,"context_line":"            method_names,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_c00436c8","line":64,"in_reply_to":"9a80dd14_202352a8","updated":"2015-03-18 16:13:34.000000000","message":"This should be a comment in the code.","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"14df7cb4fed4ecb0d983e4973e8c29e641be54b4","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Get v3 token data and exclude building v3 specific catalog"},{"line_number":65,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":66,"context_line":"            user_id,"},{"line_number":67,"context_line":"            method_names,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_006d6e04","line":64,"in_reply_to":"9a80dd14_c00436c8","updated":"2015-03-18 16:23:38.000000000","message":"Done","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"206488e3df460947503e39bce549ee11c37af5a8","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        audit_ids \u003d provider.audit_info(parent_audit_id)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        # Get v3 token data and exclude building v3 specific catalog"},{"line_number":65,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":66,"context_line":"            user_id,"},{"line_number":67,"context_line":"            method_names,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_202352a8","line":64,"in_reply_to":"9a80dd14_dd07bdc7","updated":"2015-03-18 16:10:35.000000000","message":"the V2TokenDataHelper.format_token() equivalent of V3TokenDataHelper.get_token_data() doesn\u0027t build any of this online with Keystone, whereas the get_token_data() method from V3TokenDataHelper actually builds the response by calling into the other apis of Keystone. This leverages that call and makes it so that we can dynamically build the V2 reference on the way out, very similar to what we do for V3.","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"201d9946c7ed263b853ecf3e72a2f09d191cab3b","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        :param token_ref: reference describing the token to validate"},{"line_number":187,"context_line":"        :returns: the token data"},{"line_number":188,"context_line":"        :raises: keystone.exception.Unauthorized if v3 token is used"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        (user_id, methods,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_00a56e03","line":188,"updated":"2015-03-18 16:11:43.000000000","message":"remove : after raises, it belongs after keystone.exception.Unauthorized","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"14df7cb4fed4ecb0d983e4973e8c29e641be54b4","unresolved":false,"context_lines":[{"line_number":185,"context_line":""},{"line_number":186,"context_line":"        :param token_ref: reference describing the token to validate"},{"line_number":187,"context_line":"        :returns: the token data"},{"line_number":188,"context_line":"        :raises: keystone.exception.Unauthorized if v3 token is used"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        (user_id, methods,"}],"source_content_type":"text/x-python","patch_set":39,"id":"9a80dd14_20b99279","line":188,"in_reply_to":"9a80dd14_00a56e03","updated":"2015-03-18 16:23:38.000000000","message":"Done","commit_id":"832a7432ac13c621fea38f5d2930954d487ed272"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"f0765a71e4094f73cd7b506a7a6d0156628b2968","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        :returns: a byte representation of the uuid"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        \"\"\""},{"line_number":75,"context_line":"        # TODO(lbragstad): Wrap this in an exception. Not sure what the case"},{"line_number":76,"context_line":"        # would be where we couldn\u0027t handle what we\u0027ve been given but incase"},{"line_number":77,"context_line":"        # the integrity of the token has been compromised."},{"line_number":78,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba7be1f8_45ef391e","line":75,"updated":"2015-03-03 15:44:10.000000000","message":"This TODO is done, isn\u0027t it?","commit_id":"2f4aae57cb96941bbd56ccea66affb6142d71bee"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e84e56b68c4681fe6680f2ecb6b93031c978f5ab","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        # strings. Fernet expects bytes when decrypting and will fail if the"},{"line_number":148,"context_line":"        # token_string is unicode. If we are dealing with unicode, cast it to a"},{"line_number":149,"context_line":"        # string."},{"line_number":150,"context_line":"        if isinstance(token_string, unicode):"},{"line_number":151,"context_line":"            return True"},{"line_number":152,"context_line":"        else:"},{"line_number":153,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba7be1f8_af536f15","line":150,"updated":"2015-03-03 16:57:40.000000000","message":"This should be flag that something is wrong. The tokens should ideally come in with the same type. Also this would be really easy to break on accident.","commit_id":"68755e2537e05b72c8cd14ec01b2f896ba145a28"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0fdfd7519b061ff61169d66fa56e9777137ec6a3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_13fe3d6b","line":1,"updated":"2015-03-09 20:59:18.000000000","message":"if you rebase onto https://review.openstack.org/#/c/162338/ then it looks like you don\u0027t need to make any changes at all to this file. some of the work you\u0027re doing here should be done in fernet.core.Provider instead (in the v2 methods)","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0fdfd7519b061ff61169d66fa56e9777137ec6a3","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            uuid_obj \u003d uuid.UUID(uuid_string)"},{"line_number":76,"context_line":"        except ValueError as e:"},{"line_number":77,"context_line":"            raise exception.Unauthorized(six.text_type(e))"},{"line_number":78,"context_line":"        return uuid_obj.bytes"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _convert_uuid_bytes_to_hex(self, uuid_byte_string):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_b3a731a6","line":77,"updated":"2015-03-09 20:59:18.000000000","message":"is this relevant to this change?","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d111c73564dd4c7b518ab464918fbc0293448565","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            uuid_obj \u003d uuid.UUID(uuid_string)"},{"line_number":76,"context_line":"        except ValueError as e:"},{"line_number":77,"context_line":"            raise exception.Unauthorized(six.text_type(e))"},{"line_number":78,"context_line":"        return uuid_obj.bytes"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _convert_uuid_bytes_to_hex(self, uuid_byte_string):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_670889da","line":77,"in_reply_to":"9a80dd14_b3a731a6","updated":"2015-03-10 04:40:50.000000000","message":"No, this should go away with the rebase I believe. This is related to the issue with tokens coming in as different formats depending on if we get it from header(\u0027X-Subject-Token/X-Auth-Token\u0027) or if we get it off the URL ( GET /v2.0/auth/tokens/{token_id}. One sends them in as str objects and one sends them in as unicode. \n\ndstanek was curious about this and was poking around with it, not sure what the latest.","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"3eb59952484c916a607df3cc0892bf1d498a8d35","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        try:"},{"line_number":75,"context_line":"            uuid_obj \u003d uuid.UUID(uuid_string)"},{"line_number":76,"context_line":"        except ValueError as e:"},{"line_number":77,"context_line":"            raise exception.Unauthorized(six.text_type(e))"},{"line_number":78,"context_line":"        return uuid_obj.bytes"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _convert_uuid_bytes_to_hex(self, uuid_byte_string):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9a80dd14_8abd87da","line":77,"in_reply_to":"9a80dd14_b3a731a6","updated":"2015-03-10 15:38:26.000000000","message":"This was done in Lance\u0027s initial commit. I can change it if needed.","commit_id":"70a1fff88cd773ae08132805bf25e3de8cd35a46"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ae47624981f549d07058e6b902c2d1e1d7ab4b2c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def validate_token(self, token):"},{"line_number":146,"context_line":"        \"\"\"Validates a Fernet token and returns the payload attributes.\"\"\""},{"line_number":147,"context_line":"        if not isinstance(token, six.binary_type):"},{"line_number":148,"context_line":"            token \u003d token.encode(\u0027ascii\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        serialized_payload \u003d self.unpack(token)"},{"line_number":151,"context_line":"        versioned_payload \u003d msgpack.unpackb(serialized_payload)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9a80dd14_cdd97023","line":148,"updated":"2015-03-14 15:17:57.000000000","message":"++","commit_id":"4a4a89f90970e0ef032c4d2d9752028bb5480137"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"0a239f4e938e9b838f711c50b530979aa82803ec","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def validate_token(self, token):"},{"line_number":146,"context_line":"        \"\"\"Validates a Fernet token and returns the payload attributes.\"\"\""},{"line_number":147,"context_line":"        if not isinstance(token, six.binary_type):"},{"line_number":148,"context_line":"            token \u003d token.encode(\u0027ascii\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        serialized_payload \u003d self.unpack(token)"},{"line_number":151,"context_line":"        versioned_payload \u003d msgpack.unpackb(serialized_payload)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_b301b66c","line":148,"updated":"2015-03-17 02:04:24.000000000","message":"is this fixing a different bug? seems unrelated.","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"d521d8a79a53c189d346287400a727382e364c4c","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def validate_token(self, token):"},{"line_number":146,"context_line":"        \"\"\"Validates a Fernet token and returns the payload attributes.\"\"\""},{"line_number":147,"context_line":"        if not isinstance(token, six.binary_type):"},{"line_number":148,"context_line":"            token \u003d token.encode(\u0027ascii\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        serialized_payload \u003d self.unpack(token)"},{"line_number":151,"context_line":"        versioned_payload \u003d msgpack.unpackb(serialized_payload)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_52f76fd4","line":148,"in_reply_to":"9a80dd14_b301b66c","updated":"2015-03-17 20:24:09.000000000","message":"Done","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d3c2b2eccb84cd3db273312549c1970eed63fd71","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    def validate_token(self, token):"},{"line_number":146,"context_line":"        \"\"\"Validates a Fernet token and returns the payload attributes.\"\"\""},{"line_number":147,"context_line":"        if not isinstance(token, six.binary_type):"},{"line_number":148,"context_line":"            token \u003d token.encode(\u0027ascii\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        serialized_payload \u003d self.unpack(token)"},{"line_number":151,"context_line":"        versioned_payload \u003d msgpack.unpackb(serialized_payload)"}],"source_content_type":"text/x-python","patch_set":36,"id":"9a80dd14_6ee035cd","line":148,"in_reply_to":"9a80dd14_b301b66c","updated":"2015-03-17 02:54:09.000000000","message":"I believe this is because token_id strings come in as different types between v2 and v3","commit_id":"ed06f41006ebc4cd06622bde3279e0050367e575"}],"keystone/token/providers/klwt/token_formatters.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f5b2d1409bc6b5a4e86d7fbee2a2bd8b084f468","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        # V2 token strings come in as unicode where as V3 tokens come in as"},{"line_number":153,"context_line":"        # strings. Fernet expects bytes when decrypting and will fail if the"},{"line_number":154,"context_line":"        # token_string is unicode. If we are dealing with unicode, cast it to a"},{"line_number":155,"context_line":"        # string."},{"line_number":156,"context_line":"        if isinstance(token_string, unicode):"},{"line_number":157,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_fda87d21","line":154,"updated":"2015-02-26 15:43:55.000000000","message":"this is interesting....find out why","commit_id":"fac46ddef92650cad01d91f4326d8dd46bd7a688"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"ed7326b654db458feb2222eb18b54ec4d920844a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        \"\"\""},{"line_number":152,"context_line":"        # V2 token strings come in as unicode where as V3 tokens come in as"},{"line_number":153,"context_line":"        # strings. Fernet expects bytes when decrypting and will fail if the"},{"line_number":154,"context_line":"        # token_string is unicode. If we are dealing with unicode, cast it to a"},{"line_number":155,"context_line":"        # string."},{"line_number":156,"context_line":"        if isinstance(token_string, unicode):"},{"line_number":157,"context_line":"            return True"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_e810bd4f","line":154,"in_reply_to":"ba7be1f8_fda87d21","updated":"2015-02-26 15:44:33.000000000","message":"Sorry...this was a note to myself.","commit_id":"fac46ddef92650cad01d91f4326d8dd46bd7a688"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f5b2d1409bc6b5a4e86d7fbee2a2bd8b084f468","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        # strings. Fernet expects bytes when decrypting and will fail if the"},{"line_number":154,"context_line":"        # token_string is unicode. If we are dealing with unicode, cast it to a"},{"line_number":155,"context_line":"        # string."},{"line_number":156,"context_line":"        if isinstance(token_string, unicode):"},{"line_number":157,"context_line":"            return True"},{"line_number":158,"context_line":"        else:"},{"line_number":159,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_3d66952a","line":156,"updated":"2015-02-26 15:43:55.000000000","message":"Not python 3 friendly","commit_id":"fac46ddef92650cad01d91f4326d8dd46bd7a688"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"4f5b2d1409bc6b5a4e86d7fbee2a2bd8b084f468","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        # string."},{"line_number":210,"context_line":"        is_v2_token \u003d self._is_v2_token(token_string)"},{"line_number":211,"context_line":"        if is_v2_token:"},{"line_number":212,"context_line":"            token_string \u003d str(token_string)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"        try:"},{"line_number":215,"context_line":"            decrypted_token \u003d self.crypto.decrypt(token_string)"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba7be1f8_dd7499d0","line":212,"updated":"2015-02-26 15:43:55.000000000","message":"not Python 3 friendly","commit_id":"fac46ddef92650cad01d91f4326d8dd46bd7a688"}]}
