)]}'
{"swift/common/middleware/keystoneauth.py":[{"author":{"_account_id":2696,"name":"Darrell Bishop","email":"dbishop@nvidia.com","username":"darrellb"},"change_message_id":"31d741973c4e382e0b6547314fb7af353d672d87","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        env \u003d req.environ"},{"line_number":170,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":171,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":172,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027)"},{"line_number":173,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BnzA%3D","line":172,"updated":"2013-02-25 15:42:43.000000000","message":"The old code here would just assign \u0027\u0027 (empty-string) if \u0027user\u0027 was not in env_identity, but the new code will raise an exception.\n\nThat\u0027s fine if env_identity will always have a \u0027user\u0027 key; just making sure this change in behavior for the case where \u0027user\u0027 isn\u0027t in env_identity was intentional.","commit_id":"e3dc7869764ae0c85b9dc8aaf36d4fa80c70109a"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"9549a4583c53444a5145f4144c8ac45d2af2249b","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        env \u003d req.environ"},{"line_number":170,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":171,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":172,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027)"},{"line_number":173,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAM3%2F%2BnvE%3D","line":172,"in_reply_to":"AAAAM3%2F%2BnzA%3D","updated":"2013-02-25 16:29:45.000000000","message":"The env_identity is from _keystone_identity() at line 117. If the req.env doesn\u0027t contain enough user/tenant info. The return value of env_identity(\u0027tenant\u0027) and env_identity will be (None, None). So that before defualt empty string is not necessary","commit_id":"e3dc7869764ae0c85b9dc8aaf36d4fa80c70109a"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"1b20f8a1d5d98c56088cdc88d22c5c25bdecd33b","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                tenant_id, tenant_name, roles):"},{"line_number":143,"context_line":"        \"\"\" Check cross-tenant ACLs"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        Match tename:user, tenant and user could be its id, name or \u0027*\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        :param user_id: The user id from the identity token."},{"line_number":148,"context_line":"        :param user_name: The user name from the identity token."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F0hw%3D","line":145,"updated":"2013-03-26 09:30:56.000000000","message":"typo tename -\u003e tenant","commit_id":"9c9f9249d504006a71261934cf0dac437b874db3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"9e5691877de271117d3211476efd7fdb39a9d37a","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                                tenant_id, tenant_name, roles):"},{"line_number":143,"context_line":"        \"\"\" Check cross-tenant ACLs"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        Match tename:user, tenant and user could be its id, name or \u0027*\u0027"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        :param user_id: The user id from the identity token."},{"line_number":148,"context_line":"        :param user_name: The user name from the identity token."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAOH%2F%2F0hU%3D","line":145,"in_reply_to":"AAAAOH%2F%2F0hw%3D","updated":"2013-03-26 09:38:02.000000000","message":"Thx!","commit_id":"9c9f9249d504006a71261934cf0dac437b874db3"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"b2b540c3a7a16582e308c3bc8d01e459d685d396","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                  None otherwise."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        for tenant in [tenant_id, tenant_name, \u0027*\u0027]:"},{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2Fyx8%3D","line":158,"updated":"2013-03-27 10:05:53.000000000","message":"is tenant name and user name case sensitive here?\nThey\u0027re not case sensitive in keystone.\ne.g. userA, UserA, usera","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"76a7e89e27a2e5fadbe0bf76824aeb7917a9095f","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                  None otherwise."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        for tenant in [tenant_id, tenant_name, \u0027*\u0027]:"},{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2Fw68%3D","line":158,"in_reply_to":"AAAAOH%2F%2FxHw%3D","updated":"2013-03-28 14:08:34.000000000","message":"I tried with my cli again, and create GLanCe successfully. I just pull the new codes. Give me some time to check whether some setting results in these results.\n\nBTW, are your codes newest?","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"90f27298a09262e38f3b6da2791de1de9482e5ec","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                  None otherwise."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        for tenant in [tenant_id, tenant_name, \u0027*\u0027]:"},{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2FxHw%3D","line":158,"in_reply_to":"AAAAOH%2F%2FxcM%3D","updated":"2013-03-28 11:01:08.000000000","message":"I test your command to create GLance user in my environment but failed. it reported  duplicate entry with HTTP 409 error.","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":2649,"name":"Zhang Hua","email":"zhuadl@cn.ibm.com","username":"zhang-hare"},"change_message_id":"39b293b9e5cedaf4a60ad2b1868f0f64bc6df7b4","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                  None otherwise."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        for tenant in [tenant_id, tenant_name, \u0027*\u0027]:"},{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2FxaU%3D","line":158,"in_reply_to":"AAAAOH%2F%2FxcM%3D","updated":"2013-03-28 04:38:54.000000000","message":"Your test in CLI shows it is sensitive. But I also tested it in Horizon which shows that it is insensitive. I can\u0027t create both userA and UserA. There\u0027s an error reported like \"Error: Unable to create user.\" \nMight need to discuss it in Keystone.","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"ea1dd3873da03b7cc48ddee45803444c4a76acdd","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                  None otherwise."},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        \"\"\""},{"line_number":158,"context_line":"        for tenant in [tenant_id, tenant_name, \u0027*\u0027]:"},{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOH%2F%2FxcM%3D","line":158,"in_reply_to":"AAAAOH%2F%2Fyx8%3D","updated":"2013-03-28 03:36:37.000000000","message":"Are your sure with \"They\u0027re not case sensitive in keystone\"? I leave an example outside","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8951b9fc9aa5ce0d24c39ccfd0f5cf8babba592f","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"},{"line_number":162,"context_line":"                    return s"},{"line_number":163,"context_line":"        return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def authorize(self, req):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2Fxns%3D","line":162,"updated":"2013-04-23 19:23:03.000000000","message":"What is being matched against here if [tenant|user]_[name|id] is None?","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"3a2ed4abefb3e0cd0d8800340143acfffb745f4d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            for user in [user_id, user_name, \u0027*\u0027]:"},{"line_number":160,"context_line":"                s \u003d \u0027%s:%s\u0027 % (tenant, user)"},{"line_number":161,"context_line":"                if s in roles:"},{"line_number":162,"context_line":"                    return s"},{"line_number":163,"context_line":"        return None"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def authorize(self, req):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2FwW4%3D","line":162,"in_reply_to":"AAAAOn%2F%2Fxns%3D","updated":"2013-04-24 18:12:21.000000000","message":"I think the None:None (from None object) will not happen here, because it has been checked in _keystone_identity() (by its \u0027Confimed\u0027 status). So we don\u0027t need further modify here.","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"8951b9fc9aa5ce0d24c39ccfd0f5cf8babba592f","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027, \u0027\u0027)"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2Fxow%3D","line":169,"updated":"2013-04-23 19:23:03.000000000","message":"ValueError if \u0027user\u0027 not in env_identity","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"163adf2b6d814085a615eb8f097c7597ec9a0870","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027, \u0027\u0027)"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2FvwM%3D","line":169,"in_reply_to":"AAAAOn%2F%2FwL4%3D","updated":"2013-04-25 01:40:05.000000000","message":"Yeah, it\u0027s more clear and brief.","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"fd69a792298c3f7de7b7e49fd0e2254827f2ead3","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027, \u0027\u0027)"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2FwL4%3D","line":169,"in_reply_to":"AAAAOn%2F%2FwXo%3D","updated":"2013-04-24 20:37:01.000000000","message":"Meh, still ValueError if \u0027user\u0027 not in env, that\u0027s just swaping the empty string for None.\n\nJust say:\n\nuser_id, user_name \u003d env_identity[\u0027user\u0027]\n\nWhich sorta says explicitly \"this key has to be here, it has to be a two element tuple\"","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"3a2ed4abefb3e0cd0d8800340143acfffb745f4d","unresolved":false,"context_lines":[{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity.get(\u0027tenant\u0027)"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity.get(\u0027user\u0027, \u0027\u0027)"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        #allow OPTIONS requests to proceed as normal"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAOn%2F%2FwXo%3D","line":169,"in_reply_to":"AAAAOn%2F%2Fxow%3D","updated":"2013-04-24 18:12:21.000000000","message":"Actually, it\u0027s redundant I think. the user/tenant data is from keystone_identity, which must offer two couple of data when its status is \u0027Confirmed\u0027. If not, keystone middleware goes into authorize_anonymous. So I think here should be \"env_identity.get(\u0027user\u0027)\" which is enough. What do you think?","commit_id":"b1798191d63c1adbaaca66118c9cf2add20693f3"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"4cca4a7619dbd569a868330c8f4f6914505fd95e","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def authorize(self, req):"},{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity[\u0027tenant\u0027]"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity[\u0027user\u0027]"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOn%2F%2FsxI%3D","line":167,"updated":"2013-04-27 04:57:54.000000000","message":"So, this line is a little confusing. In the case that keystone.identity is not in env, the next line will cause a KeyError anyway. If you feel like doing so, it\u0027d be nice to change this to just env[\u0027keystone.identity\u0027] so that the failure messages will be a little clearer.\n\nI realize that this line is not one that you changed, so if you don\u0027t want to change it, I won\u0027t hold it against you. However, I think it would make the code clearer, which is why I\u0027m asking.","commit_id":"c525dcce24408f1c9c7e36f6ecffedf40f202311"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"bf793a43887de9d8f4a33606ff8bb65c37d794c2","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"    def authorize(self, req):"},{"line_number":166,"context_line":"        env \u003d req.environ"},{"line_number":167,"context_line":"        env_identity \u003d env.get(\u0027keystone.identity\u0027, {})"},{"line_number":168,"context_line":"        tenant_id, tenant_name \u003d env_identity[\u0027tenant\u0027]"},{"line_number":169,"context_line":"        user_id, user_name \u003d env_identity[\u0027user\u0027]"},{"line_number":170,"context_line":"        referrers, roles \u003d swift_acl.parse_acl(getattr(req, \u0027acl\u0027, None))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAOn%2F%2Fswo%3D","line":167,"in_reply_to":"AAAAOn%2F%2FsxI%3D","updated":"2013-04-27 05:26:40.000000000","message":"You\u0027re right. Actually I should change it in previous set.","commit_id":"c525dcce24408f1c9c7e36f6ecffedf40f202311"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"79362d6d335335aa12ab16271794c7c7485594c9","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if \u0027HTTP_X_ROLES\u0027 in environ:"},{"line_number":126,"context_line":"            roles \u003d environ[\u0027HTTP_X_ROLES\u0027].split(\u0027,\u0027)"},{"line_number":127,"context_line":"        identity \u003d {\u0027user\u0027:  (environ.get(\u0027HTTP_X_USER_ID\u0027),"},{"line_number":128,"context_line":"                              environ.get(\u0027HTTP_X_USER_NAME\u0027)),"},{"line_number":129,"context_line":"                    \u0027tenant\u0027: (environ.get(\u0027HTTP_X_TENANT_ID\u0027),"},{"line_number":130,"context_line":"                               environ.get(\u0027HTTP_X_TENANT_NAME\u0027)),"},{"line_number":131,"context_line":"                    \u0027roles\u0027: roles}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FsPo%3D","line":128,"updated":"2013-05-26 17:16:22.000000000","message":"I have a middleware (not public) that depend on keystone.identity and this change would break it  I can obv fix it but there may  be others depending on it,  any chances to do a \u0027user_id\u0027 key instead ? \n\nI understand this make more sense to match keystone.identity[\u0027tenant\u0027] but breaking backward compat is not something we want to do. (you may want to make sure you leave a comment about it in the code as well explaining why it\u0027s like that).","commit_id":"b537352fead022c765deaf51a1837c03bb01ffa9"},{"author":{"_account_id":6835,"name":"Kun Huang","email":"gareth@openstacker.org","username":"academicgareth"},"change_message_id":"87650b4546c786bb2098ce10c241604e753e0437","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        if \u0027HTTP_X_ROLES\u0027 in environ:"},{"line_number":126,"context_line":"            roles \u003d environ[\u0027HTTP_X_ROLES\u0027].split(\u0027,\u0027)"},{"line_number":127,"context_line":"        identity \u003d {\u0027user\u0027:  (environ.get(\u0027HTTP_X_USER_ID\u0027),"},{"line_number":128,"context_line":"                              environ.get(\u0027HTTP_X_USER_NAME\u0027)),"},{"line_number":129,"context_line":"                    \u0027tenant\u0027: (environ.get(\u0027HTTP_X_TENANT_ID\u0027),"},{"line_number":130,"context_line":"                               environ.get(\u0027HTTP_X_TENANT_NAME\u0027)),"},{"line_number":131,"context_line":"                    \u0027roles\u0027: roles}"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAPH%2F%2FsPM%3D","line":128,"in_reply_to":"AAAAPH%2F%2FsPo%3D","updated":"2013-05-26 17:38:49.000000000","message":"1. Leaving user_id, user_name/user with tenant looks more weird for future contributors\n\n2. Leaving tenant_id and tenant_name/tenant will cause more problems about backward compat\n\n3. I have a quick check on current middlewares, and found no one use keystone.indentity ()\n\n4. If there\u0027s some one, I should fix it in this patch","commit_id":"b537352fead022c765deaf51a1837c03bb01ffa9"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"71ddda2cb6dba0dbb3c6cd2a236f52e1d45a774d","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        self.logger.warning(\"Old keystone.identity in env will be deprecated \""},{"line_number":126,"context_line":"                            \"in next release. You could get user name with \""},{"line_number":127,"context_line":"                            \"env[\u0027keystone.identity\u0027][\u0027user\u0027][1], and user id \""},{"line_number":128,"context_line":"                            \"with env[\u0027keystone.identity\u0027][\u0027user\u0027][0].\")"},{"line_number":129,"context_line":"        if environ.get(\u0027HTTP_X_IDENTITY_STATUS\u0027) !\u003d \u0027Confirmed\u0027:"},{"line_number":130,"context_line":"            return"},{"line_number":131,"context_line":"        roles \u003d []"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAPX%2F%2F1jU%3D","line":128,"updated":"2013-06-11 20:50:39.000000000","message":"This is going to emit a warning in the logs on every single request. Let\u0027s not do that.","commit_id":"caade5258e2a05458ac8918decbf4bc0cbebf622"}]}
