)]}'
{"keystone/identity/controllers.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"5fb18922536736e4b4646831ffabb0dc52fcff9b","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            group_cntl._delete_group(context, group)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        # And finally, delete the users themselves"},{"line_number":504,"context_line":"        user_cntl \u003d UserV3()"},{"line_number":505,"context_line":"        for user in user_ids:"},{"line_number":506,"context_line":"            user_cntl._delete_user(context, user)"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F%2Fxc%3D","line":504,"updated":"2013-03-17 02:59:05.000000000","message":"You might have a race condition here.  You probably want to disable the users first and foremost before doing anything else.  A user could potentially be logged in, and creating tokens and Credentials while you are deleting them, and you could end up with one hanging around after you thought yoyu had removed them all.  This is non-transactional, after all.","commit_id":"9ae1df275f67c90f687a027ff69be488f6a00f53"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"66080da6e03e641f9231c018bf2cbfb76732cdf7","unresolved":false,"context_lines":[{"line_number":501,"context_line":"            group_cntl._delete_group(context, group)"},{"line_number":502,"context_line":""},{"line_number":503,"context_line":"        # And finally, delete the users themselves"},{"line_number":504,"context_line":"        user_cntl \u003d UserV3()"},{"line_number":505,"context_line":"        for user in user_ids:"},{"line_number":506,"context_line":"            user_cntl._delete_user(context, user)"},{"line_number":507,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAOH%2F%2F%2FHw%3D","line":504,"in_reply_to":"AAAAOH%2F%2F%2Fxc%3D","updated":"2013-03-18 09:39:50.000000000","message":"In theory no, since the domain is disabled - so no users should be able to authenticate.  However, there are some bugs in this area (I just raised 1156516), so will add some prep code that disables all the users explicitly.","commit_id":"9ae1df275f67c90f687a027ff69be488f6a00f53"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        The order we delete entities is also important since we want to"},{"line_number":457,"context_line":"        retain referential integrity throughout, and many of the entities"},{"line_number":458,"context_line":"        have foreign key relationship with each other. The following"},{"line_number":459,"context_line":"        order is used:"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        Projects: Could have FKs to user and groups for grants"},{"line_number":462,"context_line":"        Groups: Could have FKs to users for membership and"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B7U%3D","line":459,"updated":"2013-03-18 15:10:47.000000000","message":"This is a driver-specific explanation","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6dba9c0ec500c90ff2fe42fe4bafff7315a0d124","unresolved":false,"context_lines":[{"line_number":456,"context_line":"        The order we delete entities is also important since we want to"},{"line_number":457,"context_line":"        retain referential integrity throughout, and many of the entities"},{"line_number":458,"context_line":"        have foreign key relationship with each other. The following"},{"line_number":459,"context_line":"        order is used:"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"        Projects: Could have FKs to user and groups for grants"},{"line_number":462,"context_line":"        Groups: Could have FKs to users for membership and"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B2o%3D","line":459,"in_reply_to":"AAAAOH%2F%2F%2B7U%3D","updated":"2013-03-18 16:14:11.000000000","message":"Done","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # the risk that things are changing under our feet.  In theory this"},{"line_number":469,"context_line":"        # step should not be necessary, since users of a disabled domain"},{"line_number":470,"context_line":"        # are prevented from authenticating - however there are some"},{"line_number":471,"context_line":"        # existing bugs in this area."},{"line_number":472,"context_line":"        # TODO(henry-nash) Consider removing this code once bugs like 1156516"},{"line_number":473,"context_line":"        # have been fixed."},{"line_number":474,"context_line":"        user_refs \u003d self.identity_api.list_users(context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B7Q%3D","line":471,"updated":"2013-03-18 15:10:47.000000000","message":"either cite the bug(s) so this can be understood / addressed in the future, or remove the comment -- the TODO doesn\u0027t look related although I assume it\u0027s intended to be","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6dba9c0ec500c90ff2fe42fe4bafff7315a0d124","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        # the risk that things are changing under our feet.  In theory this"},{"line_number":469,"context_line":"        # step should not be necessary, since users of a disabled domain"},{"line_number":470,"context_line":"        # are prevented from authenticating - however there are some"},{"line_number":471,"context_line":"        # existing bugs in this area."},{"line_number":472,"context_line":"        # TODO(henry-nash) Consider removing this code once bugs like 1156516"},{"line_number":473,"context_line":"        # have been fixed."},{"line_number":474,"context_line":"        user_refs \u003d self.identity_api.list_users(context)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B2g%3D","line":471,"in_reply_to":"AAAAOH%2F%2F%2B7Q%3D","updated":"2013-03-18 16:14:11.000000000","message":"Done","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        proj_ids \u003d [r[\u0027id\u0027] for r in proj_refs if r[\u0027domain_id\u0027] \u003d\u003d domain_id]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        # First delete the projects themselves"},{"line_number":491,"context_line":"        prod_cntl \u003d ProjectV3()"},{"line_number":492,"context_line":"        for proj in proj_ids:"},{"line_number":493,"context_line":"            prod_cntl._delete_project(context, proj)"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B7M%3D","line":491,"updated":"2013-03-18 15:10:47.000000000","message":"prod_cntl? project_controller?","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6dba9c0ec500c90ff2fe42fe4bafff7315a0d124","unresolved":false,"context_lines":[{"line_number":488,"context_line":"        proj_ids \u003d [r[\u0027id\u0027] for r in proj_refs if r[\u0027domain_id\u0027] \u003d\u003d domain_id]"},{"line_number":489,"context_line":""},{"line_number":490,"context_line":"        # First delete the projects themselves"},{"line_number":491,"context_line":"        prod_cntl \u003d ProjectV3()"},{"line_number":492,"context_line":"        for proj in proj_ids:"},{"line_number":493,"context_line":"            prod_cntl._delete_project(context, proj)"},{"line_number":494,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B2U%3D","line":491,"in_reply_to":"AAAAOH%2F%2F%2B7M%3D","updated":"2013-03-18 16:14:11.000000000","message":"Done","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # changes, etc)"},{"line_number":513,"context_line":"        if domain_id \u003d\u003d DEFAULT_DOMAIN_ID:"},{"line_number":514,"context_line":"            raise exception.ForbiddenAction(action\u003d\u0027delete the default domain\u0027)"},{"line_number":515,"context_line":"        else:"},{"line_number":516,"context_line":"            # To help avoid inadvertent deletes, we insist that the domain"},{"line_number":517,"context_line":"            # has been previously disabled.  This also prevents a user deleting"},{"line_number":518,"context_line":"            # their own domain since, once it is disabled, they won\u0027t be able"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B7E%3D","line":515,"updated":"2013-03-18 15:10:47.000000000","message":"both else\u0027s really aren\u0027t necessary -- both conditionals are designed to short circuit","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6dba9c0ec500c90ff2fe42fe4bafff7315a0d124","unresolved":false,"context_lines":[{"line_number":512,"context_line":"        # changes, etc)"},{"line_number":513,"context_line":"        if domain_id \u003d\u003d DEFAULT_DOMAIN_ID:"},{"line_number":514,"context_line":"            raise exception.ForbiddenAction(action\u003d\u0027delete the default domain\u0027)"},{"line_number":515,"context_line":"        else:"},{"line_number":516,"context_line":"            # To help avoid inadvertent deletes, we insist that the domain"},{"line_number":517,"context_line":"            # has been previously disabled.  This also prevents a user deleting"},{"line_number":518,"context_line":"            # their own domain since, once it is disabled, they won\u0027t be able"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B18%3D","line":515,"in_reply_to":"AAAAOH%2F%2F%2B7E%3D","updated":"2013-03-18 16:14:11.000000000","message":"Done","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":520,"context_line":"            ref \u003d self.identity_api.get_domain(context, domain_id)"},{"line_number":521,"context_line":"            if ref[\u0027enabled\u0027]:"},{"line_number":522,"context_line":"                raise exception.ForbiddenAction("},{"line_number":523,"context_line":"                    action\u003d\u0027delete a domain that is not disabled\u0027)"},{"line_number":524,"context_line":"            else:"},{"line_number":525,"context_line":"                # OK, we are go for delete!"},{"line_number":526,"context_line":"                self._delete_domain_contents(context, domain_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B7A%3D","line":523,"updated":"2013-03-18 15:10:47.000000000","message":"cool","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":578,"context_line":"                self.identity_api.delete_credential(context, cred[\u0027id\u0027])"},{"line_number":579,"context_line":"        # Finally delete the project itself - the backend is"},{"line_number":580,"context_line":"        # responsible for deleting any role assignments related"},{"line_number":581,"context_line":"        # to this project"},{"line_number":582,"context_line":"        return self.identity_api.delete_project(context, project_id)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B68%3D","line":581,"updated":"2013-03-18 15:10:47.000000000","message":"cool","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"f41fcb1e6bae1cb14695aef338e1ee883e883a59","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        # users of a disabled domain are prevented from authenticating."},{"line_number":470,"context_line":"        # However there are some existing bugs in this area (e.g. 1130236)."},{"line_number":471,"context_line":"        # Consider removing this code once these have been fixed."},{"line_number":472,"context_line":"        user_refs \u003d self.identity_api.list_users(context)"},{"line_number":473,"context_line":"        user_refs \u003d [r for r in user_refs if r[\u0027domain_id\u0027] \u003d\u003d domain_id]"},{"line_number":474,"context_line":"        for user in user_refs:"},{"line_number":475,"context_line":"            if user[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F%2Byo%3D","line":472,"updated":"2013-03-18 16:51:51.000000000","message":"How does disable domain supposed to work? If some one is fixing \"disabled domain\" I believe they will repeat the same logic ( iterating over groups,users, credentials and disabling them, and revoking the existing token for the domain).\n\nBetter approach would be to fix \u0027disable domain\" which recursively disables its members.  Delete domain simple calls disable on  the domain and then deletes it\n\nAlso what happens to issued token for the users in the domain?\n\nAlso what will happen to the tokens acquired using scoped domain?   A user may not be part of this domain, but he would have got token scoped to this domain.","commit_id":"90fcb996cb2acf7b829b2cccfa485c09e4c0d0e8"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"3dbacdfd4594908421c38e00d49888a619032b59","unresolved":false,"context_lines":[{"line_number":469,"context_line":"        # users of a disabled domain are prevented from authenticating."},{"line_number":470,"context_line":"        # However there are some existing bugs in this area (e.g. 1130236)."},{"line_number":471,"context_line":"        # Consider removing this code once these have been fixed."},{"line_number":472,"context_line":"        user_refs \u003d self.identity_api.list_users(context)"},{"line_number":473,"context_line":"        user_refs \u003d [r for r in user_refs if r[\u0027domain_id\u0027] \u003d\u003d domain_id]"},{"line_number":474,"context_line":"        for user in user_refs:"},{"line_number":475,"context_line":"            if user[\u0027enabled\u0027]:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAOH%2F%2F%2BnU%3D","line":472,"in_reply_to":"AAAAOH%2F%2F%2Byo%3D","updated":"2013-03-18 18:25:18.000000000","message":"The \"disable first and then delete \" logic is just to make sure that people don\u0027t delete by accident, and thus it should not be done in here.  Ideally, two different users, with different roles would be required to disable and then delete.","commit_id":"90fcb996cb2acf7b829b2cccfa485c09e4c0d0e8"}],"tests/test_v3_identity.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ac4b121cdffa5f001f1e8d0d2a8b395a86c36d29","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        self.user.pop(\u0027password\u0027)"},{"line_number":189,"context_line":"        self.assertDictEqual(r, self.user)"},{"line_number":190,"context_line":"        r \u003d self.identity_api.get_credential(self.credential[\u0027id\u0027])"},{"line_number":191,"context_line":"        self.assertDictEqual(r, self.credential)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"    # project crud tests"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAOH%2F%2F%2B6o%3D","line":191,"updated":"2013-03-18 15:10:47.000000000","message":"nice coverage","commit_id":"3388255792ff05b4b27ff6558e1a669d3a3cd2e1"}]}
