)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"149694307b87b90b2c1c3147d855d57bc3eea33a","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This commit also removes a significant amount of logic from the"},{"line_number":18,"context_line":"assignment API that used to notify the token API when assignments"},{"line_number":19,"context_line":"were deleted. This made sense when tokens were written to disk,"},{"line_number":20,"context_line":"because there was an opportunity to invalid them when users were"},{"line_number":21,"context_line":"removed from projects. This is no longer needed since we do"},{"line_number":22,"context_line":"validation online and we don\u0027t persist tokens anymore."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_7975f2f9","line":20,"range":{"start_line":20,"start_character":36,"end_line":20,"end_character":43},"updated":"2018-02-16 15:16:38.000000000","message":"nit - invalidate","commit_id":"d49b24e469726c0934c39d400590cc9f146883d1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"90a3a2758d928dcd1641aa813cc18cab8c1c68db","unresolved":false,"context_lines":[{"line_number":17,"context_line":"This commit also removes a significant amount of logic from the"},{"line_number":18,"context_line":"assignment API that used to notify the token API when assignments"},{"line_number":19,"context_line":"were deleted. This made sense when tokens were written to disk,"},{"line_number":20,"context_line":"because there was an opportunity to invalid them when users were"},{"line_number":21,"context_line":"removed from projects. This is no longer needed since we do"},{"line_number":22,"context_line":"validation online and we don\u0027t persist tokens anymore."},{"line_number":23,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa0c359_8872dfac","line":20,"range":{"start_line":20,"start_character":36,"end_line":20,"end_character":43},"in_reply_to":"3fa0c359_7975f2f9","updated":"2018-02-16 21:41:20.000000000","message":"Done","commit_id":"d49b24e469726c0934c39d400590cc9f146883d1"}],"keystone/assignment/core.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"53ec48527257a7dc5df9dd3b456a2daa2942a115","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"        # user or user+project IDs for the tokens we need to delete"},{"line_number":1058,"context_line":"        user_ids \u003d set()"},{"line_number":1059,"context_line":"        user_and_project_ids \u003d list()"},{"line_number":1060,"context_line":"        cache_dropped \u003d False"},{"line_number":1061,"context_line":"        for assignment in assignments:"},{"line_number":1062,"context_line":"            # If we have a project assignment, then record both the user and"},{"line_number":1063,"context_line":"            # project IDs so we can target the right token to delete. If it is"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_59494489","line":1060,"range":{"start_line":1060,"start_character":8,"end_line":1060,"end_character":29},"updated":"2018-02-14 20:41:43.000000000","message":"This is always false, is that intended? It is never set to True within the local scope.","commit_id":"4bdf063c6a42efac19578861aa92cce5c2edf9f7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"109526ec05d6865df58346238bc80139a2baa977","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"        # user or user+project IDs for the tokens we need to delete"},{"line_number":1058,"context_line":"        user_ids \u003d set()"},{"line_number":1059,"context_line":"        user_and_project_ids \u003d list()"},{"line_number":1060,"context_line":"        cache_dropped \u003d False"},{"line_number":1061,"context_line":"        for assignment in assignments:"},{"line_number":1062,"context_line":"            # If we have a project assignment, then record both the user and"},{"line_number":1063,"context_line":"            # project IDs so we can target the right token to delete. If it is"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_72b535cd","line":1060,"range":{"start_line":1060,"start_character":8,"end_line":1060,"end_character":29},"in_reply_to":"3fa0c359_59494489","updated":"2018-02-14 22:38:11.000000000","message":"Done","commit_id":"4bdf063c6a42efac19578861aa92cce5c2edf9f7"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f0d4e059357c8210c912bcdb7190fc12ff1dc485","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        # Use set() to process the list to remove any duplicates"},{"line_number":94,"context_line":"        return list(set([x[\u0027user_id\u0027] for x in assignment_list]))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def delete_app_creds_for_role(self, role_id):"},{"line_number":97,"context_line":"        \"\"\"Delete all application credential for a specific role."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :param role_id: role identifier"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_7203f574","line":96,"range":{"start_line":96,"start_character":8,"end_line":96,"end_character":33},"updated":"2018-02-14 22:42:39.000000000","message":"This should say something about a notification, since it\u0027s not the actual thing doing the app cred removal.","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7b1ecc2bb623fb6dfe8ce0ea50aed6364536e161","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        # Use set() to process the list to remove any duplicates"},{"line_number":94,"context_line":"        return list(set([x[\u0027user_id\u0027] for x in assignment_list]))"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def delete_app_creds_for_role(self, role_id):"},{"line_number":97,"context_line":"        \"\"\"Delete all application credential for a specific role."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        :param role_id: role identifier"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_9277a109","line":96,"range":{"start_line":96,"start_character":8,"end_line":96,"end_character":33},"in_reply_to":"3fa0c359_7203f574","updated":"2018-02-14 22:46:52.000000000","message":"Done","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e2cbb074cddc4e0aae075839124457f19666d27f","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                )"},{"line_number":351,"context_line":"                if CONF.token.revoke_by_id:"},{"line_number":352,"context_line":"                    # NOTE(morganfainberg): The user ids are the important part"},{"line_number":353,"context_line":"                    # for invalidating tokens below, so extract them here."},{"line_number":354,"context_line":"                    for user in PROVIDERS.identity_api.list_users_in_group("},{"line_number":355,"context_line":"                            group_id):"},{"line_number":356,"context_line":"                        self._emit_revoke_user_grant("}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_da7c4974","side":"PARENT","line":353,"updated":"2018-02-15 17:38:15.000000000","message":"I feel like this comment got ignored, don\u0027t we still want to extract the user ids so they can be part of the notification?","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2c9234b50430dafbf96f0488f2820650d34b82a9","unresolved":false,"context_lines":[{"line_number":350,"context_line":"                )"},{"line_number":351,"context_line":"                if CONF.token.revoke_by_id:"},{"line_number":352,"context_line":"                    # NOTE(morganfainberg): The user ids are the important part"},{"line_number":353,"context_line":"                    # for invalidating tokens below, so extract them here."},{"line_number":354,"context_line":"                    for user in PROVIDERS.identity_api.list_users_in_group("},{"line_number":355,"context_line":"                            group_id):"},{"line_number":356,"context_line":"                        self._emit_revoke_user_grant("}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_4a038810","side":"PARENT","line":353,"in_reply_to":"3fa0c359_da7c4974","updated":"2018-02-15 20:36:24.000000000","message":"Similar comment here as for projects. If we have a bunch of users with Member assigned, and then we delete Member, do we want to emit a log message for each permutation?\n\nDoes emitting a single log warning specifically for Member work?\n\nI think the reason why user_id was important for notifications before we took the non-persistent approach was that we could use the user\u0027s ID and query the database for all tokens for a specific user.","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e2cbb074cddc4e0aae075839124457f19666d27f","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"        return ret"},{"line_number":1356,"context_line":""},{"line_number":1357,"context_line":"    def delete_role(self, role_id, initiator\u003dNone):"},{"line_number":1358,"context_line":"        PROVIDERS.assignment_api.delete_tokens_for_role_assignments(role_id)"},{"line_number":1359,"context_line":"        PROVIDERS.assignment_api.delete_role_assignments(role_id)"},{"line_number":1360,"context_line":"        self.driver.delete_role(role_id)"},{"line_number":1361,"context_line":"        notifications.Audit.deleted(self._ROLE, role_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_3a3bed9c","side":"PARENT","line":1358,"updated":"2018-02-15 17:38:15.000000000","message":"We really don\u0027t need this at all? Could use a little more explanation in the commit message, since at a glance it doesn\u0027t look like it\u0027s persistence-only.","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2c9234b50430dafbf96f0488f2820650d34b82a9","unresolved":false,"context_lines":[{"line_number":1355,"context_line":"        return ret"},{"line_number":1356,"context_line":""},{"line_number":1357,"context_line":"    def delete_role(self, role_id, initiator\u003dNone):"},{"line_number":1358,"context_line":"        PROVIDERS.assignment_api.delete_tokens_for_role_assignments(role_id)"},{"line_number":1359,"context_line":"        PROVIDERS.assignment_api.delete_role_assignments(role_id)"},{"line_number":1360,"context_line":"        self.driver.delete_role(role_id)"},{"line_number":1361,"context_line":"        notifications.Audit.deleted(self._ROLE, role_id, initiator)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_9d58f8fa","side":"PARENT","line":1358,"in_reply_to":"3fa0c359_3a3bed9c","updated":"2018-02-15 20:36:24.000000000","message":"Done","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"149694307b87b90b2c1c3147d855d57bc3eea33a","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            target_id \u003d project_id"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        reason \u003d ("},{"line_number":292,"context_line":"            \u0027Invalidating the token cache because role %(role_id)s was remove \u0027"},{"line_number":293,"context_line":"            \u0027from %(actor_type)s %(actor_id)s on %(target_type)s \u0027"},{"line_number":294,"context_line":"            \u0027%(target_id)s.\u0027 %"},{"line_number":295,"context_line":"            {\u0027role_id\u0027: role_id, \u0027actor_type\u0027: actor_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_8f5f500d","line":292,"range":{"start_line":292,"start_character":71,"end_line":292,"end_character":77},"updated":"2018-02-16 15:16:38.000000000","message":"nit - removed","commit_id":"d49b24e469726c0934c39d400590cc9f146883d1"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"90a3a2758d928dcd1641aa813cc18cab8c1c68db","unresolved":false,"context_lines":[{"line_number":289,"context_line":"            target_id \u003d project_id"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"        reason \u003d ("},{"line_number":292,"context_line":"            \u0027Invalidating the token cache because role %(role_id)s was remove \u0027"},{"line_number":293,"context_line":"            \u0027from %(actor_type)s %(actor_id)s on %(target_type)s \u0027"},{"line_number":294,"context_line":"            \u0027%(target_id)s.\u0027 %"},{"line_number":295,"context_line":"            {\u0027role_id\u0027: role_id, \u0027actor_type\u0027: actor_type,"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa0c359_4864d7e5","line":292,"range":{"start_line":292,"start_character":71,"end_line":292,"end_character":77},"in_reply_to":"3fa0c359_8f5f500d","updated":"2018-02-16 21:41:20.000000000","message":"Done","commit_id":"d49b24e469726c0934c39d400590cc9f146883d1"}],"keystone/identity/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f0d4e059357c8210c912bcdb7190fc12ff1dc485","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            reason \u003d ("},{"line_number":1133,"context_line":"                \u0027Invalidating the token cache because user %(user_id)s was \u0027"},{"line_number":1134,"context_line":"                \u0027enabled or disabled. Authorization will be calculated and \u0027"},{"line_number":1135,"context_line":"                \u0027enforced accordingly they next time they authenticate or \u0027"},{"line_number":1136,"context_line":"                \u0027validate a token.\u0027 % {\u0027user_id\u0027: user_id}"},{"line_number":1137,"context_line":"            )"},{"line_number":1138,"context_line":"            notifications.invalidate_token_cache_notification(reason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_92048180","line":1135,"range":{"start_line":1135,"start_character":38,"end_line":1135,"end_character":42},"updated":"2018-02-14 22:42:39.000000000","message":"the*","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7b1ecc2bb623fb6dfe8ce0ea50aed6364536e161","unresolved":false,"context_lines":[{"line_number":1132,"context_line":"            reason \u003d ("},{"line_number":1133,"context_line":"                \u0027Invalidating the token cache because user %(user_id)s was \u0027"},{"line_number":1134,"context_line":"                \u0027enabled or disabled. Authorization will be calculated and \u0027"},{"line_number":1135,"context_line":"                \u0027enforced accordingly they next time they authenticate or \u0027"},{"line_number":1136,"context_line":"                \u0027validate a token.\u0027 % {\u0027user_id\u0027: user_id}"},{"line_number":1137,"context_line":"            )"},{"line_number":1138,"context_line":"            notifications.invalidate_token_cache_notification(reason)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_32680d20","line":1135,"range":{"start_line":1135,"start_character":38,"end_line":1135,"end_character":42},"in_reply_to":"3fa0c359_92048180","updated":"2018-02-14 22:46:52.000000000","message":"Done","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"}],"keystone/notifications.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f0d4e059357c8210c912bcdb7190fc12ff1dc485","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    \"\"\"A specific notification for invalidating the token cache."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    :param reason: The specific reason why the token cache is being"},{"line_number":188,"context_line":"                   invalidated."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    \"\"\""},{"line_number":191,"context_line":"    # Since keystone does a lot of work in the authentication and validation"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_9229e1f3","line":188,"updated":"2018-02-14 22:42:39.000000000","message":"Add a doc string type here.","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7b1ecc2bb623fb6dfe8ce0ea50aed6364536e161","unresolved":false,"context_lines":[{"line_number":185,"context_line":"    \"\"\"A specific notification for invalidating the token cache."},{"line_number":186,"context_line":""},{"line_number":187,"context_line":"    :param reason: The specific reason why the token cache is being"},{"line_number":188,"context_line":"                   invalidated."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    \"\"\""},{"line_number":191,"context_line":"    # Since keystone does a lot of work in the authentication and validation"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_b265fd47","line":188,"in_reply_to":"3fa0c359_9229e1f3","updated":"2018-02-14 22:46:52.000000000","message":"Done","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e2cbb074cddc4e0aae075839124457f19666d27f","unresolved":false,"context_lines":[{"line_number":205,"context_line":"        ACTIONS.internal, INVALIDATE_TOKEN_CACHE, resource_id, initiator,"},{"line_number":206,"context_line":"        public, reason\u003dreason"},{"line_number":207,"context_line":"    )"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"def _get_callback_info(callback):"},{"line_number":211,"context_line":"    \"\"\"Return list containing callback\u0027s module and name."}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_c09d420b","line":208,"updated":"2018-02-15 17:38:15.000000000","message":"awesome","commit_id":"625c5e74636d1385044ed6cb4b92e91e171b9c4f"}],"keystone/resource/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f0d4e059357c8210c912bcdb7190fc12ff1dc485","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            \u0027deleted. Authorization will be recalculated and enforced \u0027"},{"line_number":434,"context_line":"            \u0027accordingly the next time users authenticate or validate a token.\u0027"},{"line_number":435,"context_line":"        )"},{"line_number":436,"context_line":"        notifications.invalidate_token_cache_notification(reason)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def _post_delete_cleanup_project(self, project_id, project,"},{"line_number":439,"context_line":"                                     initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_d24689c1","line":436,"updated":"2018-02-14 22:42:39.000000000","message":"This isn\u0027t used anywhere else... just put it in the calling method. We can always break it out later if other places in this module need to use it.","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7b1ecc2bb623fb6dfe8ce0ea50aed6364536e161","unresolved":false,"context_lines":[{"line_number":433,"context_line":"            \u0027deleted. Authorization will be recalculated and enforced \u0027"},{"line_number":434,"context_line":"            \u0027accordingly the next time users authenticate or validate a token.\u0027"},{"line_number":435,"context_line":"        )"},{"line_number":436,"context_line":"        notifications.invalidate_token_cache_notification(reason)"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    def _post_delete_cleanup_project(self, project_id, project,"},{"line_number":439,"context_line":"                                     initiator\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa0c359_525a7983","line":436,"in_reply_to":"3fa0c359_d24689c1","updated":"2018-02-14 22:46:52.000000000","message":"Done","commit_id":"db511df9b312f38173bee8cb679ac638500afb7a"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"e2cbb074cddc4e0aae075839124457f19666d27f","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        project_user_ids \u003d ("},{"line_number":432,"context_line":"            PROVIDERS.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":433,"context_line":"        for user_id in project_user_ids:"},{"line_number":434,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":435,"context_line":"            notifications.Audit.internal("},{"line_number":436,"context_line":"                notifications.INVALIDATE_USER_PROJECT_TOKEN_PERSISTENCE,"},{"line_number":437,"context_line":"                payload"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_1a75d198","side":"PARENT","line":434,"updated":"2018-02-15 17:38:15.000000000","message":"We\u0027re losing the ability to give details of what caused the invalidation, why not recreate this payload information within the reason string?","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2c9234b50430dafbf96f0488f2820650d34b82a9","unresolved":false,"context_lines":[{"line_number":431,"context_line":"        project_user_ids \u003d ("},{"line_number":432,"context_line":"            PROVIDERS.assignment_api.list_user_ids_for_project(project_id))"},{"line_number":433,"context_line":"        for user_id in project_user_ids:"},{"line_number":434,"context_line":"            payload \u003d {\u0027user_id\u0027: user_id, \u0027project_id\u0027: project_id}"},{"line_number":435,"context_line":"            notifications.Audit.internal("},{"line_number":436,"context_line":"                notifications.INVALIDATE_USER_PROJECT_TOKEN_PERSISTENCE,"},{"line_number":437,"context_line":"                payload"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa0c359_2a587c54","side":"PARENT","line":434,"in_reply_to":"3fa0c359_1a75d198","updated":"2018-02-15 20:36:24.000000000","message":"If we delete a project that had tons of users assigned to it, should we emit a notification for each combination? What if we emit a log message saying the cache is going to be invalidate because Project Alpha was deleted?","commit_id":"0e0cedd0d519d52314a0c6850807b3cafcea18ff"}]}
