)]}'
{"keystone/common/sql/migrate_repo/versions/007_add_domain_tables.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"1a0d14246ea954137fb93a583896418e3adaa19f","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        meta,"},{"line_number":29,"context_line":"        sql.Column(\u0027id\u0027, sql.String(64), primary_key\u003dTrue),"},{"line_number":30,"context_line":"        sql.Column(\u0027name\u0027, sql.String(64), unique\u003dTrue, nullable\u003dFalse),"},{"line_number":31,"context_line":"        sql.Column(\u0027enabled\u0027, sql.Boolean, nullable\u003dFalse, default\u003dTrue),"},{"line_number":32,"context_line":"        sql.Column(\u0027extra\u0027, sql.Text()))"},{"line_number":33,"context_line":"    domain_table.create(migrate_engine, checkfirst\u003dTrue)"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fjck%3D","line":31,"updated":"2013-01-16 06:13:56.000000000","message":"Finally!","commit_id":"dc13bc3bd66eab76f00d78da4d05d1cfdfe041b5"}],"keystone/identity/controllers.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"1a0d14246ea954137fb93a583896418e3adaa19f","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                        context, user[\u0027id\u0027], {\u0027enabled\u0027: domain[\u0027enabled\u0027]})"},{"line_number":433,"context_line":"                    if not domain[\u0027enabled\u0027]:"},{"line_number":434,"context_line":"                        self.token_api.revoke_tokens(context, user_id\u003duser_id)"},{"line_number":435,"context_line":""},{"line_number":436,"context_line":"        return {\u0027domain\u0027: ref}"},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    @controller.protected"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2Fjcg%3D","line":435,"updated":"2013-01-16 06:13:56.000000000","message":"You don\u0027t need to do this! All we have to do is the prevent user from authenticating if his domain\u0027s been disabled, or scoped to a project in a domain that\u0027s been disabled. We just need to check this flag in authenticate().","commit_id":"dc13bc3bd66eab76f00d78da4d05d1cfdfe041b5"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1404b77dd85f69278d3af9b48ac5af1b332fd893","unresolved":false,"context_lines":[{"line_number":413,"context_line":"        # disable owned users \u0026 projects when the API user specifically set"},{"line_number":414,"context_line":"        #     enabled\u003dFalse"},{"line_number":415,"context_line":"        if not domain.get(\u0027enabled\u0027, True):"},{"line_number":416,"context_line":"            for user in self.identity_api.list_users(context):"},{"line_number":417,"context_line":"                # TODO(dolph): disable domain-scoped tokens"},{"line_number":418,"context_line":"                \"\"\""},{"line_number":419,"context_line":"                self.token_api.revoke_tokens("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FbqM%3D","line":416,"updated":"2013-01-22 19:21:42.000000000","message":"This could take some time....!  Maybe add a comment to perhaps optimize later by adding a provide list_users_for domain() ?","commit_id":"3fe186132ebaf1250b0055e0a7dc32ec1e6e5a67"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1404b77dd85f69278d3af9b48ac5af1b332fd893","unresolved":false,"context_lines":[{"line_number":428,"context_line":"                        user_id\u003duser[\u0027id\u0027])"},{"line_number":429,"context_line":"                else:"},{"line_number":430,"context_line":"                    # only revoke tokens on projects owned by this domain"},{"line_number":431,"context_line":"                    for project in self.identity_api.list_projects(context):"},{"line_number":432,"context_line":"                        if project.get(\u0027domain_id\u0027) \u003d\u003d domain_id:"},{"line_number":433,"context_line":"                            self.token_api.revoke_tokens("},{"line_number":434,"context_line":"                                context,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2FbqI%3D","line":431,"updated":"2013-01-22 19:21:42.000000000","message":"Same as above, although to a lesser extent","commit_id":"3fe186132ebaf1250b0055e0a7dc32ec1e6e5a67"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8518cf9cb142346a08d061b4b1c523a38bce7849","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                        user_id\u003duser[\u0027id\u0027])"},{"line_number":431,"context_line":"                else:"},{"line_number":432,"context_line":"                    # only revoke tokens on projects owned by this domain"},{"line_number":433,"context_line":"                    for project in self.identity_api.list_projects(context):"},{"line_number":434,"context_line":"                        if project.get(\u0027domain_id\u0027) \u003d\u003d domain_id:"},{"line_number":435,"context_line":"                            self.token_api.revoke_tokens("},{"line_number":436,"context_line":"                                context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FaCo%3D","line":433,"updated":"2013-01-23 19:26:29.000000000","message":"This looks extremely inefficient. Could list_projects() and domain filtering of those domains be done once and the results re-used?","commit_id":"c9b0f9205c47c822f476505c22291c8bfe69e998"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"70ab9139cf52ea91cbe9168d5ea61181d7387bed","unresolved":false,"context_lines":[{"line_number":430,"context_line":"                        user_id\u003duser[\u0027id\u0027])"},{"line_number":431,"context_line":"                else:"},{"line_number":432,"context_line":"                    # only revoke tokens on projects owned by this domain"},{"line_number":433,"context_line":"                    for project in self.identity_api.list_projects(context):"},{"line_number":434,"context_line":"                        if project.get(\u0027domain_id\u0027) \u003d\u003d domain_id:"},{"line_number":435,"context_line":"                            self.token_api.revoke_tokens("},{"line_number":436,"context_line":"                                context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FZw8%3D","line":433,"in_reply_to":"AAAAM3%2F%2FaCo%3D","updated":"2013-01-23 21:32:54.000000000","message":"it is extremely inefficient, but that\u0027s certainly a do-able improvement","commit_id":"c9b0f9205c47c822f476505c22291c8bfe69e998"}],"keystone/token/controllers.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"8518cf9cb142346a08d061b4b1c523a38bce7849","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            user_domain_ref \u003d self.identity_api.get_domain("},{"line_number":90,"context_line":"                context,"},{"line_number":91,"context_line":"                user_ref[\u0027domain_id\u0027])"},{"line_number":92,"context_line":"            if user_domain_ref and not user_domain_ref.get(\u0027enabled\u0027, True):"},{"line_number":93,"context_line":"                msg \u003d \u0027Domain is disabled: %s\u0027 % user_domain_ref[\u0027id\u0027]"},{"line_number":94,"context_line":"                LOG.warning(msg)"},{"line_number":95,"context_line":"                raise exception.Unauthorized(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FZ%2F8%3D","line":92,"updated":"2013-01-23 19:26:29.000000000","message":"Should the domain be considered to be invalid and the authentication rejected if the user\u0027s domain isn\u0027t found (user_domain_ref is None)?","commit_id":"c9b0f9205c47c822f476505c22291c8bfe69e998"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"70ab9139cf52ea91cbe9168d5ea61181d7387bed","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            user_domain_ref \u003d self.identity_api.get_domain("},{"line_number":90,"context_line":"                context,"},{"line_number":91,"context_line":"                user_ref[\u0027domain_id\u0027])"},{"line_number":92,"context_line":"            if user_domain_ref and not user_domain_ref.get(\u0027enabled\u0027, True):"},{"line_number":93,"context_line":"                msg \u003d \u0027Domain is disabled: %s\u0027 % user_domain_ref[\u0027id\u0027]"},{"line_number":94,"context_line":"                LOG.warning(msg)"},{"line_number":95,"context_line":"                raise exception.Unauthorized(msg)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAM3%2F%2FZw4%3D","line":92,"in_reply_to":"AAAAM3%2F%2FZ%2F8%3D","updated":"2013-01-23 21:32:54.000000000","message":"yes, but not yet because we don\u0027t have the migration in place to support that logic","commit_id":"c9b0f9205c47c822f476505c22291c8bfe69e998"}]}
