)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6534,"name":"David Chadwick","email":"d.w.chadwick@truetrust.co.uk","username":"d-w-chadwick"},"change_message_id":"9253c365de0d8b2f16a107bb40871d7d0450b6f9","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, made up of the"},{"line_number":16,"context_line":"IDP values, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_45b21407","line":17,"updated":"2014-07-31 06:41:18.000000000","message":"I dont believe this is the correct solution. The flow should work as follows:\n\n1. When the user is authenticated by the IDP he is assigned a set of identity attributes. The IdP can assign whatever attributes it wishes. This may or may not include a domain attribute.\n\n2. The Keystone administrator decides which of the IDP assigned attributes are trusted and which are not. He may decide to trust the domain attribute assigned by the IDP or not. This is his choice.\n\n3. The attribute mapping function is the key component in which the domain of the user is ultimately determined. There are multiple alternatives available to the Keystone administrator.\n\na. If the Keystone admin trusts the domain attribute assigned by the IDP then it will be mapped into the domain of the user by a mapping rule\n\nb. If the Keystone admin does not trust the domain attribute assigned by the IDP or the IDP has not assigned a domain attribute, then the Keystone admin should provide a mapping rule to map from one or more IDP assigned identity attributes into a domain. \n\nc. In order to decrease the burden on the Keystone administrator, we could have an implicit mapping rule that will apply first, this being to assign the user to the default domain. If the Keystone admin does not have a mapping rule that specifies the domain of the user, then the default one will apply, otherwise it will be overwritten by the domain specified in the mapping rule of the Keystone administrator.","commit_id":"9de15c61aa7a6debb3ae845951d2cf77a957ace8"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"51c11db8e1997446c3ce5c4551fd239cfd326cf0","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, made up of the"},{"line_number":16,"context_line":"IDP values, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_38237007","line":17,"in_reply_to":"baada198_45b21407","updated":"2014-07-31 16:48:25.000000000","message":"David,\n\nThis is more of a consistency issue than a \"how this should work\". A lot of things will break with a federated token user data does not have a domain section. This includes a number of auth_token middleware versions.\n\nInstead of trying to do something to keep idpids in sync with domain ids and avoiding conflicts (among other side issues you outlined in your comment), I want to propose a simple code-construct domain that is used that is just called \"Federated\" both id and name.\n\nThis code-construct cannot be used for groups, projects, etc. It is simply the \"domain\" data for a federated user (ensuring the user has the same data format and we don\u0027t break various versions of software expecting the data format).","commit_id":"9de15c61aa7a6debb3ae845951d2cf77a957ace8"},{"author":{"_account_id":6534,"name":"David Chadwick","email":"d.w.chadwick@truetrust.co.uk","username":"d-w-chadwick"},"change_message_id":"14010b541c000e70a0cf8551c4be8e47ab99ace6","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, where we use a"},{"line_number":16,"context_line":"dummy value of \u0027Federated\u0027, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_2bc5d53c","line":17,"updated":"2014-07-31 20:40:24.000000000","message":"This should not be a dummy value but rather a default value, that can be over written as you still need to be able to put any federated user into any domain via the mapping rules. Otherwise how does a federated user become a member of any domain, including the default domain?","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e5a23db6f977a1b6972dd4150421fe6f149e179c","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, where we use a"},{"line_number":16,"context_line":"dummy value of \u0027Federated\u0027, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_8e4b4f5e","line":17,"in_reply_to":"baada198_2bc5d53c","updated":"2014-07-31 20:56:48.000000000","message":"The domain of the *user* should not be touched by the mapping rules. Why does a federated user need to be \"a member of a domain\"? The mapping rules will map the user to a group (and a scope) and that group conveys the RBAC support to act on projects, domains, etc.\n\nIs there a reason a user *needs* to be considered owned by a domain? Being attached to a domain does not convey roles, authorization, etc. I don\u0027t see the value in having the user data structure reference the domain unless that user is actually managed by the domain directly (not the case with federation).","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9b5b4ccb5868cf8db280a3903447e1de7c0563b8","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, where we use a"},{"line_number":16,"context_line":"dummy value of \u0027Federated\u0027, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_111e7e0d","line":17,"in_reply_to":"baada198_4e005703","updated":"2014-07-31 21:47:14.000000000","message":"@David, \n\nYep! That is correct. I replied to your email as well, if we\u0027re missing some key use-case lets hammer that out, but I think we\u0027re on the same page now.","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":6534,"name":"David Chadwick","email":"d.w.chadwick@truetrust.co.uk","username":"d-w-chadwick"},"change_message_id":"30c9707fb85fdf748ce66dcdded9e9c6b60d3522","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"The solution should be to add a domain section, where we use a"},{"line_number":16,"context_line":"dummy value of \u0027Federated\u0027, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Related-Bug: #1346820"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"baada198_4e005703","line":17,"in_reply_to":"baada198_8e4b4f5e","updated":"2014-07-31 21:34:11.000000000","message":"So if I have understood correctly this fix is nothing to do with authz, and  will not effect the domains and projects a user can be a member of as a result of his roles and groups (and attribute mappings).This fix is purely cosmetic since some existing code expects all users to be managed by some domain administrator or other and expects the user domain field to be present. So you are reserving the keyword Federated to signify the domain of federated users.\n\nI therefore suggest you change \"dummy value of\" into \"reserved value of\"","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"c0b46e7946288e7f90868771c24b056935b12b39","unresolved":false,"context_lines":[{"line_number":16,"context_line":"reserved value of \u0027Federated\u0027, for both ID and name of the domain."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I4ad9fb55e8258e091ac78f628e5cb5b3add611a3"},{"line_number":19,"context_line":"Implements bp federated-direct-user-mapping"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"fa81d914_d2b5dfee","line":19,"updated":"2015-01-29 22:07:43.000000000","message":"bp isn\u0027t approved.","commit_id":"041d49703d9400ba9aab64a3333b7d61c9a00f43"}],"keystone/assignment/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"72b61cddf21758e1e468995b3780ec98f163e23a","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":102,"context_line":"            raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027) % domain_id)"},{"line_number":103,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":104,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027) % domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ba82104f","line":101,"updated":"2014-07-31 19:33:32.000000000","message":"This needs to be .get(\u0027name\u0027)","commit_id":"d0e93da45d3146402f4ca834c898bd5b54d23508"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a5303cc0d730ee9ae70bd012c6064b31a71a21a5","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":102,"context_line":"            raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027) % domain_id)"},{"line_number":103,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":104,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027) % domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_5abbb40e","line":101,"in_reply_to":"baada198_ba82104f","updated":"2014-07-31 19:34:50.000000000","message":"yeah, realized that when the update tests failed :)","commit_id":"d0e93da45d3146402f4ca834c898bd5b54d23508"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"ce0de45da63ef5f93379115e7a1c19d4fda8e319","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":102,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_ee812bfb","line":101,"updated":"2014-07-31 21:15:16.000000000","message":"Hard coded  constant checking is always bad.","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"51bdb47974a44dfd4919e4529238f81a30122998","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":102,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"},{"line_number":105,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":106,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_c8b0df8f","line":103,"updated":"2014-07-31 20:33:06.000000000","message":"We don\u0027t need to also spit out the domain name/id inside the AssertionError message.","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"adf3b228eadbcca36a4dc5ae1e41187b047f0976","unresolved":false,"context_lines":[{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":102,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"},{"line_number":105,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":106,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_2be23501","line":103,"in_reply_to":"baada198_c8b0df8f","updated":"2014-07-31 20:34:51.000000000","message":"Ignore. I thought you were publishing the value of the domain name.","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"51bdb47974a44dfd4919e4529238f81a30122998","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"},{"line_number":105,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":106,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027)"},{"line_number":107,"context_line":"                                 % domain_id)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def assert_project_enabled(self, project_id, project\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_eb575dc7","line":106,"updated":"2014-07-31 20:33:06.000000000","message":"Same as above","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":11045,"name":"Bob Thyne","email":"bob.thyne@hp.com","username":"bobt"},"change_message_id":"adf3b228eadbcca36a4dc5ae1e41187b047f0976","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"},{"line_number":105,"context_line":"        if domain_id.lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":106,"context_line":"            raise AssertionError(_(\u0027Domain cannot have ID Federated: %s\u0027)"},{"line_number":107,"context_line":"                                 % domain_id)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def assert_project_enabled(self, project_id, project\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_8bb8a1e9","line":106,"in_reply_to":"baada198_eb575dc7","updated":"2014-07-31 20:34:51.000000000","message":"Ignore.","commit_id":"35335af68145d5807dc5daea8399f91b69958e50"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"dfabf2eb62fad613863037cb8f4752030082afba","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":102,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d \u0027federated\u0027:"},{"line_number":103,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":104,"context_line":"                                     % domain_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_bc29298b","line":101,"updated":"2014-07-31 22:07:32.000000000","message":"if domain.get(\u0027name\u0027, \u0027\u0027).lower() \u003d\u003d \u0027federated\u0027:","commit_id":"4e40d1d5fdab53df0d689b8380a72b1d76d220e8"}],"keystone/contrib/federation/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a381ef00b33e9aa69bb1718668bec8302f6ff040","unresolved":false,"context_lines":[{"line_number":44,"context_line":"FEDERATION \u003d \u0027OS-FEDERATION\u0027"},{"line_number":45,"context_line":"IDENTITY_PROVIDER \u003d \u0027OS-FEDERATION:identity_provider\u0027"},{"line_number":46,"context_line":"PROTOCOL \u003d \u0027OS-FEDERATION:protocol\u0027"},{"line_number":47,"context_line":"FEDERATED_DOMAIN_NAME \u003d \u0027Federated\u0027"},{"line_number":48,"context_line":"FEDERATED_DOMAIN_ID \u003d \u0027Federated\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa81d914_1060cc34","line":47,"updated":"2015-01-27 19:23:46.000000000","message":"we could just define this once...\n\n  FEDERATED_DOMAIN_KEYWORD","commit_id":"2f1e9001d857b63ae08d197fd05a1f6a43d3d7d1"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"c961636f704494571d9299abc4a7f6fe6dcffe82","unresolved":false,"context_lines":[{"line_number":45,"context_line":"IDENTITY_PROVIDER \u003d \u0027OS-FEDERATION:identity_provider\u0027"},{"line_number":46,"context_line":"PROTOCOL \u003d \u0027OS-FEDERATION:protocol\u0027"},{"line_number":47,"context_line":"FEDERATED_DOMAIN_NAME \u003d \u0027Federated\u0027"},{"line_number":48,"context_line":"FEDERATED_DOMAIN_ID \u003d \u0027Federated\u0027"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"@dependency.provider(\u0027federation_api\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"1a930d6b_110c7593","line":48,"updated":"2015-01-27 12:04:00.000000000","message":"wondering if \u0027OS-FEDERATION\u0027 would be a better choice.","commit_id":"2f1e9001d857b63ae08d197fd05a1f6a43d3d7d1"}],"keystone/resource/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"fb1f7787405ee9b3c07b8d9d4956315a28034470","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            raise AssertionError(_(\u0027Domain is disabled: %s\u0027) % domain_id)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def assert_domain_not_federated(self, domain_id, domain):"},{"line_number":127,"context_line":"        \"\"\"Assert the Domain\u0027s name and id are not \"Federated\"."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":130,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_1c17fcee","line":127,"updated":"2015-01-31 09:19:57.000000000","message":"(nit) It might be worth here (or somewhere) to mention that our use of the federated domain name is case insensitive.","commit_id":"7ea2e0e110666c6b9b7563e20fad99d11c0e7b7d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"89e325837698bf91547dfc9bab8d10084d9953c8","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            raise AssertionError(_(\u0027Domain is disabled: %s\u0027) % domain_id)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def assert_domain_not_federated(self, domain_id, domain):"},{"line_number":127,"context_line":"        \"\"\"Assert the Domain\u0027s name and id are not \"Federated\"."},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":130,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"da86d52c_cb302559","line":127,"in_reply_to":"da86d52c_1c17fcee","updated":"2015-02-02 07:12:28.000000000","message":"Done","commit_id":"7ea2e0e110666c6b9b7563e20fad99d11c0e7b7d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"97a954765c79f1c24d3b0f9a519909e9d7792be7","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        federated_domain_reserved \u003d federation.FEDERATED_DOMAIN_KEYWORD.lower()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":137,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d federated_domain_reserved:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_3f72c8ad","line":134,"updated":"2015-02-16 03:24:01.000000000","message":"(NIT): This can probably be done a single time at class instantiation rather than on each assert.","commit_id":"f4a51c75842ae1d9fe0201caf14037b50a543624"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b77b1cc1c1bb2d2d7e14333c4dcd0e53e44fd7f1","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        :raise AssertionError if domain named \"Federated\"."},{"line_number":132,"context_line":"        \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        federated_domain_reserved \u003d federation.FEDERATED_DOMAIN_KEYWORD.lower()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":137,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d federated_domain_reserved:"}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_4124fb0d","line":134,"in_reply_to":"da86d52c_3f72c8ad","updated":"2015-02-16 09:04:54.000000000","message":"added in a followup patch.","commit_id":"f4a51c75842ae1d9fe0201caf14037b50a543624"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"0d4a2cca5c94902b4dd582e0eec487b188dc4275","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        federated_domain_reserved \u003d federation.FEDERATED_DOMAIN_KEYWORD.lower()"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        if domain.get(\u0027name\u0027) is not None:"},{"line_number":137,"context_line":"            if domain[\u0027name\u0027].lower() \u003d\u003d federated_domain_reserved:"},{"line_number":138,"context_line":"                raise AssertionError(_(\u0027Domain cannot be named Federated: %s\u0027)"},{"line_number":139,"context_line":"                                     % domain_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da86d52c_66110caf","line":136,"updated":"2015-02-16 12:39:27.000000000","message":"This can be simplified:\n\nif domain.get(\u0027name\u0027, \u0027\u0027).lower() \u003d\u003d federated_domain_reserved:","commit_id":"3172e6c2b128b7b52c9f725032430f017227a204"}],"keystone/tests/test_v3_assignment.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a0ed96b4d65eba7c2f01cbf86fc08f6892baf8cd","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_866537b1","line":468,"updated":"2015-01-20 13:29:35.000000000","message":"s/create/update","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"52418753d63aed54df4225ec0ff4a2c7d69119fa","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_66f84b4b","line":468,"in_reply_to":"3a961159_866537b1","updated":"2015-01-20 13:36:49.000000000","message":"++","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a0ed96b4d65eba7c2f01cbf86fc08f6892baf8cd","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"},{"line_number":472,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_c6901f45","line":470,"updated":"2015-01-20 13:29:35.000000000","message":"Steven, I suggest to assert domain[\u0027name\u0027] instead of domain[\u0027id\u0027] since user cannot create such a domain with domain[\u0027id\u0027] equals \u0027FEDERATED\u0027 which is covered by your previous testcases. And domain[\u0027id\u0027] is PK, update_domain cannot update domain[\u0027id\u0027], however, update domain[\u0027name\u0027] is possible in update_domain.","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"52418753d63aed54df4225ec0ff4a2c7d69119fa","unresolved":false,"context_lines":[{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"},{"line_number":472,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"    # Project CRUD tests"},{"line_number":475,"context_line":""},{"line_number":476,"context_line":"    def test_list_projects(self):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_e637dbfc","line":473,"updated":"2015-01-20 13:36:49.000000000","message":"Steve, are you using different combinations of \u0027federated\u0027, \u0027FEDERATED\u0027, \u0027Federated\u0027 on purpose? If so, maybe you should reflect this in docstrings, where \u0027Federated\u0027 is only used.","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6571db14e54e835d61ff1f74e45003ae1ba3adf","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_db080c30","line":468,"updated":"2015-01-28 01:18:49.000000000","message":"s/create/update","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7669c92cb562c9781eff50d4825422714ed3bc8e","unresolved":false,"context_lines":[{"line_number":465,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":466,"context_line":""},{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_272ca2ab","line":468,"in_reply_to":"fa81d914_db080c30","updated":"2015-01-28 04:52:21.000000000","message":"Done","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6571db14e54e835d61ff1f74e45003ae1ba3adf","unresolved":false,"context_lines":[{"line_number":467,"context_line":"    def test_update_federated_domain_id(self):"},{"line_number":468,"context_line":"        \"\"\"Ensure user cannot create domain with ID Federated.\"\"\""},{"line_number":469,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":470,"context_line":"        domain[\u0027id\u0027] \u003d \u0027FEDERATED\u0027"},{"line_number":471,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.update_domain,"},{"line_number":472,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":473,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_161a796e","line":470,"updated":"2015-01-28 01:18:49.000000000","message":"suggest to assert domain[\u0027name\u0027] instead of domain[\u0027id\u0027], would you pls check my comment in patchset6, thanks!","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"}],"keystone/tests/test_v3_federation.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a0ed96b4d65eba7c2f01cbf86fc08f6892baf8cd","unresolved":false,"context_lines":[{"line_number":1304,"context_line":""},{"line_number":1305,"context_line":"    def test_unscoped_token_has_user_domain(self):"},{"line_number":1306,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":1307,"context_line":"        self._check_domains_are_valid(self.IDP, r.json_body[\u0027token\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_scoped_token_has_user_domain(self):"},{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_66ba0b0d","line":1307,"updated":"2015-01-20 13:29:35.000000000","message":"Steven, do you want to assert IDP or whatever? I didn\u0027t see any usage of this output parameter.","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a0ed96b4d65eba7c2f01cbf86fc08f6892baf8cd","unresolved":false,"context_lines":[{"line_number":1309,"context_line":"    def test_scoped_token_has_user_domain(self):"},{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("},{"line_number":1311,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"},{"line_number":1312,"context_line":"        self._check_domains_are_valid(self.IDP, r.result[\u0027token\u0027])"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    def load_federation_sample_data(self):"},{"line_number":1315,"context_line":"        \"\"\"Inject additional data.\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_c6381fa2","line":1312,"updated":"2015-01-20 13:29:35.000000000","message":"Ditto","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6571db14e54e835d61ff1f74e45003ae1ba3adf","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"    def test_unscoped_token_has_user_domain(self):"},{"line_number":1306,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":1307,"context_line":"        self._check_domains_are_valid(self.IDP, r.json_body[\u0027token\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_scoped_token_has_user_domain(self):"},{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("},{"line_number":1311,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_1b2c64ab","line":1308,"updated":"2015-01-28 01:18:49.000000000","message":"input parameter \u0027IDP\u0027 is needn\u0027t since it\u0027s not used in _check_domains_are_valid(...)","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7669c92cb562c9781eff50d4825422714ed3bc8e","unresolved":false,"context_lines":[{"line_number":1305,"context_line":"    def test_unscoped_token_has_user_domain(self):"},{"line_number":1306,"context_line":"        r \u003d self._issue_unscoped_token()"},{"line_number":1307,"context_line":"        self._check_domains_are_valid(self.IDP, r.json_body[\u0027token\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_scoped_token_has_user_domain(self):"},{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("},{"line_number":1311,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_873b8eea","line":1308,"in_reply_to":"fa81d914_1b2c64ab","updated":"2015-01-28 04:52:21.000000000","message":"Done","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"c6571db14e54e835d61ff1f74e45003ae1ba3adf","unresolved":false,"context_lines":[{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("},{"line_number":1311,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"},{"line_number":1312,"context_line":"        self._check_domains_are_valid(self.IDP, r.result[\u0027token\u0027])"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    def load_federation_sample_data(self):"},{"line_number":1315,"context_line":"        \"\"\"Inject additional data.\"\"\""},{"line_number":1316,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_5b1dfc72","line":1313,"updated":"2015-01-28 01:18:49.000000000","message":"Ditto.","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7669c92cb562c9781eff50d4825422714ed3bc8e","unresolved":false,"context_lines":[{"line_number":1310,"context_line":"        r \u003d self.v3_authenticate_token("},{"line_number":1311,"context_line":"            self.TOKEN_SCOPE_PROJECT_EMPLOYEE_FROM_EMPLOYEE)"},{"line_number":1312,"context_line":"        self._check_domains_are_valid(self.IDP, r.result[\u0027token\u0027])"},{"line_number":1313,"context_line":""},{"line_number":1314,"context_line":"    def load_federation_sample_data(self):"},{"line_number":1315,"context_line":"        \"\"\"Inject additional data.\"\"\""},{"line_number":1316,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa81d914_67369a05","line":1313,"in_reply_to":"fa81d914_5b1dfc72","updated":"2015-01-28 04:52:21.000000000","message":"Done","commit_id":"af439ff2cdd98cb6dd657a5fc775ec793e07455f"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"97a954765c79f1c24d3b0f9a519909e9d7792be7","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    def test_create_federated_domain_name(self):"},{"line_number":466,"context_line":"        \"\"\"Ensure user cannot create domain named Federated.\"\"\""},{"line_number":467,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":468,"context_line":"        domain[\u0027name\u0027] \u003d \u0027Federated\u0027"},{"line_number":469,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.create_domain,"},{"line_number":470,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":471,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_bf5dd817","line":468,"updated":"2015-02-16 03:24:01.000000000","message":"(NIT): You could use a testscenario to test each of these with variations on capitalization.","commit_id":"f4a51c75842ae1d9fe0201caf14037b50a543624"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"b77b1cc1c1bb2d2d7e14333c4dcd0e53e44fd7f1","unresolved":false,"context_lines":[{"line_number":465,"context_line":"    def test_create_federated_domain_name(self):"},{"line_number":466,"context_line":"        \"\"\"Ensure user cannot create domain named Federated.\"\"\""},{"line_number":467,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":468,"context_line":"        domain[\u0027name\u0027] \u003d \u0027Federated\u0027"},{"line_number":469,"context_line":"        self.assertRaises(AssertionError, self.assignment_api.create_domain,"},{"line_number":470,"context_line":"                          domain[\u0027id\u0027], domain)"},{"line_number":471,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"da86d52c_41c87b56","line":468,"in_reply_to":"da86d52c_bf5dd817","updated":"2015-02-16 09:04:54.000000000","message":"Added in a followup patch.","commit_id":"f4a51c75842ae1d9fe0201caf14037b50a543624"}],"keystone/token/providers/common.py":[{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"52418753d63aed54df4225ec0ff4a2c7d69119fa","unresolved":false,"context_lines":[{"line_number":478,"context_line":"                \u0027domain\u0027: {"},{"line_number":479,"context_line":"                    \u0027id\u0027: \u0027Federated\u0027,"},{"line_number":480,"context_line":"                    \u0027name\u0027: \u0027Federated\u0027"},{"line_number":481,"context_line":"                }"},{"line_number":482,"context_line":"            }"},{"line_number":483,"context_line":"        }"},{"line_number":484,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a961159_6645abb3","line":481,"updated":"2015-01-20 13:36:49.000000000","message":"use string constant, preferably defined in \u0027federation\u0027 module.","commit_id":"c6bdb7f3a29356b7e2940d84fb8649d132a50efc"}]}
