)]}'
{"keystone/assignment/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        user_ids \u003d set()"},{"line_number":1080,"context_line":"        user_and_project_ids \u003d list()"},{"line_number":1081,"context_line":"        for assignment in assignments:"},{"line_number":1082,"context_line":"            # If we have a project assignment, then record both the user and"},{"line_number":1083,"context_line":"            # project IDs so we can target the right token to delete. If it is"},{"line_number":1084,"context_line":"            # a domain assignment, we might as well kill all the tokens for"},{"line_number":1085,"context_line":"            # the user, since in the vast majority of cases all the tokens"},{"line_number":1086,"context_line":"            # for a user will be within one domain anyway, so not worth"},{"line_number":1087,"context_line":"            # trying to delete tokens for each project in the domain."},{"line_number":1088,"context_line":"            if \u0027user_id\u0027 in assignment:"},{"line_number":1089,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    user_and_project_ids.append("}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_28fe3405","line":1087,"range":{"start_line":1082,"start_character":12,"end_line":1087,"end_character":69},"updated":"2017-12-14 17:40:02.000000000","message":"Update this comment to reflect logic for system-scoped tokens.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"001353ac6c0a1f23c9fe88496cc4d459f72a4aed","unresolved":false,"context_lines":[{"line_number":1079,"context_line":"        user_ids \u003d set()"},{"line_number":1080,"context_line":"        user_and_project_ids \u003d list()"},{"line_number":1081,"context_line":"        for assignment in assignments:"},{"line_number":1082,"context_line":"            # If we have a project assignment, then record both the user and"},{"line_number":1083,"context_line":"            # project IDs so we can target the right token to delete. If it is"},{"line_number":1084,"context_line":"            # a domain assignment, we might as well kill all the tokens for"},{"line_number":1085,"context_line":"            # the user, since in the vast majority of cases all the tokens"},{"line_number":1086,"context_line":"            # for a user will be within one domain anyway, so not worth"},{"line_number":1087,"context_line":"            # trying to delete tokens for each project in the domain."},{"line_number":1088,"context_line":"            if \u0027user_id\u0027 in assignment:"},{"line_number":1089,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    user_and_project_ids.append("}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_1e27eab8","line":1087,"range":{"start_line":1082,"start_character":12,"end_line":1087,"end_character":69},"in_reply_to":"df87a7cf_28fe3405","updated":"2017-12-14 19:18:54.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    user_and_project_ids.append("},{"line_number":1091,"context_line":"                        (assignment[\u0027user_id\u0027], assignment[\u0027project_id\u0027]))"},{"line_number":1092,"context_line":"                elif \u0027domain_id\u0027 or \u0027system\u0027 in assignment:"},{"line_number":1093,"context_line":"                    self._emit_invalidate_user_token_persistence("},{"line_number":1094,"context_line":"                        assignment[\u0027user_id\u0027])"},{"line_number":1095,"context_line":"            elif \u0027group_id\u0027 in assignment:"},{"line_number":1096,"context_line":"                # Add in any users for this group, being tolerant of any"},{"line_number":1097,"context_line":"                # cross-driver database integrity errors."}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_6d068e23","line":1094,"range":{"start_line":1092,"start_character":16,"end_line":1094,"end_character":46},"updated":"2017-12-14 17:40:02.000000000","message":"When a role is deleted, this is the bit that makes sure the entire token cache region is dropped.\n\nFor project-scoped tokens we\u0027re more methodical about removing tokens from the cache. For domains, we just drop the entire cache for the user in question. This bit makes it so that when roles are removed, all a users tokens are invalidated from the cache.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"001353ac6c0a1f23c9fe88496cc4d459f72a4aed","unresolved":false,"context_lines":[{"line_number":1089,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    user_and_project_ids.append("},{"line_number":1091,"context_line":"                        (assignment[\u0027user_id\u0027], assignment[\u0027project_id\u0027]))"},{"line_number":1092,"context_line":"                elif \u0027domain_id\u0027 or \u0027system\u0027 in assignment:"},{"line_number":1093,"context_line":"                    self._emit_invalidate_user_token_persistence("},{"line_number":1094,"context_line":"                        assignment[\u0027user_id\u0027])"},{"line_number":1095,"context_line":"            elif \u0027group_id\u0027 in assignment:"},{"line_number":1096,"context_line":"                # Add in any users for this group, being tolerant of any"},{"line_number":1097,"context_line":"                # cross-driver database integrity errors."}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_3e2c2e98","line":1094,"range":{"start_line":1092,"start_character":16,"end_line":1094,"end_character":46},"in_reply_to":"df87a7cf_6d068e23","updated":"2017-12-14 19:18:54.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"55afd2037347a7fc2e63490b7b0b739f076fa7cd","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                    for user in users:"},{"line_number":1087,"context_line":"                        user_and_project_ids.append("},{"line_number":1088,"context_line":"                            (user[\u0027id\u0027], assignment[\u0027project_id\u0027]))"},{"line_number":1089,"context_line":"                elif \u0027domain_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    for user in users:"},{"line_number":1091,"context_line":"                        self._emit_invalidate_user_token_persistence("},{"line_number":1092,"context_line":"                            user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_b5cfcb7d","line":1089,"updated":"2018-01-23 19:51:10.000000000","message":"Should we check for system also?","commit_id":"6cd12d457899224121b50d17e32761edc2109e07"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"31aafa9fc17d5a7935d313bce5395d1186ed89b4","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                    for user in users:"},{"line_number":1087,"context_line":"                        user_and_project_ids.append("},{"line_number":1088,"context_line":"                            (user[\u0027id\u0027], assignment[\u0027project_id\u0027]))"},{"line_number":1089,"context_line":"                elif \u0027domain_id\u0027 in assignment:"},{"line_number":1090,"context_line":"                    for user in users:"},{"line_number":1091,"context_line":"                        self._emit_invalidate_user_token_persistence("},{"line_number":1092,"context_line":"                            user[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_08f0e166","line":1089,"in_reply_to":"7f96bb07_b5cfcb7d","updated":"2018-01-23 22:40:03.000000000","message":"Done","commit_id":"6cd12d457899224121b50d17e32761edc2109e07"}],"keystone/auth/controllers.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.authenticate(request, auth_info, auth_context)"},{"line_number":119,"context_line":"            if auth_context.get(\u0027access_token_id\u0027):"},{"line_number":120,"context_line":"                auth_info.set_scope(None, auth_context[\u0027project_id\u0027], None)"},{"line_number":121,"context_line":"            self._check_and_set_default_scoping(auth_info, auth_context)"},{"line_number":122,"context_line":"            (domain_id, project_id, trust, unscoped, system_scoped) \u003d ("},{"line_number":123,"context_line":"                auth_info.get_scope()"},{"line_number":124,"context_line":"            )"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"            # NOTE(notmorgan): only methods that actually run and succeed will"},{"line_number":127,"context_line":"            # be in the auth_context[\u0027method_names\u0027] list. Do not blindly take"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_282714b9","line":124,"range":{"start_line":121,"start_character":12,"end_line":124,"end_character":13},"updated":"2017-12-14 17:40:02.000000000","message":"The get_scope() method here is called twice, back-to-back. There is a lot we can do to optimize and simplify this code. The tough part is not doing it here to prevent scope creep.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            is_domain \u003d auth_context.get(\u0027is_domain\u0027)"},{"line_number":144,"context_line":"            (token_id, token_data) \u003d self.token_provider_api.issue_token("},{"line_number":145,"context_line":"                auth_context[\u0027user_id\u0027], method_names, expires_at\u003dexpires_at,"},{"line_number":146,"context_line":"                system_scoped\u003dsystem_scoped, project_id\u003dproject_id,"},{"line_number":147,"context_line":"                is_domain\u003dis_domain, domain_id\u003ddomain_id,"},{"line_number":148,"context_line":"                auth_context\u003dauth_context, trust\u003dtrust,"},{"line_number":149,"context_line":"                include_catalog\u003dinclude_catalog,"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_284cf474","line":146,"range":{"start_line":146,"start_character":30,"end_line":146,"end_character":43},"updated":"2017-12-14 17:40:02.000000000","message":"Right now - this comes back as a string from the AuthInfo object. Do we want to keep it as a string, or make it a boolean value?\n\nAll logic in the token provider API and underlying providers evaluate `system_scoped` as a boolean, even though it is a string.\n\nThoughts?","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            if auth_context.get(\u0027access_token_id\u0027):"},{"line_number":117,"context_line":"                auth_info.set_scope(None, auth_context[\u0027project_id\u0027], None)"},{"line_number":118,"context_line":"            self._check_and_set_default_scoping(auth_info, auth_context)"},{"line_number":119,"context_line":"            (domain_id, project_id, trust, unscoped, system_scoped) \u003d ("},{"line_number":120,"context_line":"                auth_info.get_scope()"},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_b1c16683","line":119,"range":{"start_line":119,"start_character":53,"end_line":119,"end_character":66},"updated":"2018-01-21 15:59:07.000000000","message":"Fix this to not be a boolean.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            if auth_context.get(\u0027access_token_id\u0027):"},{"line_number":117,"context_line":"                auth_info.set_scope(None, auth_context[\u0027project_id\u0027], None)"},{"line_number":118,"context_line":"            self._check_and_set_default_scoping(auth_info, auth_context)"},{"line_number":119,"context_line":"            (domain_id, project_id, trust, unscoped, system_scoped) \u003d ("},{"line_number":120,"context_line":"                auth_info.get_scope()"},{"line_number":121,"context_line":"            )"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_91e54a0d","line":119,"range":{"start_line":119,"start_character":53,"end_line":119,"end_character":66},"in_reply_to":"7f96bb07_b1c16683","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            is_domain \u003d auth_context.get(\u0027is_domain\u0027)"},{"line_number":141,"context_line":"            (token_id, token_data) \u003d self.token_provider_api.issue_token("},{"line_number":142,"context_line":"                auth_context[\u0027user_id\u0027], method_names, expires_at\u003dexpires_at,"},{"line_number":143,"context_line":"                system_scoped\u003dsystem_scoped, project_id\u003dproject_id,"},{"line_number":144,"context_line":"                is_domain\u003dis_domain, domain_id\u003ddomain_id,"},{"line_number":145,"context_line":"                auth_context\u003dauth_context, trust\u003dtrust,"},{"line_number":146,"context_line":"                include_catalog\u003dinclude_catalog,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_71bbde0d","line":143,"range":{"start_line":143,"start_character":43,"end_line":143,"end_character":44},"updated":"2018-01-21 15:59:07.000000000","message":"Fix this to not be a boolean.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            is_domain \u003d auth_context.get(\u0027is_domain\u0027)"},{"line_number":141,"context_line":"            (token_id, token_data) \u003d self.token_provider_api.issue_token("},{"line_number":142,"context_line":"                auth_context[\u0027user_id\u0027], method_names, expires_at\u003dexpires_at,"},{"line_number":143,"context_line":"                system_scoped\u003dsystem_scoped, project_id\u003dproject_id,"},{"line_number":144,"context_line":"                is_domain\u003dis_domain, domain_id\u003ddomain_id,"},{"line_number":145,"context_line":"                auth_context\u003dauth_context, trust\u003dtrust,"},{"line_number":146,"context_line":"                include_catalog\u003dinclude_catalog,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_b1e2c600","line":143,"range":{"start_line":143,"start_character":43,"end_line":143,"end_character":44},"in_reply_to":"7f96bb07_71bbde0d","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            raise exception.Unauthorized(e)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _check_and_set_default_scoping(self, auth_info, auth_context):"},{"line_number":161,"context_line":"        (domain_id, project_id, trust, unscoped, system_scoped) \u003d ("},{"line_number":162,"context_line":"            auth_info.get_scope()"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        if trust:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_11361ab6","line":161,"range":{"start_line":161,"start_character":49,"end_line":161,"end_character":62},"updated":"2018-01-21 15:59:07.000000000","message":"Fix this to not be a boolean.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":158,"context_line":"            raise exception.Unauthorized(e)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _check_and_set_default_scoping(self, auth_info, auth_context):"},{"line_number":161,"context_line":"        (domain_id, project_id, trust, unscoped, system_scoped) \u003d ("},{"line_number":162,"context_line":"            auth_info.get_scope()"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        if trust:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_71ec3ef3","line":161,"range":{"start_line":161,"start_character":49,"end_line":161,"end_character":62},"in_reply_to":"7f96bb07_11361ab6","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"016adc53a0701262b48e3477c8b0c46d9cf8ab26","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        if trust:"},{"line_number":165,"context_line":"            project_id \u003d trust[\u0027project_id\u0027]"},{"line_number":166,"context_line":"        if domain_id or project_id or trust:"},{"line_number":167,"context_line":"            # scope is specified"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_ebb48fd3","line":166,"updated":"2018-01-23 23:18:40.000000000","message":"or system?","commit_id":"6dd466334cc3f7c3a624b2fac9414a6000670e42"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5843e0e7dcd0187846567854b76592a99d133f56","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        if trust:"},{"line_number":165,"context_line":"            project_id \u003d trust[\u0027project_id\u0027]"},{"line_number":166,"context_line":"        if domain_id or project_id or trust:"},{"line_number":167,"context_line":"            # scope is specified"},{"line_number":168,"context_line":"            return"},{"line_number":169,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_4e1cb169","line":166,"in_reply_to":"7f96bb07_ebb48fd3","updated":"2018-01-23 23:33:58.000000000","message":"Done","commit_id":"6dd466334cc3f7c3a624b2fac9414a6000670e42"}],"keystone/auth/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":152,"context_line":"        # trust scope: (None, None, trust_ref, None, None)"},{"line_number":153,"context_line":"        # unscoped: (None, None, None, \u0027unscoped\u0027, None)"},{"line_number":154,"context_line":"        # system: (None, None, None, None, \u0027system\u0027)"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"    def _assert_project_is_enabled(self, project_ref):"},{"line_number":157,"context_line":"        # ensure the project is enabled"},{"line_number":158,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_e86e0cc8","line":155,"updated":"2017-12-14 17:40:02.000000000","message":"This isn\u0027t pythonic, we should refactor it.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        # domain scope: (domain_id, None, None, None, None)"},{"line_number":151,"context_line":"        # trust scope: (None, None, trust_ref, None, None)"},{"line_number":152,"context_line":"        # unscoped: (None, None, None, \u0027unscoped\u0027, None)"},{"line_number":153,"context_line":"        # system: (None, None, None, None, \u0027system\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"    def _assert_project_is_enabled(self, project_ref):"},{"line_number":156,"context_line":"        # ensure the project is enabled"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_11bb7ae5","line":153,"range":{"start_line":153,"start_character":44,"end_line":153,"end_character":50},"updated":"2018-01-21 16:06:45.000000000","message":"change this to be \u0027all\u0027.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            msg \u003d \u0027system, project, domain, OS-TRUST:trust or unscoped\u0027"},{"line_number":242,"context_line":"            raise exception.ValidationError(attribute\u003dmsg, target\u003d\u0027scope\u0027)"},{"line_number":243,"context_line":"        if \u0027system\u0027 in self.auth[\u0027scope\u0027]:"},{"line_number":244,"context_line":"            self._scope_data \u003d (None, None, None, None, \u0027system\u0027)"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":"        if \u0027unscoped\u0027 in self.auth[\u0027scope\u0027]:"},{"line_number":247,"context_line":"            self._scope_data \u003d (None, None, None, \u0027unscoped\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_515342e3","line":244,"range":{"start_line":244,"start_character":57,"end_line":244,"end_character":63},"updated":"2018-01-21 15:59:07.000000000","message":"change this to \u0027all\u0027","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            msg \u003d \u0027system, project, domain, OS-TRUST:trust or unscoped\u0027"},{"line_number":242,"context_line":"            raise exception.ValidationError(attribute\u003dmsg, target\u003d\u0027scope\u0027)"},{"line_number":243,"context_line":"        if \u0027system\u0027 in self.auth[\u0027scope\u0027]:"},{"line_number":244,"context_line":"            self._scope_data \u003d (None, None, None, None, \u0027system\u0027)"},{"line_number":245,"context_line":"            return"},{"line_number":246,"context_line":"        if \u0027unscoped\u0027 in self.auth[\u0027scope\u0027]:"},{"line_number":247,"context_line":"            self._scope_data \u003d (None, None, None, \u0027unscoped\u0027, None)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_31c0f650","line":244,"range":{"start_line":244,"start_character":57,"end_line":244,"end_character":63},"in_reply_to":"7f96bb07_515342e3","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                   trust definition."},{"line_number":340,"context_line":"                   If unscoped, (None, None, None, \u0027unscoped\u0027, None) will be"},{"line_number":341,"context_line":"                   returned."},{"line_number":342,"context_line":"                   If system_scoped, (None, None, None, None, \u0027system\u0027) will be"},{"line_number":343,"context_line":"                   returned."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_7150bed5","line":342,"range":{"start_line":342,"start_character":63,"end_line":342,"end_character":69},"updated":"2018-01-21 15:59:07.000000000","message":"change this to \u0027all\u0027 since it\u0027s more useful than \u0027system\u0027.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":339,"context_line":"                   trust definition."},{"line_number":340,"context_line":"                   If unscoped, (None, None, None, \u0027unscoped\u0027, None) will be"},{"line_number":341,"context_line":"                   returned."},{"line_number":342,"context_line":"                   If system_scoped, (None, None, None, None, \u0027system\u0027) will be"},{"line_number":343,"context_line":"                   returned."},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_d1b432f5","line":342,"range":{"start_line":342,"start_character":63,"end_line":342,"end_character":69},"in_reply_to":"7f96bb07_7150bed5","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return self._scope_data"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def set_scope(self, domain_id\u003dNone, project_id\u003dNone, trust\u003dNone,"},{"line_number":349,"context_line":"                  unscoped\u003dNone, system_scoped\u003dNone):"},{"line_number":350,"context_line":"        \"\"\"Set scope information.\"\"\""},{"line_number":351,"context_line":"        if domain_id and project_id:"},{"line_number":352,"context_line":"            msg \u003d _(\u0027Scoping to both domain and project is not allowed\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_d158b2fb","line":349,"range":{"start_line":349,"start_character":33,"end_line":349,"end_character":46},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be a boolean.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        return self._scope_data"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    def set_scope(self, domain_id\u003dNone, project_id\u003dNone, trust\u003dNone,"},{"line_number":349,"context_line":"                  unscoped\u003dNone, system_scoped\u003dNone):"},{"line_number":350,"context_line":"        \"\"\"Set scope information.\"\"\""},{"line_number":351,"context_line":"        if domain_id and project_id:"},{"line_number":352,"context_line":"            msg \u003d _(\u0027Scoping to both domain and project is not allowed\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_b1cba670","line":349,"range":{"start_line":349,"start_character":33,"end_line":349,"end_character":46},"in_reply_to":"7f96bb07_d158b2fb","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        if project_id and trust:"},{"line_number":358,"context_line":"            msg \u003d _(\u0027Scoping to both project and trust is not allowed\u0027)"},{"line_number":359,"context_line":"            raise ValueError(msg)"},{"line_number":360,"context_line":"        if system_scoped and project_id:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_f15daee9","line":360,"range":{"start_line":360,"start_character":11,"end_line":360,"end_character":24},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be boolean-ish.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        if project_id and trust:"},{"line_number":358,"context_line":"            msg \u003d _(\u0027Scoping to both project and trust is not allowed\u0027)"},{"line_number":359,"context_line":"            raise ValueError(msg)"},{"line_number":360,"context_line":"        if system_scoped and project_id:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_51c82273","line":360,"range":{"start_line":360,"start_character":11,"end_line":360,"end_character":24},"in_reply_to":"7f96bb07_f15daee9","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b4f0c314c407a6d65b113da9fe65230f669bcd92","unresolved":false,"context_lines":[{"line_number":358,"context_line":"            msg \u003d _(\u0027Scoping to both project and trust is not allowed\u0027)"},{"line_number":359,"context_line":"            raise ValueError(msg)"},{"line_number":360,"context_line":"        if system_scoped and project_id:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"},{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_a52dd9fe","line":361,"updated":"2018-01-18 17:03:45.000000000","message":"This might violate string freeze for translations.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if system_scoped and project_id:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"},{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"},{"line_number":365,"context_line":"            raise ValueError(msg)"},{"line_number":366,"context_line":"        self._scope_data \u003d ("}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_b16f2691","line":363,"range":{"start_line":363,"start_character":11,"end_line":363,"end_character":24},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be boolean-ish.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":360,"context_line":"        if system_scoped and project_id:"},{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"},{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"},{"line_number":365,"context_line":"            raise ValueError(msg)"},{"line_number":366,"context_line":"        self._scope_data \u003d ("}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_71c51e5b","line":363,"range":{"start_line":363,"start_character":11,"end_line":363,"end_character":24},"in_reply_to":"7f96bb07_b16f2691","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b4f0c314c407a6d65b113da9fe65230f669bcd92","unresolved":false,"context_lines":[{"line_number":361,"context_line":"            msg \u003d _(\u0027Scoping to both project and system is not allowed\u0027)"},{"line_number":362,"context_line":"            raise ValueError(msg)"},{"line_number":363,"context_line":"        if system_scoped and domain_id:"},{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"},{"line_number":365,"context_line":"            raise ValueError(msg)"},{"line_number":366,"context_line":"        self._scope_data \u003d ("},{"line_number":367,"context_line":"            domain_id, project_id, trust, unscoped, system_scoped"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_c5302559","line":364,"updated":"2018-01-18 17:03:45.000000000","message":"This might violate string freeze for translations.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"},{"line_number":365,"context_line":"            raise ValueError(msg)"},{"line_number":366,"context_line":"        self._scope_data \u003d ("},{"line_number":367,"context_line":"            domain_id, project_id, trust, unscoped, system_scoped"},{"line_number":368,"context_line":"        )"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_516ca29b","line":367,"range":{"start_line":367,"start_character":52,"end_line":367,"end_character":65},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be boolean-ish.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":364,"context_line":"            msg \u003d _(\u0027Scoping to both domain and system is not allowed\u0027)"},{"line_number":365,"context_line":"            raise ValueError(msg)"},{"line_number":366,"context_line":"        self._scope_data \u003d ("},{"line_number":367,"context_line":"            domain_id, project_id, trust, unscoped, system_scoped"},{"line_number":368,"context_line":"        )"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_11a05aa5","line":367,"range":{"start_line":367,"start_character":52,"end_line":367,"end_character":65},"in_reply_to":"7f96bb07_516ca29b","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":8482,"name":"Colleen Murphy","email":"colleen@gazlene.net","username":"krinkle"},"change_message_id":"413b0e8086747750475dbb7f3c5ddb7be02991a5","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                    {\u0027id\u0027: trust_ref[\u0027project_id\u0027]})"},{"line_number":259,"context_line":"                self._scope_data \u003d (None, project_ref[\u0027id\u0027], trust_ref, None)"},{"line_number":260,"context_line":"            else:"},{"line_number":261,"context_line":"                self._scope_data \u003d (None, None, trust_ref, None)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def _validate_auth_methods(self):"},{"line_number":264,"context_line":"        # make sure all the method data/payload are provided"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_77550e1d","side":"PARENT","line":261,"range":{"start_line":261,"start_character":16,"end_line":261,"end_character":64},"updated":"2018-01-21 22:28:21.000000000","message":"I know we talked about trusts not really working without projects but I don\u0027t think this is the right place to remove this, just expand the tuple here.","commit_id":"098a46daa7ba37f280055411f31d77653a67a24f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"05aa26955fc6c8a4b13ad5401465270deee1da18","unresolved":false,"context_lines":[{"line_number":258,"context_line":"                    {\u0027id\u0027: trust_ref[\u0027project_id\u0027]})"},{"line_number":259,"context_line":"                self._scope_data \u003d (None, project_ref[\u0027id\u0027], trust_ref, None)"},{"line_number":260,"context_line":"            else:"},{"line_number":261,"context_line":"                self._scope_data \u003d (None, None, trust_ref, None)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def _validate_auth_methods(self):"},{"line_number":264,"context_line":"        # make sure all the method data/payload are provided"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_90ef6faf","side":"PARENT","line":261,"range":{"start_line":261,"start_character":16,"end_line":261,"end_character":64},"in_reply_to":"7f96bb07_77550e1d","updated":"2018-01-22 15:28:55.000000000","message":"Good catch, we can straighten this all out later. This whole class could benefit from a refactor anyway.","commit_id":"098a46daa7ba37f280055411f31d77653a67a24f"}],"keystone/auth/plugins/token.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b4f0c314c407a6d65b113da9fe65230f669bcd92","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                    \u0027Using a system-scoped token to create a project-scoped \u0027"},{"line_number":89,"context_line":"                    \u0027token is not allowed.\u0027"},{"line_number":90,"context_line":"                )"},{"line_number":91,"context_line":"            )"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if not CONF.token.allow_rescope_scoped_token:"},{"line_number":94,"context_line":"            # Do not allow conversion from scoped tokens."}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_e54681c0","line":91,"updated":"2018-01-18 17:03:45.000000000","message":"This might violate string freeze for translations.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":16465,"name":"Kristi Nikolla","email":"knikolla@bu.edu","username":"knikolla"},"change_message_id":"55afd2037347a7fc2e63490b7b0b739f076fa7cd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                action\u003d_("},{"line_number":83,"context_line":"                    \u0027Using trust-scoped token to create another token. \u0027"},{"line_number":84,"context_line":"                    \u0027Create a new trust-scoped token instead\u0027))"},{"line_number":85,"context_line":"        elif token_ref.system_scoped and project_scoped:"},{"line_number":86,"context_line":"            raise exception.ForbiddenAction("},{"line_number":87,"context_line":"                action\u003d_("},{"line_number":88,"context_line":"                    \u0027Using a system-scoped token to create a project-scoped \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_5592074d","line":85,"updated":"2018-01-23 19:51:10.000000000","message":"What about domain?","commit_id":"6cd12d457899224121b50d17e32761edc2109e07"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"86d7f2cba4259e8e81f7bcab14fec058354c80f3","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                action\u003d_("},{"line_number":83,"context_line":"                    \u0027Using trust-scoped token to create another token. \u0027"},{"line_number":84,"context_line":"                    \u0027Create a new trust-scoped token instead\u0027))"},{"line_number":85,"context_line":"        elif token_ref.system_scoped and project_scoped:"},{"line_number":86,"context_line":"            raise exception.ForbiddenAction("},{"line_number":87,"context_line":"                action\u003d_("},{"line_number":88,"context_line":"                    \u0027Using a system-scoped token to create a project-scoped \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_f06fa1c2","line":85,"in_reply_to":"7f96bb07_5592074d","updated":"2018-01-23 20:10:30.000000000","message":"Yeah, that should be denied as well.  Only go from larger scope to smaller.    I would prefer a check that the source and target scopes are the same.","commit_id":"6cd12d457899224121b50d17e32761edc2109e07"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"31aafa9fc17d5a7935d313bce5395d1186ed89b4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                action\u003d_("},{"line_number":83,"context_line":"                    \u0027Using trust-scoped token to create another token. \u0027"},{"line_number":84,"context_line":"                    \u0027Create a new trust-scoped token instead\u0027))"},{"line_number":85,"context_line":"        elif token_ref.system_scoped and project_scoped:"},{"line_number":86,"context_line":"            raise exception.ForbiddenAction("},{"line_number":87,"context_line":"                action\u003d_("},{"line_number":88,"context_line":"                    \u0027Using a system-scoped token to create a project-scoped \u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_082b01eb","line":85,"in_reply_to":"7f96bb07_f06fa1c2","updated":"2018-01-23 22:40:03.000000000","message":"Done","commit_id":"6cd12d457899224121b50d17e32761edc2109e07"}],"keystone/tests/common/auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        if system:"},{"line_number":23,"context_line":"            scope_data[\u0027system\u0027] \u003d {\u0027all\u0027: True}"},{"line_number":24,"context_line":"        elif unscoped:"},{"line_number":25,"context_line":"            scope_data[\u0027unscoped\u0027] \u003d {}"},{"line_number":26,"context_line":"        elif project_id or project_name:"},{"line_number":27,"context_line":"            scope_data[\u0027project\u0027] \u003d {}"},{"line_number":28,"context_line":"            if project_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_289ab4c4","line":25,"updated":"2017-12-14 17:40:02.000000000","message":"Changes in this file could probably be pulled out into their own change since it\u0027s testing plumbing that can land before it\u0027s used.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6c48dc8bd03f12ab4f20c5865f6fb25ead990a6b","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        if system:"},{"line_number":23,"context_line":"            scope_data[\u0027system\u0027] \u003d {\u0027all\u0027: True}"},{"line_number":24,"context_line":"        elif unscoped:"},{"line_number":25,"context_line":"            scope_data[\u0027unscoped\u0027] \u003d {}"},{"line_number":26,"context_line":"        elif project_id or project_name:"},{"line_number":27,"context_line":"            scope_data[\u0027project\u0027] \u003d {}"},{"line_number":28,"context_line":"            if project_id:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_c3f52b85","line":25,"in_reply_to":"df87a7cf_289ab4c4","updated":"2017-12-14 18:11:21.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def generate_token_schema(self, system_scoped\u003dFalse, domain_scoped\u003dFalse,"},{"line_number":45,"context_line":"                              project_scoped\u003dFalse):"},{"line_number":46,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":47,"context_line":"        properties \u003d {"},{"line_number":48,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_e8a36cff","line":45,"updated":"2017-12-14 17:40:02.000000000","message":"Same comment here as in the previous module.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6c48dc8bd03f12ab4f20c5865f6fb25ead990a6b","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                      common_auth.AuthTestMixin):"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def generate_token_schema(self, system_scoped\u003dFalse, domain_scoped\u003dFalse,"},{"line_number":45,"context_line":"                              project_scoped\u003dFalse):"},{"line_number":46,"context_line":"        \"\"\"Return a dictionary of token properties to validate against.\"\"\""},{"line_number":47,"context_line":"        properties \u003d {"},{"line_number":48,"context_line":"            \u0027audit_ids\u0027: {"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_4366fb53","line":45,"in_reply_to":"df87a7cf_e8a36cff","updated":"2017-12-14 18:11:21.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":718,"context_line":"        validator_object \u003d validators.SchemaValidator("},{"line_number":719,"context_line":"            system_scoped_token_schema"},{"line_number":720,"context_line":"        )"},{"line_number":721,"context_line":"        validator_object.validate(token)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def assertEqualTokens(self, a, b):"},{"line_number":724,"context_line":"        \"\"\"Assert that two tokens are equal."}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_a8548455","line":721,"updated":"2017-12-14 17:40:02.000000000","message":"This assertion should return the token from the response to be consistent with the other token assertion methods here.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6c48dc8bd03f12ab4f20c5865f6fb25ead990a6b","unresolved":false,"context_lines":[{"line_number":718,"context_line":"        validator_object \u003d validators.SchemaValidator("},{"line_number":719,"context_line":"            system_scoped_token_schema"},{"line_number":720,"context_line":"        )"},{"line_number":721,"context_line":"        validator_object.validate(token)"},{"line_number":722,"context_line":""},{"line_number":723,"context_line":"    def assertEqualTokens(self, a, b):"},{"line_number":724,"context_line":"        \"\"\"Assert that two tokens are equal."}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_e3cf0f27","line":721,"in_reply_to":"df87a7cf_a8548455","updated":"2017-12-14 18:11:21.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        )"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"    def test_create_system_token_via_system_group_assignment(self):"},{"line_number":716,"context_line":"        group \u003d unit.new_group_ref("},{"line_number":717,"context_line":"            domain_id\u003dCONF.identity.default_domain_id"},{"line_number":718,"context_line":"        )"},{"line_number":719,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":720,"context_line":"        path \u003d \u0027/system/groups/%(group_id)s/roles/%(role_id)s\u0027 % {"},{"line_number":721,"context_line":"            \u0027group_id\u0027: group[\u0027id\u0027],"},{"line_number":722,"context_line":"            \u0027role_id\u0027: self.role_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_28839458","line":719,"range":{"start_line":716,"start_character":8,"end_line":719,"end_character":53},"updated":"2017-12-14 17:40:02.000000000","message":"Let\u0027s use POST /groups here instead of mixing backend calls with APIs.","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"001353ac6c0a1f23c9fe88496cc4d459f72a4aed","unresolved":false,"context_lines":[{"line_number":713,"context_line":"        )"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"    def test_create_system_token_via_system_group_assignment(self):"},{"line_number":716,"context_line":"        group \u003d unit.new_group_ref("},{"line_number":717,"context_line":"            domain_id\u003dCONF.identity.default_domain_id"},{"line_number":718,"context_line":"        )"},{"line_number":719,"context_line":"        group \u003d self.identity_api.create_group(group)"},{"line_number":720,"context_line":"        path \u003d \u0027/system/groups/%(group_id)s/roles/%(role_id)s\u0027 % {"},{"line_number":721,"context_line":"            \u0027group_id\u0027: group[\u0027id\u0027],"},{"line_number":722,"context_line":"            \u0027role_id\u0027: self.role_id"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_b9c7f845","line":719,"range":{"start_line":716,"start_character":8,"end_line":719,"end_character":53},"in_reply_to":"df87a7cf_28839458","updated":"2017-12-14 19:18:54.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        self.delete(\u0027/roles/%(role_id)s\u0027 % {\u0027role_id\u0027: system_role[\u0027id\u0027]})"},{"line_number":786,"context_line":"        self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_rescoping_with_global_token_can_fail(self):"},{"line_number":789,"context_line":"        pass"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def test_rescoping_with_global_token_can_succeed(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_a896c493","line":788,"range":{"start_line":788,"start_character":28,"end_line":788,"end_character":34},"updated":"2017-12-14 17:40:02.000000000","message":"s/global/system/","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"001353ac6c0a1f23c9fe88496cc4d459f72a4aed","unresolved":false,"context_lines":[{"line_number":785,"context_line":"        self.delete(\u0027/roles/%(role_id)s\u0027 % {\u0027role_id\u0027: system_role[\u0027id\u0027]})"},{"line_number":786,"context_line":"        self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_rescoping_with_global_token_can_fail(self):"},{"line_number":789,"context_line":"        pass"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def test_rescoping_with_global_token_can_succeed(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_79c1702e","line":788,"range":{"start_line":788,"start_character":28,"end_line":788,"end_character":34},"in_reply_to":"df87a7cf_a896c493","updated":"2017-12-14 19:18:54.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_rescoping_with_global_token_can_fail(self):"},{"line_number":789,"context_line":"        pass"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def test_rescoping_with_global_token_can_succeed(self):"},{"line_number":792,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_48f4d85b","line":789,"updated":"2017-12-14 17:40:02.000000000","message":"This should actually be something more along the lines of:\n\n    def test_rescoping_a_system_token_for_a_project_token_fails(self):         \n        ref \u003d {\u0027role\u0027: unit.new_role_ref()}                                    \n        system_role \u003d self.post(\u0027/roles\u0027, body\u003dref).json_body[\u0027role\u0027]          \n                                                                               \n        path \u003d \u0027/system/users/%(user_id)s/roles/%(role_id)s\u0027 % {               \n            \u0027user_id\u0027: self.user[\u0027id\u0027],                                        \n            \u0027role_id\u0027: system_role[\u0027id\u0027]                                       \n        }                                                                      \n        self.put(path\u003dpath)                                                    \n                                                                               \n        auth_request_body \u003d self.build_authentication_request(                 \n            username\u003dself.user[\u0027name\u0027],                                                                                                                                                                                                      \n            password\u003dself.user[\u0027password\u0027],                                    \n            user_domain_id\u003dself.domain[\u0027id\u0027],                                  \n            system\u003dTrue                                                        \n        )                                                                      \n        response \u003d self.v3_create_token(auth_request_body)                     \n        system_token \u003d self.assertValidSystemScopedTokenResponse(response)     \n                                                                               \n        auth_request_body \u003d self.build_authentication_request(                 \n            token\u003dsystem_token, project_id\u003dself.project_id                     \n        )                                                                      \n        response \u003d self.v3_create_token(auth_request_body)","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"001353ac6c0a1f23c9fe88496cc4d459f72a4aed","unresolved":false,"context_lines":[{"line_number":786,"context_line":"        self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":787,"context_line":""},{"line_number":788,"context_line":"    def test_rescoping_with_global_token_can_fail(self):"},{"line_number":789,"context_line":"        pass"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def test_rescoping_with_global_token_can_succeed(self):"},{"line_number":792,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_3ed74e26","line":789,"in_reply_to":"df87a7cf_48f4d85b","updated":"2017-12-14 19:18:54.000000000","message":"Done","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9adfb7f4dede03fb6f569ab459ebc143a947246c","unresolved":false,"context_lines":[{"line_number":788,"context_line":"    def test_rescoping_with_global_token_can_fail(self):"},{"line_number":789,"context_line":"        pass"},{"line_number":790,"context_line":""},{"line_number":791,"context_line":"    def test_rescoping_with_global_token_can_succeed(self):"},{"line_number":792,"context_line":"        pass"},{"line_number":793,"context_line":""},{"line_number":794,"context_line":"    def test_create_domain_token_scoped_with_domain_id_and_user_id(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"df87a7cf_6890bc96","line":791,"range":{"start_line":791,"start_character":28,"end_line":791,"end_character":34},"updated":"2017-12-14 17:40:02.000000000","message":"s/global/system/","commit_id":"b5178760f71c001c67b42c3dcd24b30f29239c72"}],"keystone/token/providers/common.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            project[\u0027name\u0027] \u003d\u003d admin_project_name and"},{"line_number":164,"context_line":"            project[\u0027domain\u0027][\u0027name\u0027] \u003d\u003d admin_project_domain_name)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_roles_for_user(self, user_id, system_scoped, domain_id,"},{"line_number":167,"context_line":"                            project_id):"},{"line_number":168,"context_line":"        roles \u003d []"},{"line_number":169,"context_line":"        if system_scoped:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_313236a9","line":166,"range":{"start_line":166,"start_character":43,"end_line":166,"end_character":56},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be boolean-ish.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":163,"context_line":"            project[\u0027name\u0027] \u003d\u003d admin_project_name and"},{"line_number":164,"context_line":"            project[\u0027domain\u0027][\u0027name\u0027] \u003d\u003d admin_project_domain_name)"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_roles_for_user(self, user_id, system_scoped, domain_id,"},{"line_number":167,"context_line":"                            project_id):"},{"line_number":168,"context_line":"        roles \u003d []"},{"line_number":169,"context_line":"        if system_scoped:"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_f1ae0e97","line":166,"range":{"start_line":166,"start_character":43,"end_line":166,"end_character":56},"in_reply_to":"7f96bb07_313236a9","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"06d2ebf7e6996b11428689321ae7ff6e1219b0d8","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def populate_roles_for_federated_user(self, token_data, group_ids,"},{"line_number":195,"context_line":"                                          project_id\u003dNone, domain_id\u003dNone,"},{"line_number":196,"context_line":"                                          user_id\u003dNone, system_scoped\u003dFalse):"},{"line_number":197,"context_line":"        \"\"\"Populate roles basing on provided groups and project/domain."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        Used for federated users with dynamically assigned groups."}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_9120ea4b","line":196,"range":{"start_line":196,"start_character":56,"end_line":196,"end_character":69},"updated":"2018-01-21 15:59:07.000000000","message":"change this to not be boolean-ish.","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9c92267b43565d6810e4a7a827f0c40b1b0a9319","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def populate_roles_for_federated_user(self, token_data, group_ids,"},{"line_number":195,"context_line":"                                          project_id\u003dNone, domain_id\u003dNone,"},{"line_number":196,"context_line":"                                          user_id\u003dNone, system_scoped\u003dFalse):"},{"line_number":197,"context_line":"        \"\"\"Populate roles basing on provided groups and project/domain."},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        Used for federated users with dynamically assigned groups."}],"source_content_type":"text/x-python","patch_set":16,"id":"7f96bb07_91930a5d","line":196,"range":{"start_line":196,"start_character":56,"end_line":196,"end_character":69},"in_reply_to":"7f96bb07_9120ea4b","updated":"2018-01-21 16:06:45.000000000","message":"Done","commit_id":"8e303b33f8509e0cef81f445790f411d04a6048b"}]}
