)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1dec7123be63c44b7f58570a0301c1867922f479","unresolved":false,"context_lines":[{"line_number":10,"context_line":"SAML assertion in an ECP envelope."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ieffeb6cf34b225f0704321fa64fe6dfc227add8e"},{"line_number":13,"context_line":"Depends-On: If2ed5004c092b9553765a354deb9a5fb53d95aa8"},{"line_number":14,"context_line":"Closes-Bug: 1426128"},{"line_number":15,"context_line":"bp: ecp-wrapped-saml-assertions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1a6ced46_803930f4","line":13,"updated":"2015-03-26 02:15:56.000000000","message":"it also depends on https://review.openstack.org/#/c/167621","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"edf1e13ec7eb329fb02bc9d95d722165687ae9d9","unresolved":false,"context_lines":[{"line_number":10,"context_line":"SAML assertion in an ECP envelope."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Ieffeb6cf34b225f0704321fa64fe6dfc227add8e"},{"line_number":13,"context_line":"Depends-On: If2ed5004c092b9553765a354deb9a5fb53d95aa8"},{"line_number":14,"context_line":"Closes-Bug: 1426128"},{"line_number":15,"context_line":"bp: ecp-wrapped-saml-assertions"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"fa963961_492c72ab","line":13,"in_reply_to":"1a6ced46_803930f4","updated":"2015-03-26 16:09:19.000000000","message":"++","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"}],"keystone/contrib/federation/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5cde5adfc289a722334c993b198bbd881eb958c2","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        return webob.Response(body\u003dbody, status\u003d\u0027200\u0027,"},{"line_number":309,"context_line":"                              headerlist\u003dheaders)"},{"line_number":310,"context_line":""},{"line_number":311,"context_line":"    @validation.validated(schema.saml_create, \u0027auth\u0027)"},{"line_number":312,"context_line":"    def _create_base_saml_assertion(self, context, auth):"},{"line_number":313,"context_line":"        issuer \u003d CONF.saml.idp_entity_id"},{"line_number":314,"context_line":"        sp_id \u003d auth[\u0027scope\u0027][\u0027service_provider\u0027][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_1331f4a1","line":311,"updated":"2015-03-20 03:03:44.000000000","message":"i am not sure if this decorator should be used once on the private function, or on both public functions","commit_id":"ab1ae047d1f01110da930addd89a22ac494b1afc"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"1b3e2a5f7dea238a11c0903448551668a81eb635","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        (saml_assertion, service_provider) \u003d t"},{"line_number":365,"context_line":"        sp_url \u003d service_provider.get(\u0027sp_url\u0027)"},{"line_number":366,"context_line":"        auth_url \u003d service_provider.get(\u0027auth_url\u0027)"},{"line_number":367,"context_line":"        relay_state_prefix \u003d service_provider.get(\u0027relay_state_prefix\u0027)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        generator \u003d keystone_idp.ECPGenerator()"},{"line_number":370,"context_line":"        ecp_assertion \u003d generator.generate_ecp(saml_assertion,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_d36e7c63","line":367,"updated":"2015-03-20 03:11:30.000000000","message":"should we default this to \u0027ss:mem:\u0027 as our doc recommended relaystate to \u0027ss:mem\u0027?","commit_id":"ab1ae047d1f01110da930addd89a22ac494b1afc"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"87b8a61a89bcc2b74d58017d2b24190462473ee8","unresolved":false,"context_lines":[{"line_number":364,"context_line":"        (saml_assertion, service_provider) \u003d t"},{"line_number":365,"context_line":"        sp_url \u003d service_provider.get(\u0027sp_url\u0027)"},{"line_number":366,"context_line":"        auth_url \u003d service_provider.get(\u0027auth_url\u0027)"},{"line_number":367,"context_line":"        relay_state_prefix \u003d service_provider.get(\u0027relay_state_prefix\u0027)"},{"line_number":368,"context_line":""},{"line_number":369,"context_line":"        generator \u003d keystone_idp.ECPGenerator()"},{"line_number":370,"context_line":"        ecp_assertion \u003d generator.generate_ecp(saml_assertion,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_d36f5c26","line":367,"in_reply_to":"9a80dd14_d36e7c63","updated":"2015-03-20 03:19:09.000000000","message":"please ignore this comment","commit_id":"ab1ae047d1f01110da930addd89a22ac494b1afc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"21be4c64a5853ed6fae43952d76df1d0edc339e0","unresolved":false,"context_lines":[{"line_number":379,"context_line":"                                             (\u0027X-sp-url\u0027,"},{"line_number":380,"context_line":"                                              six.binary_type(sp_url)),"},{"line_number":381,"context_line":"                                             (\u0027X-auth-url\u0027,"},{"line_number":382,"context_line":"                                              six.binary_type(auth_url))])"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":""},{"line_number":385,"context_line":"@dependency.requires(\u0027assignment_api\u0027, \u0027resource_api\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6ced46_8dec25f5","line":382,"updated":"2015-03-25 13:38:43.000000000","message":"suggest to extract the headers to a private method in a follow up patch (it is used here and in the create_saml_assertion() method)","commit_id":"68f3b5a8d1dbb9e27ee2b90fd7e776b2912a221a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"20c77fd46ef12dcc9483fbff043f1b0bfd6bab1c","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def create_saml_assertion(self, context, auth):"},{"line_number":339,"context_line":"        \"\"\"Exchange a scoped token for a SAML assertion."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        :param auth: Dictionary that contains a token and service provider id"},{"line_number":342,"context_line":"        :returns: SAML Assertion based on properties from the token"},{"line_number":343,"context_line":"        \"\"\""},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_b3100450","line":341,"updated":"2015-03-26 19:13:40.000000000","message":"ID*","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9026be54be013dbfd60acdef6258b9e7e83e55b1","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    def create_saml_assertion(self, context, auth):"},{"line_number":339,"context_line":"        \"\"\"Exchange a scoped token for a SAML assertion."},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"        :param auth: Dictionary that contains a token and service provider id"},{"line_number":342,"context_line":"        :returns: SAML Assertion based on properties from the token"},{"line_number":343,"context_line":"        \"\"\""},{"line_number":344,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_01c86854","line":341,"in_reply_to":"fa963961_b3100450","updated":"2015-03-27 07:40:49.000000000","message":"Done","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"20c77fd46ef12dcc9483fbff043f1b0bfd6bab1c","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    def create_ecp_assertion(self, context, auth):"},{"line_number":360,"context_line":"        \"\"\"Exchange a scoped token for an ECP assertion."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        :param auth: Dictionary that contains a token and service provider id"},{"line_number":363,"context_line":"        :returns: ECP Assertion based on properties from the token"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_731a7c70","line":362,"updated":"2015-03-26 19:13:40.000000000","message":"ID*","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9026be54be013dbfd60acdef6258b9e7e83e55b1","unresolved":false,"context_lines":[{"line_number":359,"context_line":"    def create_ecp_assertion(self, context, auth):"},{"line_number":360,"context_line":"        \"\"\"Exchange a scoped token for an ECP assertion."},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        :param auth: Dictionary that contains a token and service provider id"},{"line_number":363,"context_line":"        :returns: ECP Assertion based on properties from the token"},{"line_number":364,"context_line":"        \"\"\""},{"line_number":365,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fa963961_81bb58c4","line":362,"in_reply_to":"fa963961_731a7c70","updated":"2015-03-27 07:40:49.000000000","message":"Done","commit_id":"6bc8281fcd8aa38b983e6759cee8bcae3afd575c"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3f000028eb1e1decd2652d6e69062cd9763e0169","unresolved":false,"context_lines":[{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        return wsgi.render_response(body\u003dresponse.to_string(),"},{"line_number":351,"context_line":"                                    status\u003d(\u0027200\u0027, \u0027OK\u0027),"},{"line_number":352,"context_line":"                                    headers\u003d[(\u0027Content-Type\u0027, \u0027text/xml\u0027),"},{"line_number":353,"context_line":"                                             (\u0027X-sp-url\u0027,"},{"line_number":354,"context_line":"                                              six.binary_type(sp_url)),"},{"line_number":355,"context_line":"                                             (\u0027X-auth-url\u0027,"}],"source_content_type":"text/x-python","patch_set":17,"id":"fa963961_2f4fc7be","line":352,"updated":"2015-03-27 15:46:21.000000000","message":"lines 352 - 356 and 378 - 382 can be extracted to a private method","commit_id":"7220fa8de8ca534bad6d3b171c85c89e84523008"}],"keystone/contrib/federation/idp.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ba41e186d7f789594ef1c75496ce21b012c87028","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        return True"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"class ECPGenerator(object):"},{"line_number":565,"context_line":"    \"\"\"A class for generating an ECP assertion.\"\"\""},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def generate_ecp(self, saml_assertion):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_8964acb9","line":564,"updated":"2015-03-10 12:28:25.000000000","message":"all the methods could be @staticmethod or at least @classmethod.","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f234d4b4035b06b378a40aa4295f60765b601d09","unresolved":false,"context_lines":[{"line_number":561,"context_line":"        return True"},{"line_number":562,"context_line":""},{"line_number":563,"context_line":""},{"line_number":564,"context_line":"class ECPGenerator(object):"},{"line_number":565,"context_line":"    \"\"\"A class for generating an ECP assertion.\"\"\""},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"    def generate_ecp(self, saml_assertion):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_d9f2849a","line":564,"in_reply_to":"9a80dd14_8964acb9","updated":"2015-03-12 05:18:31.000000000","message":"OK, i used it for generate_ecp, but do you think it\u0027s necessary for the others, they are already private?","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"ba41e186d7f789594ef1c75496ce21b012c87028","unresolved":false,"context_lines":[{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def _create_header(self):"},{"line_number":580,"context_line":"        relay_state \u003d ecp.RelayState(actor\u003dclient_base.ACTOR,"},{"line_number":581,"context_line":"                                     must_understand\u003d\"1\","},{"line_number":582,"context_line":"                                     text\u003duuid.uuid4().hex)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        headers \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_e9c60899","line":581,"updated":"2015-03-10 12:28:25.000000000","message":"nit: change to \u00271\u0027","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f234d4b4035b06b378a40aa4295f60765b601d09","unresolved":false,"context_lines":[{"line_number":578,"context_line":""},{"line_number":579,"context_line":"    def _create_header(self):"},{"line_number":580,"context_line":"        relay_state \u003d ecp.RelayState(actor\u003dclient_base.ACTOR,"},{"line_number":581,"context_line":"                                     must_understand\u003d\"1\","},{"line_number":582,"context_line":"                                     text\u003duuid.uuid4().hex)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        headers \u003d []"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_39bc806c","line":581,"in_reply_to":"9a80dd14_e9c60899","updated":"2015-03-12 05:18:31.000000000","message":"Done","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5acdb1c7a4c700f7d844eb719d578ecf37eb3461","unresolved":false,"context_lines":[{"line_number":575,"context_line":"    def _create_header(self):"},{"line_number":576,"context_line":"        relay_state \u003d ecp.RelayState(actor\u003dclient_base.ACTOR,"},{"line_number":577,"context_line":"                                     must_understand\u003d\u00271\u0027,"},{"line_number":578,"context_line":"                                     text\u003duuid.uuid4().hex)"},{"line_number":579,"context_line":"        header \u003d soapenv.Header()"},{"line_number":580,"context_line":"        header.extension_elements \u003d ("},{"line_number":581,"context_line":"            [saml2.element_to_extension_element(relay_state)])"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_f39f054e","line":578,"updated":"2015-03-19 23:37:51.000000000","message":"\u0027text\u0027 needs to have a configurable prefix as it is depended on how the Session is configured at the SP side.","commit_id":"761670353a674909954f235521b2411e1fc0026d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0dbd044d479937399a19cfc0efb8a846fdfbf56e","unresolved":false,"context_lines":[{"line_number":573,"context_line":"        return envelope"},{"line_number":574,"context_line":""},{"line_number":575,"context_line":"    def _create_header(self, relay_state_prefix):"},{"line_number":576,"context_line":"        relay_state_text \u003d relay_state_prefix + \u0027:\u0027 + uuid.uuid4().hex"},{"line_number":577,"context_line":"        relay_state \u003d ecp.RelayState(actor\u003dclient_base.ACTOR,"},{"line_number":578,"context_line":"                                     must_understand\u003d\u00271\u0027,"},{"line_number":579,"context_line":"                                     text\u003drelay_state_text)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_53360c52","line":576,"updated":"2015-03-20 03:16:00.000000000","message":"sorry I think this should be \n\nrelay_state_text \u003d relay_state_prefix + uuid.uuid4().hex\n\nthe colon should be part of the prefix itself.","commit_id":"ab1ae047d1f01110da930addd89a22ac494b1afc"}],"keystone/contrib/federation/routers.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b988d05f31c01cb184a8be3febade24c93cfb166","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            protocols/$protocol/auth"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        POST /auth/OS-FEDERATION/saml2"},{"line_number":77,"context_line":"        POST /auth/OS-FEDERATION/ecp"},{"line_number":78,"context_line":"        GET /OS-FEDERATION/saml2/metadata"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        GET /auth/OS-FEDERATION/websso/{protocol_id}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_33b32a4e","line":77,"updated":"2015-03-10 09:32:54.000000000","message":"I find strange to have a SAML profile to be at the \"same level\" as the protocol itself.\n\nI\u0027d rather have another call where we pass the SAML assertion and it is wrapped in a soap envelope.","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"35d1306f97c1f14f4c8f71530a679487f494aca9","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            protocols/$protocol/auth"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        POST /auth/OS-FEDERATION/saml2"},{"line_number":77,"context_line":"        POST /auth/OS-FEDERATION/ecp"},{"line_number":78,"context_line":"        GET /OS-FEDERATION/saml2/metadata"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        GET /auth/OS-FEDERATION/websso/{protocol_id}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_5772d37c","line":77,"in_reply_to":"9a80dd14_2f60b234","updated":"2015-03-12 11:10:13.000000000","message":"params for POST are not REST-friendly... But I agree with Steve\u0027s suggestion to be /saml2/ecp","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f234d4b4035b06b378a40aa4295f60765b601d09","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            protocols/$protocol/auth"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        POST /auth/OS-FEDERATION/saml2"},{"line_number":77,"context_line":"        POST /auth/OS-FEDERATION/ecp"},{"line_number":78,"context_line":"        GET /OS-FEDERATION/saml2/metadata"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        GET /auth/OS-FEDERATION/websso/{protocol_id}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_394ac083","line":77,"in_reply_to":"9a80dd14_33b32a4e","updated":"2015-03-12 05:18:31.000000000","message":"i agree with your first point, do you have a suggestion? how about /saml2/ecp?\n\ni don\u0027t agree with your second point, sending a huge piece of xml in the request scares me, seems like it\u0027ll be error prone","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"5939b9336349066fbfd500c6e159ffe3c8138c46","unresolved":false,"context_lines":[{"line_number":74,"context_line":"            protocols/$protocol/auth"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        POST /auth/OS-FEDERATION/saml2"},{"line_number":77,"context_line":"        POST /auth/OS-FEDERATION/ecp"},{"line_number":78,"context_line":"        GET /OS-FEDERATION/saml2/metadata"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        GET /auth/OS-FEDERATION/websso/{protocol_id}"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_2f60b234","line":77,"in_reply_to":"9a80dd14_394ac083","updated":"2015-03-12 06:34:03.000000000","message":"Can\u0027t we just have a query param for /auth/OS-FEDERATION/saml2 to return ecb","commit_id":"ca7be0bfe4503a8f33c7be32a17f400a8fae01ca"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"4fd05c857e7c2c05337af7253a7b7d75bb41065c","unresolved":false,"context_lines":[{"line_number":2597,"context_line":"        env_response \u003d etree.fromstring(http_response.result)"},{"line_number":2598,"context_line":"        header \u003d env_response[0]"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"        # Verify the replay state is a string"},{"line_number":2601,"context_line":"        self.assertIsInstance(header[0].text, str)"},{"line_number":2602,"context_line":""},{"line_number":2603,"context_line":"        # Verify that the content in the body matches the expected assertion"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_b4e22d2d","line":2600,"updated":"2015-03-12 10:43:36.000000000","message":"what else can it possiby be?","commit_id":"0fea1e559fa4fc1844de348489ef28cfb3e0ce00"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"c88b82936abaa7d03b6d8e2535978a6b9cf108f7","unresolved":false,"context_lines":[{"line_number":2597,"context_line":"        env_response \u003d etree.fromstring(http_response.result)"},{"line_number":2598,"context_line":"        header \u003d env_response[0]"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"        # Verify the replay state is a string"},{"line_number":2601,"context_line":"        self.assertIsInstance(header[0].text, str)"},{"line_number":2602,"context_line":""},{"line_number":2603,"context_line":"        # Verify that the content in the body matches the expected assertion"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3db0d98a","line":2600,"in_reply_to":"9a80dd14_7990a64e","updated":"2015-03-12 20:57:50.000000000","message":"well, what else can theoretically be here except None and str? There is test_generate_saml_route, where we use don\u0027t do stuff like this. I think that test_generate_ecp_route should look more or less similar to saml test.\n\nI don\u0027t want the comment to be removed, I want to have only useful assertions (or understand why this one is useful).","commit_id":"0fea1e559fa4fc1844de348489ef28cfb3e0ce00"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6de327f142aac0c44ad4491a70163bbbafbb16ba","unresolved":false,"context_lines":[{"line_number":2597,"context_line":"        env_response \u003d etree.fromstring(http_response.result)"},{"line_number":2598,"context_line":"        header \u003d env_response[0]"},{"line_number":2599,"context_line":""},{"line_number":2600,"context_line":"        # Verify the replay state is a string"},{"line_number":2601,"context_line":"        self.assertIsInstance(header[0].text, str)"},{"line_number":2602,"context_line":""},{"line_number":2603,"context_line":"        # Verify that the content in the body matches the expected assertion"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_7990a64e","line":2600,"in_reply_to":"9a80dd14_b4e22d2d","updated":"2015-03-12 13:32:47.000000000","message":"the reasoning for the assertion is that it\u0027s slightly better than checking isNotNone().\n\ndo you want the comment removed?","commit_id":"0fea1e559fa4fc1844de348489ef28cfb3e0ce00"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"5cde5adfc289a722334c993b198bbd881eb958c2","unresolved":false,"context_lines":[{"line_number":2547,"context_line":"        self.signed_assertion \u003d saml2.create_class_from_xml_string("},{"line_number":2548,"context_line":"            saml.Assertion, _load_xml(\u0027signed_saml2_assertion.xml\u0027))"},{"line_number":2549,"context_line":"        self.sp \u003d self.sp_ref()"},{"line_number":2550,"context_line":"        url \u003d \u0027/OS-FEDERATION/service_providers/\u0027 + self.SERVICE_PROVDIER_ID"},{"line_number":2551,"context_line":"        self.put(url, body\u003d{\u0027service_provider\u0027: self.sp},"},{"line_number":2552,"context_line":"                 expected_status\u003d201)"},{"line_number":2553,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_13d81452","line":2550,"updated":"2015-03-20 03:03:44.000000000","message":"did this because the manager layer defaults the relay_state_prefix, not the controller.","commit_id":"ab1ae047d1f01110da930addd89a22ac494b1afc"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"44a07bd2ee9b90f2974bc4eae0824bcce6c6e50a","unresolved":false,"context_lines":[{"line_number":2847,"context_line":"    def test_generate_ecp_route(self):"},{"line_number":2848,"context_line":"        \"\"\"Test that the ECP generation endpoint produces XML."},{"line_number":2849,"context_line":""},{"line_number":2850,"context_line":"        The ECP endpoint /v3/auth/OS-FEDERATION/ecp should take the same input"},{"line_number":2851,"context_line":"        as the SAML generation endpoint (scoped token ID + Service Provider"},{"line_number":2852,"context_line":"        ID)."},{"line_number":2853,"context_line":"        The controller should return a SAML assertion that is wrapped in a"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a80dd14_eb0c57ee","line":2850,"updated":"2015-03-20 13:26:38.000000000","message":"nit: /auth/OS-FEDERATION/saml2/ecp","commit_id":"93d1a8792929756e86d73ec085a6ac6955175b30"}]}
