)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ad5b040ee3126829b0d78781d60f1cec448d6ded","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add openstack_user_domain to assertion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, a keystone IdP do not provide the domain of the user"},{"line_number":10,"context_line":"when generating SAML assertions. Since it is possible to have two"},{"line_number":11,"context_line":"users with the same username but in different domains, this patch"},{"line_number":12,"context_line":"adds an additional attribute called \"openstack_user_domain\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7aaa499b_6f060e22","line":9,"updated":"2015-04-11 08:59:36.000000000","message":"(nit): s/do not/does not/","commit_id":"cfded085fdcccfc7fed916d9b4b5aa6880681c41"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5fb550d4f05280af8fbf68f5c2fc370444d26bb5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add openstack_user_domain to assertion"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, a keystone IdP do not provide the domain of the user"},{"line_number":10,"context_line":"when generating SAML assertions. Since it is possible to have two"},{"line_number":11,"context_line":"users with the same username but in different domains, this patch"},{"line_number":12,"context_line":"adds an additional attribute called \"openstack_user_domain\""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7aaa499b_0cfe756b","line":9,"in_reply_to":"7aaa499b_6f060e22","updated":"2015-04-11 14:51:23.000000000","message":"Done","commit_id":"cfded085fdcccfc7fed916d9b4b5aa6880681c41"}],"keystone/contrib/federation/controllers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d71e3d5dd9a05862e528b5fab7dcf218e632e168","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        user_domain \u003d token_ref.user_domain_name"},{"line_number":337,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":338,"context_line":"        response \u003d generator.samlize_token(issuer, sp_url, subject,"},{"line_number":339,"context_line":"                                           user_domain, roles, project,"},{"line_number":340,"context_line":"                                           project_domain)"},{"line_number":341,"context_line":"        return (response, service_provider)"},{"line_number":342,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_9e128f61","line":339,"updated":"2015-04-30 16:00:35.000000000","message":"at some point you just pass in the token_ref.","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        # NOTE(rodrigods): the domain name is necessary in order to distinguish"},{"line_number":334,"context_line":"        # between projects and users with the same name in different domains."},{"line_number":335,"context_line":"        project_domain_name \u003d token_ref.project_domain_name"},{"line_number":336,"context_line":"        user_domain_name \u003d token_ref.project_domain_name"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":339,"context_line":"        response \u003d generator.samlize_token("}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_37a6e053","line":336,"updated":"2015-05-01 18:32:59.000000000","message":"this should be subject_domain_name so we know it\u0027s for the subject.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"}],"keystone/contrib/federation/idp.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ad5b040ee3126829b0d78781d60f1cec448d6ded","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def _build_attribute(attribute_name, attribute_values):"},{"line_number":194,"context_line":"            attribute \u003d saml.Attribute()"},{"line_number":195,"context_line":"            attribute.name \u003d attribute_name"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aaa499b_4f035210","line":193,"updated":"2015-04-11 08:59:36.000000000","message":"I think it would be better to do the refactor first, then base this change on that....","commit_id":"cfded085fdcccfc7fed916d9b4b5aa6880681c41"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5fb550d4f05280af8fbf68f5c2fc370444d26bb5","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def _build_attribute(attribute_name, attribute_values):"},{"line_number":194,"context_line":"            attribute \u003d saml.Attribute()"},{"line_number":195,"context_line":"            attribute.name \u003d attribute_name"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aaa499b_8cf28599","line":193,"in_reply_to":"7aaa499b_0a2bf883","updated":"2015-04-11 14:51:23.000000000","message":"added a follow up patch to perform this refactoring, so we can have the actual bug fix merged earlier","commit_id":"cfded085fdcccfc7fed916d9b4b5aa6880681c41"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4294177eea80eee61412001cec0083c4c93ca7b2","unresolved":false,"context_lines":[{"line_number":190,"context_line":""},{"line_number":191,"context_line":"        \"\"\""},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        def _build_attribute(attribute_name, attribute_values):"},{"line_number":194,"context_line":"            attribute \u003d saml.Attribute()"},{"line_number":195,"context_line":"            attribute.name \u003d attribute_name"},{"line_number":196,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7aaa499b_0a2bf883","line":193,"in_reply_to":"7aaa499b_4f035210","updated":"2015-04-11 09:04:29.000000000","message":"maybe even before the previous patch as well...","commit_id":"cfded085fdcccfc7fed916d9b4b5aa6880681c41"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.assertion_id \u003d uuid.uuid4().hex"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def samlize_token(self, issuer, recipient, user, roles, project,"},{"line_number":47,"context_line":"                      project_domain, user_domain, expires_in\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Convert Keystone attributes to a SAML assertion."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :param issuer: URL of the issuing party"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_f1242db0","line":47,"updated":"2015-04-29 09:15:29.000000000","message":"maybe change the order ot parameters i.e. put user_domain after user. We are changing the signature either way.You could also rename it to user_domain_name.","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        self.assertion_id \u003d uuid.uuid4().hex"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def samlize_token(self, issuer, recipient, user, roles, project,"},{"line_number":47,"context_line":"                      project_domain, user_domain, expires_in\u003dNone):"},{"line_number":48,"context_line":"        \"\"\"Convert Keystone attributes to a SAML assertion."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"        :param issuer: URL of the issuing party"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_98c19031","line":47,"in_reply_to":"5ad0253b_f1242db0","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        project_domain_value.set_text(project_domain)"},{"line_number":220,"context_line":"        project_domain_attribute.attribute_value \u003d project_domain_value"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        openstack_user_domain \u003d \u0027openstack_user_domain\u0027"},{"line_number":223,"context_line":"        user_domain_attribute \u003d saml.Attribute()"},{"line_number":224,"context_line":"        user_domain_attribute.name \u003d openstack_user_domain"},{"line_number":225,"context_line":"        user_domain_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_916cd99d","line":222,"updated":"2015-04-29 09:15:29.000000000","message":"maybe move this block of code in closer to the block where user attribute is prepared.","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        project_domain_value.set_text(project_domain)"},{"line_number":220,"context_line":"        project_domain_attribute.attribute_value \u003d project_domain_value"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"        openstack_user_domain \u003d \u0027openstack_user_domain\u0027"},{"line_number":223,"context_line":"        user_domain_attribute \u003d saml.Attribute()"},{"line_number":224,"context_line":"        user_domain_attribute.name \u003d openstack_user_domain"},{"line_number":225,"context_line":"        user_domain_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_78dd9413","line":222,"in_reply_to":"5ad0253b_916cd99d","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d71e3d5dd9a05862e528b5fab7dcf218e632e168","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        :param user: User name"},{"line_number":55,"context_line":"        :type user: string"},{"line_number":56,"context_line":"        :param user_domain_name: User Domain name"},{"line_number":57,"context_line":"        :type user_domain_name: string"},{"line_number":58,"context_line":"        :param roles: List of role names"},{"line_number":59,"context_line":"        :type roles: list"},{"line_number":60,"context_line":"        :param project: Project name"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_3e0a5b27","line":57,"updated":"2015-04-30 16:00:35.000000000","message":"python type is str","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9d841beb5a9d410b9c346ee0408732a1a7aad284","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        :param user: User name"},{"line_number":55,"context_line":"        :type user: string"},{"line_number":56,"context_line":"        :param user_domain_name: User Domain name"},{"line_number":57,"context_line":"        :type user_domain_name: string"},{"line_number":58,"context_line":"        :param roles: List of role names"},{"line_number":59,"context_line":"        :type roles: list"},{"line_number":60,"context_line":"        :param project: Project name"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_5142a53f","line":57,"in_reply_to":"3acd31a7_3e0a5b27","updated":"2015-04-30 18:10:45.000000000","message":"following the pattern of the others parameters here... isn\u0027t it considered the same type as str when the docstring is parsed?","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d71e3d5dd9a05862e528b5fab7dcf218e632e168","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                \u003cns0:AttributeValue"},{"line_number":181,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":182,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":183,"context_line":"            \u003cns0:Attribute Name\u003d\"openstack_user_domain\"\u003e"},{"line_number":184,"context_line":"                \u003cns0:AttributeValue"},{"line_number":185,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":186,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_39115553","line":183,"updated":"2015-04-30 16:00:35.000000000","message":"move this up after user.","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9d841beb5a9d410b9c346ee0408732a1a7aad284","unresolved":false,"context_lines":[{"line_number":180,"context_line":"                \u003cns0:AttributeValue"},{"line_number":181,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":182,"context_line":"            \u003c/ns0:Attribute\u003e"},{"line_number":183,"context_line":"            \u003cns0:Attribute Name\u003d\"openstack_user_domain\"\u003e"},{"line_number":184,"context_line":"                \u003cns0:AttributeValue"},{"line_number":185,"context_line":"                  xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":186,"context_line":"            \u003c/ns0:Attribute\u003e"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_313f29b6","line":183,"in_reply_to":"3acd31a7_39115553","updated":"2015-04-30 18:10:45.000000000","message":"Done","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        user_value.set_text(user)"},{"line_number":197,"context_line":"        user_attribute.attribute_value \u003d user_value"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        openstack_user_domain \u003d \u0027openstack_user_domain\u0027"},{"line_number":200,"context_line":"        user_domain_attribute \u003d saml.Attribute()"},{"line_number":201,"context_line":"        user_domain_attribute.name \u003d openstack_user_domain"},{"line_number":202,"context_line":"        user_domain_value \u003d saml.AttributeValue()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_91dee46b","line":199,"updated":"2015-05-01 18:32:59.000000000","message":"no need for a variable here since this value isn\u0027t reused, and the thing it\u0027s assigned to makes it obvious what it is.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"}],"keystone/tests/unit/saml2/signed_saml2_assertion.xml":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d71e3d5dd9a05862e528b5fab7dcf218e632e168","unresolved":false,"context_lines":[{"line_number":63,"context_line":"      \u003cns0:AttributeValue xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":64,"context_line":"    \u003c/ns0:Attribute\u003e"},{"line_number":65,"context_line":"    \u003cns0:Attribute Name\u003d\"openstack_user_domain\" NameFormat\u003d\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"\u003e"},{"line_number":66,"context_line":"      \u003cns0:AttributeValue xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":67,"context_line":"    \u003c/ns0:Attribute\u003e"},{"line_number":68,"context_line":"  \u003c/ns0:AttributeStatement\u003e"},{"line_number":69,"context_line":"\u003c/ns0:Assertion\u003e"}],"source_content_type":"application/xml","patch_set":12,"id":"3acd31a7_5942d13f","line":66,"updated":"2015-04-30 16:00:35.000000000","message":"Use a different value than the project if that\u0027s possible otherwise the tests won\u0027t verify that the user domain was used rather than the project domain.","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9d841beb5a9d410b9c346ee0408732a1a7aad284","unresolved":false,"context_lines":[{"line_number":63,"context_line":"      \u003cns0:AttributeValue xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":64,"context_line":"    \u003c/ns0:Attribute\u003e"},{"line_number":65,"context_line":"    \u003cns0:Attribute Name\u003d\"openstack_user_domain\" NameFormat\u003d\"urn:oasis:names:tc:SAML:2.0:attrname-format:uri\"\u003e"},{"line_number":66,"context_line":"      \u003cns0:AttributeValue xsi:type\u003d\"xs:string\"\u003eDefault\u003c/ns0:AttributeValue\u003e"},{"line_number":67,"context_line":"    \u003c/ns0:Attribute\u003e"},{"line_number":68,"context_line":"  \u003c/ns0:AttributeStatement\u003e"},{"line_number":69,"context_line":"\u003c/ns0:Assertion\u003e"}],"source_content_type":"application/xml","patch_set":12,"id":"3acd31a7_f148915d","line":66,"in_reply_to":"3acd31a7_5942d13f","updated":"2015-04-30 18:10:45.000000000","message":"Done","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"}],"keystone/tests/unit/test_v3_federation.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"4c3d1b58a0fcc9388cff6df4b15e035254709d50","unresolved":false,"context_lines":[{"line_number":3031,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3032,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3033,"context_line":"                                               self.PROJECT, self.DOMAIN,"},{"line_number":3034,"context_line":"                                               self.DOMAIN)"},{"line_number":3035,"context_line":""},{"line_number":3036,"context_line":"        assertion \u003d response.assertion"},{"line_number":3037,"context_line":"        self.assertIsNotNone(assertion)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aaa499b_c1e9471c","line":3034,"updated":"2015-04-13 21:27:30.000000000","message":"it\u0027s not clear why self.DOMAIN is included twice","commit_id":"1c0bd50b570e19f046f1682f74e479f9aff7c46b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"2a854cbc525fcf29189ed11b6d0feb40704dfb2d","unresolved":false,"context_lines":[{"line_number":3031,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3032,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3033,"context_line":"                                               self.PROJECT, self.DOMAIN,"},{"line_number":3034,"context_line":"                                               self.DOMAIN)"},{"line_number":3035,"context_line":""},{"line_number":3036,"context_line":"        assertion \u003d response.assertion"},{"line_number":3037,"context_line":"        self.assertIsNotNone(assertion)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aaa499b_9c6848f7","line":3034,"in_reply_to":"7aaa499b_c1e9471c","updated":"2015-04-13 22:50:36.000000000","message":"added a comment","commit_id":"1c0bd50b570e19f046f1682f74e479f9aff7c46b"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":3072,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3073,"context_line":"                               side_effect\u003dlambda x: x):"},{"line_number":3074,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3075,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3076,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3077,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3078,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_31ee2523","line":3075,"updated":"2015-04-29 09:15:29.000000000","message":"nit: two spaces between \u0027as\u0027 and \u0027project\u0027","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":3072,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3073,"context_line":"                               side_effect\u003dlambda x: x):"},{"line_number":3074,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3075,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3076,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3077,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3078,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_f8d1a4fc","line":3075,"in_reply_to":"5ad0253b_31ee2523","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":3091,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3092,"context_line":"                               return_value\u003dself.signed_assertion):"},{"line_number":3093,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3094,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3095,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3096,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3097,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_f1f78df3","line":3094,"updated":"2015-04-29 09:15:29.000000000","message":"same here","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":3091,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3092,"context_line":"                               return_value\u003dself.signed_assertion):"},{"line_number":3093,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3094,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3095,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3096,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3097,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_b8db2c1b","line":3094,"in_reply_to":"5ad0253b_f1f78df3","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        with mock.patch(\u0027subprocess.check_output\u0027,"},{"line_number":3135,"context_line":"                        side_effect\u003dmocked_subprocess_check_output):"},{"line_number":3136,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3137,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3138,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3139,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3140,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_b1da3577","line":3137,"updated":"2015-04-29 09:15:29.000000000","message":"same","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":3134,"context_line":"        with mock.patch(\u0027subprocess.check_output\u0027,"},{"line_number":3135,"context_line":"                        side_effect\u003dmocked_subprocess_check_output):"},{"line_number":3136,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3137,"context_line":"            # The same domain is passed as  project_domain and user_domain"},{"line_number":3138,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3139,"context_line":"                                               self.SUBJECT, self.ROLES,"},{"line_number":3140,"context_line":"                                               self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_5809b894","line":3137,"in_reply_to":"5ad0253b_b1da3577","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"2d10e3db00703ff76ae7e5b021b7cb69c79682ff","unresolved":false,"context_lines":[{"line_number":3160,"context_line":"            self.skip(\u0027xmlsec1 is not installed\u0027)"},{"line_number":3161,"context_line":""},{"line_number":3162,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3163,"context_line":"        # The same domain is passed as  project_domain and user_domain"},{"line_number":3164,"context_line":"        response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3165,"context_line":"                                           self.SUBJECT, self.ROLES,"},{"line_number":3166,"context_line":"                                           self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_71e49d3a","line":3163,"updated":"2015-04-29 09:15:29.000000000","message":"same","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3ce169ca84799b73d40dff7579bc544a16b3831e","unresolved":false,"context_lines":[{"line_number":3160,"context_line":"            self.skip(\u0027xmlsec1 is not installed\u0027)"},{"line_number":3161,"context_line":""},{"line_number":3162,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3163,"context_line":"        # The same domain is passed as  project_domain and user_domain"},{"line_number":3164,"context_line":"        response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3165,"context_line":"                                           self.SUBJECT, self.ROLES,"},{"line_number":3166,"context_line":"                                           self.PROJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":10,"id":"5ad0253b_18034075","line":3163,"in_reply_to":"5ad0253b_71e49d3a","updated":"2015-04-29 13:45:14.000000000","message":"Done","commit_id":"e3a4e3454132d5d7b1490d60d84b4aa8b55c5f57"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d71e3d5dd9a05862e528b5fab7dcf218e632e168","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3029,"context_line":"                               return_value\u003dself.signed_assertion):"},{"line_number":3030,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3031,"context_line":"            # The same domain is passed as project_domain_name and"},{"line_number":3032,"context_line":"            # user_domain_name"},{"line_number":3033,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3034,"context_line":"                                               self.SUBJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_b987a560","line":3031,"updated":"2015-04-30 16:00:35.000000000","message":"this is a bad idea since then it\u0027s impossible to test that the correct domain was used.","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"9d841beb5a9d410b9c346ee0408732a1a7aad284","unresolved":false,"context_lines":[{"line_number":3028,"context_line":"        with mock.patch.object(keystone_idp, \u0027_sign_assertion\u0027,"},{"line_number":3029,"context_line":"                               return_value\u003dself.signed_assertion):"},{"line_number":3030,"context_line":"            generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3031,"context_line":"            # The same domain is passed as project_domain_name and"},{"line_number":3032,"context_line":"            # user_domain_name"},{"line_number":3033,"context_line":"            response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3034,"context_line":"                                               self.SUBJECT, self.DOMAIN,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_d1823552","line":3031,"in_reply_to":"3acd31a7_b987a560","updated":"2015-04-30 18:10:45.000000000","message":"Done","commit_id":"b1b6a7f72ec9a705cd786ba1fcf142dec1d66bb5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":2989,"context_line":"    ISSUER \u003d \u0027https://acme.com/FIM/sps/openstack/saml20\u0027"},{"line_number":2990,"context_line":"    RECIPIENT \u003d \u0027http://beta.com/Shibboleth.sso/SAML2/POST\u0027"},{"line_number":2991,"context_line":"    SUBJECT \u003d \u0027test_user\u0027"},{"line_number":2992,"context_line":"    USER_DOMAIN \u003d \u0027user_domain\u0027"},{"line_number":2993,"context_line":"    ROLES \u003d [\u0027admin\u0027, \u0027member\u0027]"},{"line_number":2994,"context_line":"    PROJECT \u003d \u0027development\u0027"},{"line_number":2995,"context_line":"    PROJECT_DOMAIN \u003d \u0027project_domain\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_778578ab","line":2992,"updated":"2015-05-01 18:32:59.000000000","message":"change this to SUBJECT_DOMAIN so it\u0027s obvious it\u0027s associated with SUBJECT\n\nAlso, add a comment where this value is coming from. Otherwise use a random value.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":2992,"context_line":"    USER_DOMAIN \u003d \u0027user_domain\u0027"},{"line_number":2993,"context_line":"    ROLES \u003d [\u0027admin\u0027, \u0027member\u0027]"},{"line_number":2994,"context_line":"    PROJECT \u003d \u0027development\u0027"},{"line_number":2995,"context_line":"    PROJECT_DOMAIN \u003d \u0027project_domain\u0027"},{"line_number":2996,"context_line":"    SAML_GENERATION_ROUTE \u003d \u0027/auth/OS-FEDERATION/saml2\u0027"},{"line_number":2997,"context_line":"    ECP_GENERATION_ROUTE \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":2998,"context_line":"    ASSERTION_VERSION \u003d \"2.0\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_775a1852","line":2995,"updated":"2015-05-01 18:32:59.000000000","message":"add a comment where this value is coming from. Otherwise use a random value.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":3053,"context_line":"        for attribute_value in role_attribute.attribute_value:"},{"line_number":3054,"context_line":"            self.assertIn(attribute_value.text, self.ROLES)"},{"line_number":3055,"context_line":""},{"line_number":3056,"context_line":"        project_attribute \u003d assertion.attribute_statement[0].attribute[3]"},{"line_number":3057,"context_line":"        self.assertEqual(self.PROJECT,"},{"line_number":3058,"context_line":"                         project_attribute.attribute_value[0].text)"},{"line_number":3059,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_57303c01","line":3056,"updated":"2015-05-01 18:32:59.000000000","message":"do we really need to assert the order that the attributes are in? fix this to look up the attribute in the doc.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a24986aed7044e6a4ba7490234ca709c84b76ea4","unresolved":false,"context_lines":[{"line_number":3157,"context_line":"            self.skip(\u0027xmlsec1 is not installed\u0027)"},{"line_number":3158,"context_line":""},{"line_number":3159,"context_line":"        generator \u003d keystone_idp.SAMLGenerator()"},{"line_number":3160,"context_line":"        # The same domain is passed as project_domain_name and user_domain_name"},{"line_number":3161,"context_line":"        response \u003d generator.samlize_token(self.ISSUER, self.RECIPIENT,"},{"line_number":3162,"context_line":"                                           self.SUBJECT, self.USER_DOMAIN,"},{"line_number":3163,"context_line":"                                           self.ROLES, self.PROJECT,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3acd31a7_a20cf03b","line":3160,"updated":"2015-05-01 18:32:59.000000000","message":"I don\u0027t understand this comment. Comments should explain why something is being done.","commit_id":"74cd2122a7e726d3223ef820701f7c66c09cbddb"}]}
