)]}'
{"keystone/common/wsgi.py":[{"author":{"_account_id":2230,"name":"Paul McMillan","email":"paul@mcmillan.ws","username":"paul-mcmillan"},"change_message_id":"1da67a72b4f0db9ac4d7f3dd9edea1ac913a30c1","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        context \u003d req.environ.get(\u0027openstack.context\u0027, {})"},{"line_number":193,"context_line":"        context[\u0027query_string\u0027] \u003d dict(req.params.iteritems())"},{"line_number":194,"context_line":"        if \u0027REMOTE_USER\u0027 in req.environ:"},{"line_number":195,"context_line":"            context[\u0027REMOTE_USER\u0027] \u003d req.environ[\u0027REMOTE_USER\u0027]"},{"line_number":196,"context_line":"        params \u003d req.environ.get(\u0027openstack.params\u0027, {})"},{"line_number":197,"context_line":"        params.update(arg_dict)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F7C4%3D","line":195,"updated":"2012-10-26 21:30:36.000000000","message":"As it currently stands, openstack.context[\u0027REMOTE_USER\u0027] can override the wsgi environment variable REMOTE_USER.\n\nThis should have an else clause which explicitly removes the REMOTE_USER key from context if not set in req.environ.","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0417d55d0b129f6188aaa83f8fa7fa5650ff39d2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        context \u003d req.environ.get(\u0027openstack.context\u0027, {})"},{"line_number":193,"context_line":"        context[\u0027query_string\u0027] \u003d dict(req.params.iteritems())"},{"line_number":194,"context_line":"        if \u0027REMOTE_USER\u0027 in req.environ:"},{"line_number":195,"context_line":"            context[\u0027REMOTE_USER\u0027] \u003d req.environ[\u0027REMOTE_USER\u0027]"},{"line_number":196,"context_line":"        params \u003d req.environ.get(\u0027openstack.params\u0027, {})"},{"line_number":197,"context_line":"        params.update(arg_dict)"},{"line_number":198,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F6%2F4%3D","line":195,"in_reply_to":"AAAALn%2F%2F7C4%3D","updated":"2012-10-26 22:08:58.000000000","message":"+1 for token security guy","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"}],"keystone/openstack/common/iniparser.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2f22aeb2e6b0721a41dcbb5105685621b391f10a","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        value \u003d value.strip()"},{"line_number":56,"context_line":"        if ((value and value[0] \u003d\u003d value[-1]) and"},{"line_number":57,"context_line":"                (value[0] \u003d\u003d \"\\\"\" or value[0] \u003d\u003d \"\u0027\")):"},{"line_number":58,"context_line":"            value \u003d value[1:-1]"},{"line_number":59,"context_line":"        return key.strip(), [value]"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2F3bE%3D","line":57,"updated":"2012-10-31 17:19:21.000000000","message":"needs to be changed in openstack-common","commit_id":"1ec9b1150968d66b1f2da3a87505280259157114"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"15faabccf24c47f946daedd7d23f45fce8bb47a1","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        value \u003d value.strip()"},{"line_number":56,"context_line":"        if ((value and value[0] \u003d\u003d value[-1]) and"},{"line_number":57,"context_line":"                (value[0] \u003d\u003d \"\\\"\" or value[0] \u003d\u003d \"\u0027\")):"},{"line_number":58,"context_line":"            value \u003d value[1:-1]"},{"line_number":59,"context_line":"        return key.strip(), [value]"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAALn%2F%2F3Zo%3D","line":57,"updated":"2012-10-31 17:29:47.000000000","message":"needs to be fixed in openstack-common","commit_id":"8d21d674940e3f44de8ba0ce8fcc97c8252ce353"}],"keystone/service.py":[{"author":{"_account_id":2230,"name":"Paul McMillan","email":"paul@mcmillan.ws","username":"paul-mcmillan"},"change_message_id":"1da67a72b4f0db9ac4d7f3dd9edea1ac913a30c1","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                    target\u003d\u0027passwordCredentials\u0027)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"            tenant_ref \u003d None"},{"line_number":315,"context_line":"            user_ref \u003d None"},{"line_number":316,"context_line":"            metadata_ref \u003d {}"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            if username:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F7FI%3D","line":315,"updated":"2012-10-26 21:30:36.000000000","message":"user_ref does not need to be defined.","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"d5866f6148be9f518b0e6e3ba456056344050252","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                    target\u003d\u0027passwordCredentials\u0027)"},{"line_number":313,"context_line":""},{"line_number":314,"context_line":"            tenant_ref \u003d None"},{"line_number":315,"context_line":"            user_ref \u003d None"},{"line_number":316,"context_line":"            metadata_ref \u003d {}"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"            if username:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F6Io%3D","line":315,"in_reply_to":"AAAALn%2F%2F7FI%3D","updated":"2012-10-29 13:58:02.000000000","message":"Paul -- not following why we wouldn\u0027t define user_ref here as its used below in some of the if blocks?","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"},{"author":{"_account_id":2230,"name":"Paul McMillan","email":"paul@mcmillan.ws","username":"paul-mcmillan"},"change_message_id":"1da67a72b4f0db9ac4d7f3dd9edea1ac913a30c1","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    (user_ref, tenant_ref, metadata_ref) \u003d auth_info"},{"line_number":350,"context_line":"                else:"},{"line_number":351,"context_line":"                    # remote authentication already performed"},{"line_number":352,"context_line":"                    if not user_ref:"},{"line_number":353,"context_line":"                        user_ref \u003d self.identity_api.get_user("},{"line_number":354,"context_line":"                            self.identity_api,"},{"line_number":355,"context_line":"                            user_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F7FM%3D","line":352,"updated":"2012-10-26 21:30:36.000000000","message":"This check is pointless. This is always None.","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"},{"author":{"_account_id":2230,"name":"Paul McMillan","email":"paul@mcmillan.ws","username":"paul-mcmillan"},"change_message_id":"7ac83a6c826a6c547351ec46c44b772a4ffb4eed","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    (user_ref, tenant_ref, metadata_ref) \u003d auth_info"},{"line_number":350,"context_line":"                else:"},{"line_number":351,"context_line":"                    # remote authentication already performed"},{"line_number":352,"context_line":"                    if not user_ref:"},{"line_number":353,"context_line":"                        user_ref \u003d self.identity_api.get_user("},{"line_number":354,"context_line":"                            self.identity_api,"},{"line_number":355,"context_line":"                            user_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F5xY%3D","line":352,"in_reply_to":"AAAALn%2F%2F6Iw%3D","updated":"2012-10-29 19:01:57.000000000","message":"I\u0027m sorry, it looks like I was staring a bit TOO closely at the code. I\u0027m not sure why I came to that conclusion.","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"d5866f6148be9f518b0e6e3ba456056344050252","unresolved":false,"context_lines":[{"line_number":349,"context_line":"                    (user_ref, tenant_ref, metadata_ref) \u003d auth_info"},{"line_number":350,"context_line":"                else:"},{"line_number":351,"context_line":"                    # remote authentication already performed"},{"line_number":352,"context_line":"                    if not user_ref:"},{"line_number":353,"context_line":"                        user_ref \u003d self.identity_api.get_user("},{"line_number":354,"context_line":"                            self.identity_api,"},{"line_number":355,"context_line":"                            user_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAALn%2F%2F6Iw%3D","line":352,"in_reply_to":"AAAALn%2F%2F7FM%3D","updated":"2012-10-29 13:58:02.000000000","message":"Paul -- Not follow your comment here.. Why is user_ref always None? The username can be in the request body even in the case of REMOTE_USER in which case we would have populated user_ref under if username try... above.","commit_id":"e9226e7d5fd64e8f126e488eef505f54852dd437"}],"tests/test_service.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"eaf8ce796699a241daca86738bc3f33b51d41b56","unresolved":false,"context_lines":[{"line_number":88,"context_line":"        local_token \u003d self.api.authenticate("},{"line_number":89,"context_line":"            {},"},{"line_number":90,"context_line":"            self._build_user_auth(\u0027FOO\u0027, \u0027foo2\u0027, None))"},{"line_number":91,"context_line":"        local_token \u003d self._inject_dummy_token(local_token)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        remote_token \u003d self.api.authenticate("},{"line_number":94,"context_line":"            {\u0027REMOTE_USER\u0027: \u0027FOO\u0027},"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAALn%2F%2F8jY%3D","line":91,"updated":"2012-10-25 15:53:54.000000000","message":"the naming/usage of _inject_dummy_token was pretty confusing to me... would prefer to see something like this:\n\n    def assertEqualTokens(self, a, b):\n        def normalize(token):\n            token[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027] \u003d \u0027dummy\u0027\n\n            # truncate to eliminate timing problems\n            issued \u003d token[\u0027access\u0027][\u0027token\u0027][\u0027issued_at\u0027]\n            token[\u0027access\u0027][\u0027token\u0027][\u0027issued_at\u0027] \u003d issued[:-8]\n\n            # truncate to eliminate timing problems\n            expires \u003d token[\u0027access\u0027][\u0027token\u0027][\u0027expires\u0027]\n            token[\u0027access\u0027][\u0027token\u0027][\u0027expires\u0027] \u003d expires[:-3]\n\n        return self.assertDictEqual(normalize(a), normalize(b))","commit_id":"fe08b0df68f146ec753992c9956c0affc04771d6"},{"author":{"_account_id":91,"name":"Alvaro","email":"aloga@ifca.unican.es","username":"aloga"},"change_message_id":"1411f9736e64756f1ac2fccfa1580601c13c5758","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        remote_token \u003d self.api.authenticate("},{"line_number":115,"context_line":"            {\u0027REMOTE_USER\u0027: \u0027FOO\u0027},"},{"line_number":116,"context_line":"            None)"},{"line_number":117,"context_line":"        self.assertEqualTokens(local_token, remote_token)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def test_scoped_remote_authn(self):"},{"line_number":120,"context_line":"        local_token \u003d self.api.authenticate("}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAALn%2F%2F3iM%3D","line":117,"updated":"2012-10-31 16:14:17.000000000","message":"This should be an assertRaises(exception.ValidationError ...)","commit_id":"1ec9b1150968d66b1f2da3a87505280259157114"}]}
