)]}'
{"keystone/common/authorization.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f3dc68f933cc4602675d5152c7ef0feadd6be2c","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    LOG.debug(\u0027RBAC: Authorization granted\u0027)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def get_token_ref(context):"},{"line_number":165,"context_line":"    \"\"\"Retrieve TokenModel object from the auth context and returns it."},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    :param dict context: The request context."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_1bfe95ae","line":164,"range":{"start_line":164,"start_character":4,"end_line":164,"end_character":17},"updated":"2018-06-25 20:45:53.000000000","message":"This should be renamed since it\u0027s not getting a \"token reference\". It\u0027s always returned a token object (e.g. KeystoneToken) but we considered it a reference since that object was of a dictionary type and we used reflection to build the object using a token reference, so it behaved like a pythonic object (as opposed to a data structure).\n\nNow that we\u0027re being explicit about the fact we\u0027re dealing with a python token model, we should make the name of the method reflect that.","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"}],"keystone/common/policy.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f3dc68f933cc4602675d5152c7ef0feadd6be2c","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        )"},{"line_number":81,"context_line":"        credentials_copy \u003d copy.deepcopy(credentials)"},{"line_number":82,"context_line":"        credentials_copy[\u0027token\u0027] \u003d token_ref"},{"line_number":83,"context_line":"        credentials \u003d credentials_copy"},{"line_number":84,"context_line":"    try:"},{"line_number":85,"context_line":"        return _ENFORCER.enforce(action, target, credentials, **extra)"},{"line_number":86,"context_line":"    except common_policy.InvalidScope:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9bb14504","line":83,"updated":"2018-06-25 20:45:53.000000000","message":"This is a dirty hack... The reason why we have to do this is because we used to populate credentials[\u0027token\u0027] with an instance of KeystoneToken, which was a dictionary type object that represented a token reference.\n\nWhen oslo.policy processed KeystoneToken, it accessed everything like a dictionary and didn\u0027t complain about it because it was actually a representation of the v3 API contract. Since we\u0027re moving away from using KeystoneToken, this breaks because it\u0027s not a dictionary type and oslo.policy doesn\u0027t know, and shouldn\u0027t know, how to handle the TokenModel object we use internally to keystone.\n\nWhat we\u0027re doing here is providing oslo.policy with the same thing it had when getting a KeystoneToken object, which is just a dictionary of the token reference.\n\nEventually - we should really trim the fat from this and only pass oslo.policy what it needs instead of an entire token reference.","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"}],"keystone/models/token_model.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8f3dc68f933cc4602675d5152c7ef0feadd6be2c","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                       \u0027audit_ids\u0027: self.audit_ids,"},{"line_number":92,"context_line":"                       \u0027loc\u0027: hex(id(self))}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def __getitem__(self, key):"},{"line_number":95,"context_line":"        return getattr(self, key)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def audit_ids(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_9ba625c0","line":95,"range":{"start_line":94,"start_character":0,"end_line":95,"end_character":33},"updated":"2018-06-25 20:45:53.000000000","message":"This should be removed, it\u0027s not used and was an experiment for troubleshooting a bug","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f09e2440ebb13a213737629b09f6842bf4c27066","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                       \u0027audit_ids\u0027: self.audit_ids,"},{"line_number":92,"context_line":"                       \u0027loc\u0027: hex(id(self))}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def __getitem__(self, key):"},{"line_number":95,"context_line":"        return getattr(self, key)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"    @property"},{"line_number":98,"context_line":"    def audit_ids(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_15b15402","line":95,"range":{"start_line":94,"start_character":0,"end_line":95,"end_character":33},"in_reply_to":"5f7c97a3_9ba625c0","updated":"2018-06-27 14:40:09.000000000","message":"Done","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"8963e6f372ec0266f7d2e890d9fc22a1eb9904db","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        for role_id in effective_trust_role_ids:"},{"line_number":315,"context_line":"            match_roles \u003d [x for x in current_effective_trustor_roles"},{"line_number":316,"context_line":"                           if x \u003d\u003d role_id]"},{"line_number":317,"context_line":"            if match_roles:"},{"line_number":318,"context_line":"                role \u003d PROVIDERS.role_api.get_role(match_roles[0])"},{"line_number":319,"context_line":"                if role[\u0027domain_id\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_5ba2cd9b","line":316,"updated":"2018-06-25 20:47:03.000000000","message":"These changes should be pulled up into https://review.openstack.org/#/c/545450/13/keystone/common/controller.py","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f09e2440ebb13a213737629b09f6842bf4c27066","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        for role_id in effective_trust_role_ids:"},{"line_number":315,"context_line":"            match_roles \u003d [x for x in current_effective_trustor_roles"},{"line_number":316,"context_line":"                           if x \u003d\u003d role_id]"},{"line_number":317,"context_line":"            if match_roles:"},{"line_number":318,"context_line":"                role \u003d PROVIDERS.role_api.get_role(match_roles[0])"},{"line_number":319,"context_line":"                if role[\u0027domain_id\u0027] is None:"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_350fb0e1","line":316,"in_reply_to":"5f7c97a3_5ba2cd9b","updated":"2018-06-27 14:40:09.000000000","message":"Done","commit_id":"1864b44b174a719041fa6b2db44864e9ffbc4b80"}]}
