)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc58ecd50c475f8c15aaa54f91fc85843d1edbab","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  with token formats that can be validated offline (PKI, PKIZ). This"},{"line_number":13,"context_line":"  requires a bunch of refactoring to move the responsibility of"},{"line_number":14,"context_line":"  decrypting, unpacking, and disassembling the payload contents to the"},{"line_number":15,"context_line":"  caller (the Provider)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"- Add a domain-scoped payload format, identical to that for"},{"line_number":18,"context_line":"  project-scoped tokens, just with a different version number. Better"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a80dd14_8cfef5ac","line":15,"updated":"2015-03-12 15:23:23.000000000","message":"isn\u0027t this part being handled by the TokenFormatter object? The Provider just passes the context to the TokenFormatter which determines which token payload to build.","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e7f6d0095a6604dbcda7d5be01a71b12fad063ab","unresolved":false,"context_lines":[{"line_number":12,"context_line":"  with token formats that can be validated offline (PKI, PKIZ). This"},{"line_number":13,"context_line":"  requires a bunch of refactoring to move the responsibility of"},{"line_number":14,"context_line":"  decrypting, unpacking, and disassembling the payload contents to the"},{"line_number":15,"context_line":"  caller (the Provider)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"- Add a domain-scoped payload format, identical to that for"},{"line_number":18,"context_line":"  project-scoped tokens, just with a different version number. Better"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a80dd14_46aa19d3","line":15,"in_reply_to":"9a80dd14_8cfef5ac","updated":"2015-03-12 15:55:22.000000000","message":"not in this patch - i\u0027m referring to L133-135 here https://review.openstack.org/#/c/162031/16/keystone/token/providers/fernet/core.py","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"041fbf6fdc2837fb65fbb70d61309cc980828b99","unresolved":false,"context_lines":[{"line_number":4129,"context_line":"        super(TestFernetTokenProvider, self).config_overrides()"},{"line_number":4130,"context_line":"        self.config_fixture.config("},{"line_number":4131,"context_line":"            group\u003d\u0027token\u0027,"},{"line_number":4132,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":4133,"context_line":""},{"line_number":4134,"context_line":"    def test_validate_unscoped_token(self):"},{"line_number":4135,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_7cfa2676","line":4132,"updated":"2015-03-06 20:48:48.000000000","message":"Should we set this for default domain id too? \n\n    self.config_fixture.config(\n        group\u003d\u0027identity\u0027,\n        default_domain_id\u003d\u0027default\u0027)","commit_id":"f813e01e041854fbf55d6fab0808b69b7d2a2438"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8331d19662898048167f62c5505d5a4ad3e3f235","unresolved":false,"context_lines":[{"line_number":4129,"context_line":"        super(TestFernetTokenProvider, self).config_overrides()"},{"line_number":4130,"context_line":"        self.config_fixture.config("},{"line_number":4131,"context_line":"            group\u003d\u0027token\u0027,"},{"line_number":4132,"context_line":"            provider\u003d\u0027keystone.token.providers.fernet.Provider\u0027)"},{"line_number":4133,"context_line":""},{"line_number":4134,"context_line":"    def test_validate_unscoped_token(self):"},{"line_number":4135,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_5cd562b7","line":4132,"in_reply_to":"9a80dd14_7cfa2676","updated":"2015-03-06 20:54:20.000000000","message":"Or that shouldn\u0027t matter since it\u0027s assuming the default?","commit_id":"f813e01e041854fbf55d6fab0808b69b7d2a2438"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e0b2e998e941998124191a5704681daf843576d1","unresolved":false,"context_lines":[{"line_number":4258,"context_line":"        # Delete access to domain"},{"line_number":4259,"context_line":"        self.assignment_api.delete_grant(self.role[\u0027id\u0027],"},{"line_number":4260,"context_line":"                                         user_id\u003dself.user[\u0027id\u0027],"},{"line_number":4261,"context_line":"                                         domain_id\u003dself.domain[\u0027id\u0027])"},{"line_number":4262,"context_line":"        # Ensure validating a token for a disabled user fails"},{"line_number":4263,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4264,"context_line":"                          self.token_provider_api.validate_token,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_bc749e36","line":4261,"updated":"2015-03-06 20:46:33.000000000","message":"This will still be \u0027default\u0027 because of https://github.com/openstack/keystone/blob/d573ce7b3193dd3e3ad562b977ef9f73f854926f/keystone/tests/unit/test_v3.py#L35\n\nSo this should be OK? Or do we need to set the CONF.default_domain ID for the testing too?","commit_id":"f813e01e041854fbf55d6fab0808b69b7d2a2438"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc58ecd50c475f8c15aaa54f91fc85843d1edbab","unresolved":false,"context_lines":[{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def load_sample_data(self):"},{"line_number":544,"context_line":"        \"\"\"Load Sample Data for Test Cases."},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        Two domains, domainA and domainB"},{"line_number":547,"context_line":"        Two users in domainA, userNormalA and userAdminA"},{"line_number":548,"context_line":"        One user in domainB, userAdminB"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_4ce23d02","line":545,"updated":"2015-03-12 15:23:23.000000000","message":"Is this related?","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2bf2a474ce03184c6370060899877c89c6be46fa","unresolved":false,"context_lines":[{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def load_sample_data(self):"},{"line_number":544,"context_line":"        \"\"\"Load Sample Data for Test Cases."},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        Two domains, domainA and domainB"},{"line_number":547,"context_line":"        Two users in domainA, userNormalA and userAdminA"},{"line_number":548,"context_line":"        One user in domainB, userAdminB"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_f20f48df","line":545,"in_reply_to":"9a80dd14_4ce23d02","updated":"2015-03-12 15:46:53.000000000","message":"sort of. this fixes a hacking violation in a future version of hacking","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f03c5495a0a1d78e9e4843eed9d51db55b83841","unresolved":false,"context_lines":[{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def load_sample_data(self):"},{"line_number":544,"context_line":"        \"\"\"Load Sample Data for Test Cases."},{"line_number":545,"context_line":""},{"line_number":546,"context_line":"        Two domains, domainA and domainB"},{"line_number":547,"context_line":"        Two users in domainA, userNormalA and userAdminA"},{"line_number":548,"context_line":"        One user in domainB, userAdminB"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_3cc9b279","line":545,"in_reply_to":"9a80dd14_f20f48df","updated":"2015-03-12 16:32:45.000000000","message":"++, thanks!","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc58ecd50c475f8c15aaa54f91fc85843d1edbab","unresolved":false,"context_lines":[{"line_number":4154,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4155,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4156,"context_line":"                          unscoped_token)"},{"line_number":4157,"context_line":"        # self._validate_token(unscoped_token, expected_status\u003d404)"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"    def test_unscoped_token_is_invalid_after_enabling_disabled_user(self):"},{"line_number":4160,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_0c9da559","line":4157,"updated":"2015-03-12 15:23:23.000000000","message":"We can remove this line now, can\u0027t we?","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2bf2a474ce03184c6370060899877c89c6be46fa","unresolved":false,"context_lines":[{"line_number":4154,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4155,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4156,"context_line":"                          unscoped_token)"},{"line_number":4157,"context_line":"        # self._validate_token(unscoped_token, expected_status\u003d404)"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"    def test_unscoped_token_is_invalid_after_enabling_disabled_user(self):"},{"line_number":4160,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_12b4dccf","line":4157,"in_reply_to":"9a80dd14_0c9da559","updated":"2015-03-12 15:46:53.000000000","message":"i added these because i think they *should* be here, but they\u0027re not passing because i think we\u0027re using the same user to administer the test as we are as the test subject (if that makes any sense). maybe add some TODO notes in a separate patch?","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f03c5495a0a1d78e9e4843eed9d51db55b83841","unresolved":false,"context_lines":[{"line_number":4154,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4155,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4156,"context_line":"                          unscoped_token)"},{"line_number":4157,"context_line":"        # self._validate_token(unscoped_token, expected_status\u003d404)"},{"line_number":4158,"context_line":""},{"line_number":4159,"context_line":"    def test_unscoped_token_is_invalid_after_enabling_disabled_user(self):"},{"line_number":4160,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_fc855a07","line":4157,"in_reply_to":"9a80dd14_12b4dccf","updated":"2015-03-12 16:32:45.000000000","message":"++ #TODOs would be helpful because then it doesn\u0027t look like we forgot to remove code.","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"dc58ecd50c475f8c15aaa54f91fc85843d1edbab","unresolved":false,"context_lines":[{"line_number":4172,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4173,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4174,"context_line":"                          unscoped_token)"},{"line_number":4175,"context_line":"        # self._validate_token(unscoped_token, expected_status\u003d404)"},{"line_number":4176,"context_line":""},{"line_number":4177,"context_line":"    def test_unscoped_token_is_invalid_after_disabling_user_domain(self):"},{"line_number":4178,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_6cad4188","line":4175,"updated":"2015-03-12 15:23:23.000000000","message":"Same here. Comment applies to all instances in this file.","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"91af3dd885f9a35b138e82c999b568ca1436c494","unresolved":false,"context_lines":[{"line_number":4407,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4408,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4409,"context_line":"                          trust_scoped_token)"},{"line_number":4410,"context_line":"        # self._validate_token(trust_scoped_token, expected_status\u003d404)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_7206f821","line":4410,"updated":"2015-03-12 16:16:34.000000000","message":"Are all of these commented out on purpose?","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f03c5495a0a1d78e9e4843eed9d51db55b83841","unresolved":false,"context_lines":[{"line_number":4407,"context_line":"        self.assertRaises(exception.TokenNotFound,"},{"line_number":4408,"context_line":"                          self.token_provider_api.validate_token,"},{"line_number":4409,"context_line":"                          trust_scoped_token)"},{"line_number":4410,"context_line":"        # self._validate_token(trust_scoped_token, expected_status\u003d404)"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_9c8ffe22","line":4410,"in_reply_to":"9a80dd14_7206f821","updated":"2015-03-12 16:32:45.000000000","message":"See above comment.","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"}],"keystone/token/providers/fernet/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f0c9a65568e30447621a60c781722af55f503098","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                user_id,"},{"line_number":122,"context_line":"                project_id,"},{"line_number":123,"context_line":"                token_data[\u0027token\u0027][\u0027audit_ids\u0027])"},{"line_number":124,"context_line":"        elif domain_id:"},{"line_number":125,"context_line":"            version \u003d tf.DomainScopedPayload.version"},{"line_number":126,"context_line":"            payload \u003d tf.DomainScopedPayload.assemble("},{"line_number":127,"context_line":"                user_id,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_553a9de7","line":124,"updated":"2015-03-06 18:57:55.000000000","message":"This will break when the domain_id passed in is \u0027default\u0027","commit_id":"51a099e7ae5fcd9fb36d0228c3390b01155f48f5"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c76d05f9815ef910656f37e724d1d3e05c3124cb","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        b_user_id \u003d cls.convert_uuid_hex_to_bytes(user_id)"},{"line_number":160,"context_line":"        b_domain_id \u003d cls.convert_uuid_hex_to_bytes(domain_id)"},{"line_number":161,"context_line":"        return (b_user_id, b_domain_id, audit_ids)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_282eb092","line":160,"updated":"2015-03-06 18:59:24.000000000","message":"actually, this is the call that will break since \u0027default\u0027 won\u0027t be converted successfully to bytes.","commit_id":"51a099e7ae5fcd9fb36d0228c3390b01155f48f5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c294e07e3727be1e7830797c993485957152677","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        \"\"\""},{"line_number":159,"context_line":"        b_user_id \u003d cls.convert_uuid_hex_to_bytes(user_id)"},{"line_number":160,"context_line":"        b_domain_id \u003d cls.convert_uuid_hex_to_bytes(domain_id)"},{"line_number":161,"context_line":"        return (b_user_id, b_domain_id, audit_ids)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_c8743438","line":160,"in_reply_to":"9a80dd14_282eb092","updated":"2015-03-06 19:10:44.000000000","message":"so this could turn into: \n\n    if domain_id \u003d\u003d \u0027default\u0027:\n        b_domain_id \u003d \u0027default\u0027\n    else:\n        b_domain_id \u003d cls.convert_uuid_hex_to_bytes(domain_id)\n\n    b_domain_id \u003d \u0027default\u0027 if domain_id \u003d\u003d \u0027default\u0027 else cls.convert_uuid_hex_to_bytes(domain_id)","commit_id":"51a099e7ae5fcd9fb36d0228c3390b01155f48f5"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bf8ffb65ad132ab5e69fae30f82c5ad1c40832d3","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                b_domain_id \u003d domain_id"},{"line_number":166,"context_line":"            else:"},{"line_number":167,"context_line":"                raise"},{"line_number":168,"context_line":"        return (b_user_id, b_domain_id, audit_ids)"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    @classmethod"},{"line_number":171,"context_line":"    def disassemble(cls, payload):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a80dd14_61160357","line":168,"updated":"2015-03-06 20:41:56.000000000","message":"Nice","commit_id":"3ca55d7686a9075f6a57604b6290fee8198706e5"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"91af3dd885f9a35b138e82c999b568ca1436c494","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def assemble(cls, *args):"},{"line_number":72,"context_line":"        \"\"\"Assemble the payload of an unscoped token."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param args: whatever data should go into the payload"},{"line_number":75,"context_line":"        :returns: the payload of an unscoped token"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_a95e46e7","line":72,"updated":"2015-03-12 16:16:34.000000000","message":"(nit) maybe remove \u0027unscoped\u0027 here since there is a concrete implementation specific to that","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f03c5495a0a1d78e9e4843eed9d51db55b83841","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    @classmethod"},{"line_number":71,"context_line":"    def assemble(cls, *args):"},{"line_number":72,"context_line":"        \"\"\"Assemble the payload of an unscoped token."},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        :param args: whatever data should go into the payload"},{"line_number":75,"context_line":"        :returns: the payload of an unscoped token"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_7ca88a77","line":72,"in_reply_to":"9a80dd14_a95e46e7","updated":"2015-03-12 16:32:45.000000000","message":"++","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"91af3dd885f9a35b138e82c999b568ca1436c494","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        raise NotImplementedError()"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    @classmethod"},{"line_number":91,"context_line":"    def convert_uuid_hex_to_bytes(cls, uuid_string):"},{"line_number":92,"context_line":"        \"\"\"Compress UUID formatted strings to bytes."},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_69036eb8","line":90,"updated":"2015-03-12 16:16:34.000000000","message":"Is there any reason these are classmethods? Suggest static methods or just plain old functions if you don\u0027t need the extra namespacing.","commit_id":"244b221c30d7c8d876b8ad2230008c0bab08e19a"}]}
