)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"1c4c243f0abbb681c76c8979b47f25e29d404db1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"A plugin to support kerberos configured via keystone federation."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"This requires keystoneclient\u003e\u003d1.3"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I766c024089dad94f3f54e2578d578f65a246bdae"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"7ad32947_3304f47c","line":12,"updated":"2015-04-27 22:41:15.000000000","message":"needs a bug or blueprint","commit_id":"9f11208fb47762bf78cdff28e6c35c2490d2b6a1"}],"keystoneclient_kerberos/tests/base.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(TestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.requests \u003d self.useFixture(requests_fixture.Fixture())"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_fb3bfa9a","line":29,"updated":"2015-05-11 00:13:41.000000000","message":"(unrelated) this is called requests_mock in keystoneclient. Let\u0027s stick with that so it\u0027s consistent.\n\nI noticed that this was moved so marked the comment as unrelated.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(TestCase, self).setUp()"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        self.requests \u003d self.useFixture(requests_fixture.Fixture())"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_af5db516","line":29,"in_reply_to":"9af37de9_fb3bfa9a","updated":"2015-06-04 10:04:06.000000000","message":"Done","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"}],"keystoneclient_kerberos/tests/test_federated.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class TestFederatedAuth(base.TestCase):"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    TEST_ROOT_URL \u003d \u0027http://keystoneserver.test.com:5000/\u0027"},{"line_number":27,"context_line":"    TEST_V3_URL \u003d TEST_ROOT_URL + \u0027v3\u0027"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_3b52a2de","line":26,"updated":"2015-05-11 00:13:41.000000000","message":"where does this come from? Can it be set to a random value?","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.identity_provider \u003d uuid.uuid4().hex"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        self.unscoped_id \u003d uuid.uuid4().hex"},{"line_number":36,"context_line":"        self.unscoped_body \u003d ks_fixture.V3Token()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def token_url(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_7b1dca0e","line":36,"updated":"2015-05-11 00:13:41.000000000","message":"The documentation for V3Token doesn\u0027t say that this creates an unscoped token... it doesn\u0027t say how to create an unscoped token.\n\nAlso, I\u0027m wondering why V3FederationToken wasn\u0027t used.\n\nAlso, seems like keystoneclient_kerberos should be defining its own V3KerberosToken fixture.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.identity_provider \u003d uuid.uuid4().hex"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"        self.unscoped_id \u003d uuid.uuid4().hex"},{"line_number":36,"context_line":"        self.unscoped_body \u003d ks_fixture.V3Token()"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @property"},{"line_number":39,"context_line":"    def token_url(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_1829b937","line":36,"in_reply_to":"9af37de9_7b1dca0e","updated":"2015-06-04 10:04:06.000000000","message":"The V3Token is just a token body layout. You can add all this stuff to it, the kerberos token is no different to any other token in this sense","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    @mock.patch.object(requests_kerberos.HTTPKerberosAuth,"},{"line_number":46,"context_line":"                       \u0027generate_request_header\u0027)"},{"line_number":47,"context_line":"    def test_unscoped_federated_auth(self, request_header):"},{"line_number":48,"context_line":"        request_header.return_value \u003d \u0027Negotiate %s\u0027 % uuid.uuid4().hex"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        fail_resp \u003d {\u0027text\u0027: \u0027Fail\u0027,"},{"line_number":51,"context_line":"                     \u0027status_code\u0027: 401,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_5b20c6f7","line":48,"updated":"2015-05-11 00:13:41.000000000","message":"Where does this value (the Negotiate string) come from? Add a comment.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    @mock.patch.object(requests_kerberos.HTTPKerberosAuth,"},{"line_number":71,"context_line":"                       \u0027generate_request_header\u0027)"},{"line_number":72,"context_line":"    def test_project_scoped_federated_auth(self, request_header):"},{"line_number":73,"context_line":"        request_header.return_value \u003d \u0027Negotiate %s\u0027 % uuid.uuid4().hex"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        scoped_id \u003d uuid.uuid4().hex"},{"line_number":76,"context_line":"        scoped_body \u003d ks_fixture.V3Token()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_bbb452d1","line":73,"updated":"2015-05-11 00:13:41.000000000","message":"(suggestion) create a fixture for the patch and share with the other test.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        request_header.return_value \u003d \u0027Negotiate %s\u0027 % uuid.uuid4().hex"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"        scoped_id \u003d uuid.uuid4().hex"},{"line_number":76,"context_line":"        scoped_body \u003d ks_fixture.V3Token()"},{"line_number":77,"context_line":"        scoped_body.set_project_scope()"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        fail_resp \u003d {\u0027text\u0027: \u0027Fail\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_1bdd9e14","line":76,"updated":"2015-05-11 00:13:41.000000000","message":"shouldn\u0027t this be using V3FederationToken ?","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                    \u0027Content-Type\u0027: \u0027application/json\u0027})"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"        plugin \u003d v3.FederatedKerberos(auth_url\u003dself.TEST_V3_URL,"},{"line_number":96,"context_line":"                                      protocol\u003dself.protocol,"},{"line_number":97,"context_line":"                                      identity_provider\u003dself.identity_provider,"},{"line_number":98,"context_line":"                                      project_id\u003dscoped_body.project_id)"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_9b54ee54","line":96,"updated":"2015-05-11 00:13:41.000000000","message":"is there a default for the protocol? There should be a test for it.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        proj \u003d plugin.get_project_id(sess)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(scoped_id, tok)"},{"line_number":105,"context_line":"        self.assertEqual(scoped_body.project_id, proj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_7bf5ca81","line":105,"updated":"2015-05-11 00:13:41.000000000","message":"there should be a test that shows what happens when authentication fails, either on the initial unauthenticated request or the token request.\n\nAlso, is the server required to send the 401 WWW-Authenticate: Negotiate response? Why doesn\u0027t the client send the authenticate header to begin with to avoid an extra round-trip?","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        proj \u003d plugin.get_project_id(sess)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        self.assertEqual(scoped_id, tok)"},{"line_number":105,"context_line":"        self.assertEqual(scoped_body.project_id, proj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_cf8eb178","line":105,"in_reply_to":"9af37de9_7bf5ca81","updated":"2015-06-04 10:04:06.000000000","message":"Yes, it is. There is currently no way to indicate sending an authenticate header without having the server prompt it.\n\nThis is a restriction of the library.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"}],"keystoneclient_kerberos/v3.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        # NOTE(jamielennox): request_kwargs is passed as a kwarg however it is"},{"line_number":24,"context_line":"        # required and always present when called from keystoneclient."},{"line_number":25,"context_line":"        request_kwargs[\u0027requests_auth\u0027] \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":26,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"},{"line_number":27,"context_line":"        return \u0027kerberos\u0027, {}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_db98366d","line":26,"updated":"2015-05-11 00:13:41.000000000","message":"(unrelated) we hardcode mutual_authentication to OPTIONAL?","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        # NOTE(jamielennox): request_kwargs is passed as a kwarg however it is"},{"line_number":24,"context_line":"        # required and always present when called from keystoneclient."},{"line_number":25,"context_line":"        request_kwargs[\u0027requests_auth\u0027] \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":26,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"},{"line_number":27,"context_line":"        return \u0027kerberos\u0027, {}"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_8f7679a2","line":26,"in_reply_to":"9af37de9_db98366d","updated":"2015-06-04 10:04:06.000000000","message":"Done","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    _auth_method_class \u003d KerberosMethod"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_3baaa271","line":34,"updated":"2015-05-11 00:13:41.000000000","message":"Public interfaces need docstrings.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    _auth_method_class \u003d KerberosMethod"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_cf491162","line":34,"in_reply_to":"9af37de9_3baaa271","updated":"2015-06-04 10:04:06.000000000","message":"Done","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"44366ff31040e708e145f89caf43506f403de4d9","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":38,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3acd31a7_9dbee0d2","line":35,"updated":"2015-05-04 06:22:43.000000000","message":"Some explanation would be useful here, as the name may confuse others.\nOne can think that this is an implementation that does real federated authN (with use of SAML, OpenID Connect etc.) but the authentication with the IdP is done with use of Kerberos. \n\nThis also makes me think whether top modules should be named FederatedBaseAuth instead of MappedBaseAuth. Kerberos, I think, isn\u0027t truly federation protocol/method.....","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":38,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_4f6c01d0","line":35,"in_reply_to":"3acd31a7_9dbee0d2","updated":"2015-06-04 10:04:06.000000000","message":"Done","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":38,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        resp \u003d session.get(self.federated_token_url,"},{"line_number":41,"context_line":"                           requests_auth\u003drequests_auth,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9af37de9_bb9d725b","line":38,"updated":"2015-05-11 00:13:41.000000000","message":"we shouldn\u0027t hardcode mutual_authentication to OPTIONAL. Someone might want this to be required, or might even want to set it to DISABLED. We should use the same default as HTTPKerberosAuth does for security and allow it to be overridden.\n\nIf anything it needs to be documented that mutual_authentication is going to be OPTIONAL.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ff8d36384dc8b4bf88b7408e2b9a77be04f15629","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def get_unscoped_auth_ref(self, session, **kwargs):"},{"line_number":37,"context_line":"        requests_auth \u003d requests_kerberos.HTTPKerberosAuth("},{"line_number":38,"context_line":"            mutual_authentication\u003drequests_kerberos.OPTIONAL)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"        resp \u003d session.get(self.federated_token_url,"},{"line_number":41,"context_line":"                           requests_auth\u003drequests_auth,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5afe65bd_2f71c5a8","line":38,"in_reply_to":"9af37de9_bb9d725b","updated":"2015-06-04 10:04:06.000000000","message":"Done","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e7c1f4b4a446038c395e505b86fab6629264d3eb","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":34,"context_line":"    \"\"\"Authenticate using kerberos via the keystone federation mechanisms."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    This is not technically federation however federation is the term which"},{"line_number":37,"context_line":"    keystone uses for all mapped authentication. Use the OS-FEDERATION"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_dc275eb4","line":34,"updated":"2015-07-22 15:28:53.000000000","message":"(nit) Kerberos","commit_id":"4ab13450eed9adebb6405cf73f3210f2337d92d9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e7c1f4b4a446038c395e505b86fab6629264d3eb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":34,"context_line":"    \"\"\"Authenticate using kerberos via the keystone federation mechanisms."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    This is not technically federation however federation is the term which"},{"line_number":37,"context_line":"    keystone uses for all mapped authentication. Use the OS-FEDERATION"},{"line_number":38,"context_line":"    extension to gain an unscoped token and then use the standard keystone auth"},{"line_number":39,"context_line":"    process to scope that to any given project."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_41012905","line":36,"updated":"2015-07-22 15:28:53.000000000","message":"(nit) commas around \u0027however\u0027","commit_id":"4ab13450eed9adebb6405cf73f3210f2337d92d9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e7c1f4b4a446038c395e505b86fab6629264d3eb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    \"\"\"Authenticate using kerberos via the keystone federation mechanisms."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    This is not technically federation however federation is the term which"},{"line_number":37,"context_line":"    keystone uses for all mapped authentication. Use the OS-FEDERATION"},{"line_number":38,"context_line":"    extension to gain an unscoped token and then use the standard keystone auth"},{"line_number":39,"context_line":"    process to scope that to any given project."},{"line_number":40,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a50d1a3_3c2f6289","line":37,"updated":"2015-07-22 15:28:53.000000000","message":"(nit) Last sentence sounds strange, like you are commanding me to do something. Maybe s/Use/Using/ ?","commit_id":"4ab13450eed9adebb6405cf73f3210f2337d92d9"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"748cbeb2b2a92067d2976560a7984a7b38e7252d","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"class FederatedKerberos(v3.FederatedBaseAuth):"},{"line_number":34,"context_line":"    \"\"\"Authenticate using Kerberos via the keystone federation mechanisms."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    This is not technically federation. However, federation is the term which"},{"line_number":37,"context_line":"    keystone uses for all mapped authentication. This uses the OS-FEDERATION"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a4dcd0f_1755f01b","line":34,"updated":"2015-08-05 01:03:10.000000000","message":"nit: mechanism","commit_id":"1e6852f0e10fad5bb94e8cf26a1b9a7d20d6a3aa"}],"setup.cfg":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"736d1b3bc3124d71c2b7732d89518c7c8cdcde63","unresolved":false,"context_lines":[{"line_number":24,"context_line":"[entry_points]"},{"line_number":25,"context_line":"keystoneclient.auth.plugin \u003d"},{"line_number":26,"context_line":"    v3kerberos \u003d keystoneclient_kerberos.v3:Kerberos"},{"line_number":27,"context_line":"    v3fedkerb \u003d keystoneclient_kerberos.v3:FederatedKerberos"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"[wheel]"},{"line_number":30,"context_line":"universal \u003d 1"}],"source_content_type":"text/x-ttcn-cfg","patch_set":4,"id":"9af37de9_3bef42b2","line":27,"updated":"2015-05-11 00:13:41.000000000","message":"we need to document the entrypoint somewhere.","commit_id":"82f5b86ba60b7494a8d6423598129df98a79a6b2"}]}
