)]}'
{"keystone/contrib/federation/controllers.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"8a693a11fb8e57c8e6d59b7d0326a51b2254072b","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        response \u003d generator.samlize_token(issuer, recipient, subject, roles,"},{"line_number":285,"context_line":"                                           project)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        return wsgi.render_response(body\u003dstr(response), status\u003d(\u0027200\u0027, \u0027OK\u0027),"},{"line_number":288,"context_line":"                                    headers\u003d[(\u0027Content-Type\u0027, \u0027text/xml\u0027)])"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"1abeadc6_66caaa6f","line":287,"updated":"2014-08-20 08:39:44.000000000","message":"(NIT): I\u0027d use here response.to_string() to indicate that is a non-standard object that needs to be serialized.","commit_id":"9229181b1efcff111adf57ccc66b2696a4087d83"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b8b77621ae9bd2ec57b84a272c05f8a12a67865","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        return self.authenticate_for_token(context, auth\u003dauth)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @validation.validated(schema.saml_create, \u0027auth\u0027)"},{"line_number":258,"context_line":"    def create_saml_assertion(self, context, auth):"},{"line_number":259,"context_line":"        \"\"\"Exchange a scoped token for a SAML assertion."},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_50933ba2","line":257,"updated":"2014-08-29 14:28:40.000000000","message":"Is this tested? Some tests should be added to check to make sure the schema validates or invalidates requests.","commit_id":"a81f1ffa3cc00fdf9239378f8b5390d974a83e2a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"65f07f13e4b4841c19857e6f092eb90361915670","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        return self.authenticate_for_token(context, auth\u003dauth)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @validation.validated(schema.saml_create, \u0027auth\u0027)"},{"line_number":258,"context_line":"    def create_saml_assertion(self, context, auth):"},{"line_number":259,"context_line":"        \"\"\"Exchange a scoped token for a SAML assertion."},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_023ecbb7","line":257,"in_reply_to":"1abeadc6_50933ba2","updated":"2014-08-29 22:50:47.000000000","message":"I\u0027ll add some tests, should be easy enough.","commit_id":"a81f1ffa3cc00fdf9239378f8b5390d974a83e2a"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"2f2e452d561b04b191d1f5c104e27460bcbdfc1a","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"        return self.authenticate_for_token(context, auth\u003dauth)"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"    @validation.validated(schema.saml_create, \u0027auth\u0027)"},{"line_number":258,"context_line":"    def create_saml_assertion(self, context, auth):"},{"line_number":259,"context_line":"        \"\"\"Exchange a scoped token for a SAML assertion."},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"fa98f980_c3174650","line":257,"updated":"2014-09-01 01:39:10.000000000","message":"Nice! even using using Lance\u0027s schema validation!","commit_id":"1a47a1be4f4d04132db7e5e81d81e8c8cfad98d9"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"2f2e452d561b04b191d1f5c104e27460bcbdfc1a","unresolved":false,"context_lines":[{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        token_id \u003d auth[\u0027identity\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":272,"context_line":"        token_data \u003d self.token_provider_api.validate_token(token_id)"},{"line_number":273,"context_line":"        token_ref \u003d token_model.KeystoneToken(token_id, token_data)"},{"line_number":274,"context_line":"        subject \u003d token_ref.user_name"},{"line_number":275,"context_line":"        roles \u003d token_ref.role_names"},{"line_number":276,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"fa98f980_2381f28f","line":273,"updated":"2014-09-01 01:39:10.000000000","message":"Yay!!! Using token_model.KeystoneToken!!","commit_id":"1a47a1be4f4d04132db7e5e81d81e8c8cfad98d9"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"89d1e2c8ed83061218b399c9491cf32f6bc79d26","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return MappingController.wrap_member(context, mapping_ref)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027token_provider_api\u0027)"},{"line_number":236,"context_line":"class Auth(auth_controllers.Auth):"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def federated_authentication(self, context, identity_provider, protocol):"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_7aa63bc3","line":235,"updated":"2014-09-01 06:11:16.000000000","message":"Is this actually needed? Without an __init__ I don\u0027t think the injection can happen  and the tests run fine without it.","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4593bde17df11d89322f7e435326b9e9691566d5","unresolved":false,"context_lines":[{"line_number":232,"context_line":"        return MappingController.wrap_member(context, mapping_ref)"},{"line_number":233,"context_line":""},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"@dependency.requires(\u0027catalog_api\u0027, \u0027token_provider_api\u0027)"},{"line_number":236,"context_line":"class Auth(auth_controllers.Auth):"},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"    def federated_authentication(self, context, identity_provider, protocol):"}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_f81bdbc7","line":235,"in_reply_to":"fa98f980_7aa63bc3","updated":"2014-09-02 03:40:24.000000000","message":"they are not, thanks for catching that, it\u0027s because auth_controllers.Auth already required them.","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"}],"keystone/contrib/federation/routers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"79ddf6c64cf498711d270d941c8f3f7d0b528b52","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # Auth operations"},{"line_number":174,"context_line":"        self._add_resource("},{"line_number":175,"context_line":"            mapper, auth_controller,"},{"line_number":176,"context_line":"            path\u003d\u0027/auth\u0027 + self._construct_url(\u0027saml2\u0027),"},{"line_number":177,"context_line":"            post_action\u003d\u0027create_saml_assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_525a5484","line":175,"updated":"2014-08-30 17:17:45.000000000","message":"this needs to have JSON Home info.","commit_id":"04609281a33464a59bfce81ec23d3e3aac9f6063"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fcc3074774a8780b4afd8e6882ceb7ef5dbbf6a0","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # Auth operations"},{"line_number":174,"context_line":"        self._add_resource("},{"line_number":175,"context_line":"            mapper, auth_controller,"},{"line_number":176,"context_line":"            path\u003d\u0027/auth\u0027 + self._construct_url(\u0027saml2\u0027),"},{"line_number":177,"context_line":"            post_action\u003d\u0027create_saml_assertion\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"fa98f980_210578c2","line":175,"in_reply_to":"fa98f980_525a5484","updated":"2014-08-31 05:44:25.000000000","message":"Done","commit_id":"04609281a33464a59bfce81ec23d3e3aac9f6063"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"2f2e452d561b04b191d1f5c104e27460bcbdfc1a","unresolved":false,"context_lines":[{"line_number":175,"context_line":"            mapper, auth_controller,"},{"line_number":176,"context_line":"            path\u003d\u0027/auth\u0027 + self._construct_url(\u0027saml2\u0027),"},{"line_number":177,"context_line":"            post_action\u003d\u0027create_saml_assertion\u0027,"},{"line_number":178,"context_line":"            rel\u003dbuild_resource_relation(resource_name\u003d\u0027saml2\u0027))"}],"source_content_type":"text/x-python","patch_set":28,"id":"fa98f980_a3b6c288","line":178,"updated":"2014-09-01 01:39:10.000000000","message":"Well I\u0027m glad someone was able to use functools.partial successfully :-)","commit_id":"1a47a1be4f4d04132db7e5e81d81e8c8cfad98d9"}],"keystone/contrib/federation/schema.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b8b77621ae9bd2ec57b84a272c05f8a12a67865","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027properties\u0027: {"},{"line_number":17,"context_line":"        \u0027identity\u0027: {"},{"line_number":18,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":19,"context_line":"            \u0027properties\u0027: {"},{"line_number":20,"context_line":"                \u0027token\u0027: {"},{"line_number":21,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":22,"context_line":"                    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_30b15f47","line":19,"updated":"2014-08-29 14:28:40.000000000","message":"suggest pulling these properties out into a _saml_properties dictionary and sharing them on line 32 as well.","commit_id":"a81f1ffa3cc00fdf9239378f8b5390d974a83e2a"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"65f07f13e4b4841c19857e6f092eb90361915670","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    \u0027properties\u0027: {"},{"line_number":17,"context_line":"        \u0027identity\u0027: {"},{"line_number":18,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":19,"context_line":"            \u0027properties\u0027: {"},{"line_number":20,"context_line":"                \u0027token\u0027: {"},{"line_number":21,"context_line":"                    \u0027type\u0027: \u0027object\u0027,"},{"line_number":22,"context_line":"                    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":18,"id":"1abeadc6_c2585333","line":19,"in_reply_to":"1abeadc6_30b15f47","updated":"2014-08-29 22:50:47.000000000","message":"i can\u0027t do it at this level, since it\u0027s token and region underneath, but I do it at the level below.","commit_id":"a81f1ffa3cc00fdf9239378f8b5390d974a83e2a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d975a96f75372dcd17bfeccefea28cff80df482f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"basic_property_id \u003d {"},{"line_number":14,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":15,"context_line":"    \u0027properties\u0027: {"},{"line_number":16,"context_line":"        \u0027id\u0027: {"}],"source_content_type":"text/x-python","patch_set":20,"id":"1abeadc6_227f47ac","line":13,"updated":"2014-08-29 22:59:00.000000000","message":"nit: could make this private knowing that it shouldn\u0027t be used outside of this module.","commit_id":"6fbf2c301f9d17e6b15be8485279e1850b6742b9"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1dd5e7c44eaa9df57bd2fc002cc597c15b0e2d50","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        resp \u003d self.v3_authenticate_token(auth_data)"},{"line_number":1658,"context_line":"        token_id \u003d resp.headers.get(\u0027X-Subject-Token\u0027)"},{"line_number":1659,"context_line":"        return token_id"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"    def test_generate_saml_route(self):"},{"line_number":1662,"context_line":"        self._load_federation_config_options()"},{"line_number":1663,"context_line":"        region_id \u003d self._create_region_with_url()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_37b580ee","line":1660,"updated":"2014-08-14 21:42:51.000000000","message":"How about adding a test that send invalid data? I think this would rather test schema validity, but I would love to make sure server side properly complains about bad request structure.\n\nAlso some variations for using a region with a valid url attribute could be useful.","commit_id":"4b8fa73d9276fdd3bf340136eca05642bc08b012"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2b3e55675674e90886d7bd98d9481b4a28a96b79","unresolved":false,"context_lines":[{"line_number":1657,"context_line":"        resp \u003d self.v3_authenticate_token(auth_data)"},{"line_number":1658,"context_line":"        token_id \u003d resp.headers.get(\u0027X-Subject-Token\u0027)"},{"line_number":1659,"context_line":"        return token_id"},{"line_number":1660,"context_line":""},{"line_number":1661,"context_line":"    def test_generate_saml_route(self):"},{"line_number":1662,"context_line":"        self._load_federation_config_options()"},{"line_number":1663,"context_line":"        region_id \u003d self._create_region_with_url()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_c51d6fbf","line":1660,"in_reply_to":"7ac7a964_37b580ee","updated":"2014-08-15 00:15:34.000000000","message":"Agree with your first point, I\u0027ll add tests. \n\nI don\u0027t understand your second point, am I not using a valid region url?","commit_id":"4b8fa73d9276fdd3bf340136eca05642bc08b012"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"1dd5e7c44eaa9df57bd2fc002cc597c15b0e2d50","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"        self.post(self.SAML_GENERATION_ROUTE, body\u003dbody,"},{"line_number":1667,"context_line":"                  response_content_type\u003d\u0027text/xml\u0027,"},{"line_number":1668,"context_line":"                  expected_status\u003d200)"},{"line_number":1669,"context_line":"        # assert some stuff about the response"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_b76c309e","line":1669,"updated":"2014-08-14 21:42:51.000000000","message":"++","commit_id":"4b8fa73d9276fdd3bf340136eca05642bc08b012"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2b3e55675674e90886d7bd98d9481b4a28a96b79","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"        self.post(self.SAML_GENERATION_ROUTE, body\u003dbody,"},{"line_number":1667,"context_line":"                  response_content_type\u003d\u0027text/xml\u0027,"},{"line_number":1668,"context_line":"                  expected_status\u003d200)"},{"line_number":1669,"context_line":"        # assert some stuff about the response"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ac7a964_e5798bfd","line":1669,"in_reply_to":"7ac7a964_b76c309e","updated":"2014-08-15 00:15:34.000000000","message":"ha, yeah... this was a PITA since it\u0027s all XML.","commit_id":"4b8fa73d9276fdd3bf340136eca05642bc08b012"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"53a1d2e3738333a175e1f82fa18185dc1a26feca","unresolved":false,"context_lines":[{"line_number":1720,"context_line":"        assertion \u003d response[2]"},{"line_number":1721,"context_line":""},{"line_number":1722,"context_line":"        self.assertEqual(response.get(\u0027Destination\u0027), self.RECIPIENT)"},{"line_number":1723,"context_line":"        self.assertEqual(issuer.text, \u0027http://localhost\u0027)"},{"line_number":1724,"context_line":""},{"line_number":1725,"context_line":"        # NOTE(stevemar): We should test this against expected values,"},{"line_number":1726,"context_line":"        # but the self.xyz attribute names are uuids, and we mock out"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_84c0992b","line":1723,"updated":"2014-08-20 14:43:49.000000000","message":"switch the arguments.","commit_id":"bd87753fb557f3af8491ff6ff6a5c06d25402c38"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"89d1e2c8ed83061218b399c9491cf32f6bc79d26","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"    def test_missing_region(self):"},{"line_number":1876,"context_line":"        \"\"\"Test that missing the scope in request body raises an exception."},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        Raises exception.RegionNotFound() - error code 404"},{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":"        \"\"\""},{"line_number":1881,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_3a8d937c","line":1878,"updated":"2014-09-01 06:11:16.000000000","message":"Should this be a 404 or a 400 validation error?","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4593bde17df11d89322f7e435326b9e9691566d5","unresolved":false,"context_lines":[{"line_number":1875,"context_line":"    def test_missing_region(self):"},{"line_number":1876,"context_line":"        \"\"\"Test that missing the scope in request body raises an exception."},{"line_number":1877,"context_line":""},{"line_number":1878,"context_line":"        Raises exception.RegionNotFound() - error code 404"},{"line_number":1879,"context_line":""},{"line_number":1880,"context_line":"        \"\"\""},{"line_number":1881,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_3ba55db5","line":1878,"in_reply_to":"fa98f980_3a8d937c","updated":"2014-09-02 03:40:24.000000000","message":"I think these two are 404\u0027s as I liken it to the current behaviour seen when creating a project/user when the domain name is garbage:\n\n  def test_domain_not_found(self):\n    ref \u003d self.new_user_ref(domain_id\u003d\u0027adadsadasd\u0027)\n    self.post(\u0027/users\u0027, body\u003d{\u0027user\u0027: ref}, expected_status\u003d404)","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"89d1e2c8ed83061218b399c9491cf32f6bc79d26","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"    def test_missing_token(self):"},{"line_number":1888,"context_line":"        \"\"\"Test that missing the token in request body raises an exception."},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"        Raises exception.TokenNotFound() - error code 404"},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        \"\"\""},{"line_number":1893,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_baf8a3e6","line":1890,"updated":"2014-09-01 06:11:16.000000000","message":"Same thing here","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"4593bde17df11d89322f7e435326b9e9691566d5","unresolved":false,"context_lines":[{"line_number":1887,"context_line":"    def test_missing_token(self):"},{"line_number":1888,"context_line":"        \"\"\"Test that missing the token in request body raises an exception."},{"line_number":1889,"context_line":""},{"line_number":1890,"context_line":"        Raises exception.TokenNotFound() - error code 404"},{"line_number":1891,"context_line":""},{"line_number":1892,"context_line":"        \"\"\""},{"line_number":1893,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"fa98f980_7bafe594","line":1890,"in_reply_to":"fa98f980_baf8a3e6","updated":"2014-09-02 03:40:24.000000000","message":"same","commit_id":"ad15e610d1f98b9f0e66318d3556432dba45b1dc"}]}
