)]}'
{"keystone/identity/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"23e4f235f3f6e98e5b156fa6f8fe0d65f21d4abe","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"                idp_id, protocol_id, unique_id)"},{"line_number":1331,"context_line":"        except exception.UserNotFound:"},{"line_number":1332,"context_line":"            idp \u003d self.federation_api.get_idp(idp_id)"},{"line_number":1333,"context_line":"            federated_dict \u003d {"},{"line_number":1334,"context_line":"                \u0027idp_id\u0027: idp_id,"},{"line_number":1335,"context_line":"                \u0027protocol_id\u0027: protocol_id,"},{"line_number":1336,"context_line":"                \u0027unique_id\u0027: unique_id,"},{"line_number":1337,"context_line":"                \u0027display_name\u0027: display_name"},{"line_number":1338,"context_line":"            }"},{"line_number":1339,"context_line":"            user_dict \u003d ("},{"line_number":1340,"context_line":"                self.shadow_users_api.create_federated_user(idp[\u0027domain_id\u0027],"},{"line_number":1341,"context_line":"                                                            federated_dict))"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_205d1915","line":1338,"range":{"start_line":1333,"start_character":12,"end_line":1338,"end_character":13},"updated":"2017-01-24 05:48:23.000000000","message":"why not add domain_id to federated_dict?","commit_id":"3cccd8c27e8550261338e94e008271f341f12889"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"f70061b333f14644afebbc136ad36dc6575e4906","unresolved":false,"context_lines":[{"line_number":1330,"context_line":"                idp_id, protocol_id, unique_id)"},{"line_number":1331,"context_line":"        except exception.UserNotFound:"},{"line_number":1332,"context_line":"            idp \u003d self.federation_api.get_idp(idp_id)"},{"line_number":1333,"context_line":"            federated_dict \u003d {"},{"line_number":1334,"context_line":"                \u0027idp_id\u0027: idp_id,"},{"line_number":1335,"context_line":"                \u0027protocol_id\u0027: protocol_id,"},{"line_number":1336,"context_line":"                \u0027unique_id\u0027: unique_id,"},{"line_number":1337,"context_line":"                \u0027display_name\u0027: display_name"},{"line_number":1338,"context_line":"            }"},{"line_number":1339,"context_line":"            user_dict \u003d ("},{"line_number":1340,"context_line":"                self.shadow_users_api.create_federated_user(idp[\u0027domain_id\u0027],"},{"line_number":1341,"context_line":"                                                            federated_dict))"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_f67ae475","line":1338,"range":{"start_line":1333,"start_character":12,"end_line":1338,"end_character":13},"in_reply_to":"5a3905b3_205d1915","updated":"2017-01-24 14:45:36.000000000","message":"Because I want to be able to take the federated_dict and convert it to a federated object without having to pop data out. The only issue is, is that we are changing the base class interface, but I think there would be minimal to no impact on operators, as I would be surprised if anyone implemented a custom backend for shadow users.","commit_id":"3cccd8c27e8550261338e94e008271f341f12889"}],"keystone/identity/shadow_backends/base.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e6a2fe86ab8673482cb25aa642ef0dc113bbd7d2","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    \"\"\"Interface description for an Shadow Users driver.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @abc.abstractmethod"},{"line_number":27,"context_line":"    def create_federated_user(self, domain_id, federated_dict):"},{"line_number":28,"context_line":"        \"\"\"Create a new user with the federated identity."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"        :param domain_id: The domain ID of the IdP used for the federated user"}],"source_content_type":"text/x-python","patch_set":14,"id":"5a3905b3_da724649","line":27,"range":{"start_line":27,"start_character":8,"end_line":27,"end_character":63},"updated":"2017-01-25 04:42:49.000000000","message":"this still seems weird to me, but not enough to -1","commit_id":"8a0d7df3dd77944e1e2b6330ea75e3f25ccaa0e7"}],"keystone/tests/unit/test_sql_upgrade.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"23e4f235f3f6e98e5b156fa6f8fe0d65f21d4abe","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        idp_id \u003d create_idp(domain_id)"},{"line_number":2182,"context_line":"        protocol_id \u003d create_protocol(idp_id)"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":"        # create user before migrate to test that the domain_id gets updated"},{"line_number":2185,"context_line":"        user_id_before_migrate \u003d create_user()"},{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"        self.expand(15)"},{"line_number":2189,"context_line":"        self.migrate(15)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_c0b2954b","line":2186,"range":{"start_line":2184,"start_character":8,"end_line":2186,"end_character":74},"updated":"2017-01-24 05:48:23.000000000","message":"for completeness you can test to see that the federated user\u0027s domain is set to None","commit_id":"3cccd8c27e8550261338e94e008271f341f12889"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"f70061b333f14644afebbc136ad36dc6575e4906","unresolved":false,"context_lines":[{"line_number":2181,"context_line":"        idp_id \u003d create_idp(domain_id)"},{"line_number":2182,"context_line":"        protocol_id \u003d create_protocol(idp_id)"},{"line_number":2183,"context_line":""},{"line_number":2184,"context_line":"        # create user before migrate to test that the domain_id gets updated"},{"line_number":2185,"context_line":"        user_id_before_migrate \u003d create_user()"},{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":""},{"line_number":2188,"context_line":"        self.expand(15)"},{"line_number":2189,"context_line":"        self.migrate(15)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_5693b85a","line":2186,"range":{"start_line":2184,"start_character":8,"end_line":2186,"end_character":74},"in_reply_to":"5a3905b3_c0b2954b","updated":"2017-01-24 14:45:36.000000000","message":"Good catch, thanks. Done.","commit_id":"3cccd8c27e8550261338e94e008271f341f12889"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"23ada29434ed0f0546193106a771f23c7dd9cf9c","unresolved":false,"context_lines":[{"line_number":2184,"context_line":"        # create user before migrate to test that the domain_id gets updated"},{"line_number":2185,"context_line":"        user_id_before_migrate \u003d create_user()"},{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_28e226d6","line":2187,"updated":"2017-01-25 21:23:31.000000000","message":"This might just be my personal preference, but passing `None` as a parameter in the assertion seems to defeat the purpose of the assertion name. If we want to explicitly check that something is None, we usually do something like:\n\n  assertUserDomainIsNone(user_id_before_migrate)\n\nBut I understand the assertion has to the look up the reference.","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"7df0d9b2d540994d668bf0747936add183bcbce2","unresolved":false,"context_lines":[{"line_number":2184,"context_line":"        # create user before migrate to test that the domain_id gets updated"},{"line_number":2185,"context_line":"        user_id_before_migrate \u003d create_user()"},{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_084aca83","line":2187,"in_reply_to":"3a461143_28e226d6","updated":"2017-01-25 21:37:11.000000000","message":"Ah, good point.","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"86dd51871c1ac0e5001844a53a257a994772b445","unresolved":false,"context_lines":[{"line_number":2184,"context_line":"        # create user before migrate to test that the domain_id gets updated"},{"line_number":2185,"context_line":"        user_id_before_migrate \u003d create_user()"},{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_dbefaaae","line":2187,"in_reply_to":"3a461143_28e226d6","updated":"2017-01-25 22:04:18.000000000","message":"Done","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"23ada29434ed0f0546193106a771f23c7dd9cf9c","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"        # test insert trigger"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_a8f53684","line":2189,"updated":"2017-01-25 21:23:31.000000000","message":"We could add a federated user here and make sure the trigger copies the appropriate value. Unless thats exactly what we are doing on line 2193-2195?\n\nI\u0027m thinking about the case where we have an older node adding users as the newer node (code) is migrating (or about to migrate) things.","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"86dd51871c1ac0e5001844a53a257a994772b445","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"        # test insert trigger"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_db1deabe","line":2189,"in_reply_to":"3a461143_9b48c22f","updated":"2017-01-25 22:04:18.000000000","message":"Added another test, so that I\u0027m creating a user before expand and migrate. Done.","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"68b24ccd01fae19bca35ae3c025c26503b891322","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"        # test insert trigger"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_7eddc46f","line":2189,"in_reply_to":"3a461143_9b48c22f","updated":"2017-01-25 21:58:19.000000000","message":"That makes sense - just making sure the triggers are being used :)","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"7df0d9b2d540994d668bf0747936add183bcbce2","unresolved":false,"context_lines":[{"line_number":2186,"context_line":"        create_federated_user(user_id_before_migrate, idp_id, protocol_id)"},{"line_number":2187,"context_line":"        assertUserDomain(user_id_before_migrate, None)"},{"line_number":2188,"context_line":""},{"line_number":2189,"context_line":"        self.expand(15)"},{"line_number":2190,"context_line":"        self.migrate(15)"},{"line_number":2191,"context_line":""},{"line_number":2192,"context_line":"        # test insert trigger"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_9b48c22f","line":2189,"in_reply_to":"3a461143_a8f53684","updated":"2017-01-25 21:37:11.000000000","message":"Yeah, ln 2193 is adding the user to specifically test the trigger. Are you thinking that migrate could update the domain_id before the trigger? That may be possible, but migrate is called before the user is created...","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c6f9235a39174f8f6b2b315ac2210b459ebfb91a","unresolved":false,"context_lines":[{"line_number":2191,"context_line":"        # create user before expand to test data migration"},{"line_number":2192,"context_line":"        user_id_before_expand \u003d create_user()"},{"line_number":2193,"context_line":"        create_federated_user(user_id_before_expand, idp_id, protocol_id)"},{"line_number":2194,"context_line":"        assertUserDomainIsNone(user_id_before_expand)"},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"        self.expand(15)"},{"line_number":2197,"context_line":"        # create user before migrate to test insert trigger"}],"source_content_type":"text/x-python","patch_set":16,"id":"3a461143_3eb09cdd","line":2194,"updated":"2017-01-25 22:06:59.000000000","message":"++ thanks!","commit_id":"c19f2431524be224b4c027b2a56398d7c3e5e18b"}],"releasenotes/notes/shadow-users-backend-driver-has-changed-c7ab1c9be152db20.yaml":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"2bf6bcd5d2ab2ac3567d087e58f41042d30cadc5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The abstract base class for the shadow users backend has changed has. We\u0027ve"},{"line_number":5,"context_line":"    added a ``domain_id`` parameter to the ``create_federated_user`` method."},{"line_number":6,"context_line":"    This is so that the domain ID of the Identity Provider gets set for the"},{"line_number":7,"context_line":"    federated user. If you have a custom implementation for the shadow users"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a3905b3_98d3cf03","line":4,"range":{"start_line":4,"start_character":57,"end_line":4,"end_character":72},"updated":"2017-01-23 17:39:45.000000000","message":"typo","commit_id":"0f0133d0e16778b67d2f7bf0fe3c0bd214295358"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"817d6425cf1265995fe0cb5912e7de902c268d88","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The abstract base class for the shadow users backend has changed has. We\u0027ve"},{"line_number":5,"context_line":"    added a ``domain_id`` parameter to the ``create_federated_user`` method."},{"line_number":6,"context_line":"    This is so that the domain ID of the Identity Provider gets set for the"},{"line_number":7,"context_line":"    federated user. If you have a custom implementation for the shadow users"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"5a3905b3_52d044c9","line":4,"range":{"start_line":4,"start_character":57,"end_line":4,"end_character":72},"in_reply_to":"5a3905b3_98d3cf03","updated":"2017-01-24 01:34:22.000000000","message":"Good catch, fixed.","commit_id":"0f0133d0e16778b67d2f7bf0fe3c0bd214295358"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"23ada29434ed0f0546193106a771f23c7dd9cf9c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    This is so that the domain ID of the Identity Provider gets set for the"},{"line_number":7,"context_line":"    federated user. If you have a custom implementation for the shadow users"},{"line_number":8,"context_line":"    backend, you will need to add the new parameter to your method"},{"line_number":9,"context_line":"    implementation."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3a461143_485a1285","line":9,"updated":"2017-01-25 21:23:31.000000000","message":"Another side effect is that all federated users now belong to the domain that the Identity Provider is registered to, right?","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"7df0d9b2d540994d668bf0747936add183bcbce2","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    This is so that the domain ID of the Identity Provider gets set for the"},{"line_number":7,"context_line":"    federated user. If you have a custom implementation for the shadow users"},{"line_number":8,"context_line":"    backend, you will need to add the new parameter to your method"},{"line_number":9,"context_line":"    implementation."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3a461143_fbd2a633","line":9,"in_reply_to":"3a461143_485a1285","updated":"2017-01-25 21:37:11.000000000","message":"Ah, true.","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"cdbc11c57b4ae41985a3bea3e881977e051d0f27","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    This is so that the domain ID of the Identity Provider gets set for the"},{"line_number":7,"context_line":"    federated user. If you have a custom implementation for the shadow users"},{"line_number":8,"context_line":"    backend, you will need to add the new parameter to your method"},{"line_number":9,"context_line":"    implementation."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"3a461143_3e997c6f","line":9,"in_reply_to":"3a461143_485a1285","updated":"2017-01-25 22:06:04.000000000","message":"Done","commit_id":"f210d88347c3064cc881792f835c38075ce59a50"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c6f9235a39174f8f6b2b315ac2210b459ebfb91a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    [`bug 1642687 \u003chttps://bugs.launchpad.net/keystone/+bug/1642687\u003e`_]"},{"line_number":13,"context_line":"    Prior to this release federated users did not belong to a real domain. Now"},{"line_number":14,"context_line":"    when federated users are created, as part of shadowing users, federated"},{"line_number":15,"context_line":"    users will belong to the domain Id of the Identity Provider."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":16,"id":"3a461143_dec15830","line":15,"updated":"2017-01-25 22:06:59.000000000","message":"++","commit_id":"c19f2431524be224b4c027b2a56398d7c3e5e18b"}]}
