)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"06d47c1189b5f62876ab86344814237851bc4fe2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"_get_token_expiration should return isotime"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, _get_token_expiration method returns a normalize time,"},{"line_number":10,"context_line":"at the same time, _confirm_token_not_expired method returns a isotime."},{"line_number":11,"context_line":"We will cache the expire time returned by the two methods in the"},{"line_number":12,"context_line":"_TokenCache object. But _TokenCache object treats it as a isotime"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_510feb87","line":9,"updated":"2014-12-12 17:32:53.000000000","message":"normalized","commit_id":"01a2d235f7af5261c10221243c4a82987f056ba5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"06d47c1189b5f62876ab86344814237851bc4fe2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"_get_token_expiration should return isotime"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently, _get_token_expiration method returns a normalize time,"},{"line_number":10,"context_line":"at the same time, _confirm_token_not_expired method returns a isotime."},{"line_number":11,"context_line":"We will cache the expire time returned by the two methods in the"},{"line_number":12,"context_line":"_TokenCache object. But _TokenCache object treats it as a isotime"},{"line_number":13,"context_line":"when getting cache. Therefor, _get_token_expiration should return"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_f163773f","line":10,"updated":"2014-12-12 17:32:53.000000000","message":"returns an isotime","commit_id":"01a2d235f7af5261c10221243c4a82987f056ba5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"06d47c1189b5f62876ab86344814237851bc4fe2","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently, _get_token_expiration method returns a normalize time,"},{"line_number":10,"context_line":"at the same time, _confirm_token_not_expired method returns a isotime."},{"line_number":11,"context_line":"We will cache the expire time returned by the two methods in the"},{"line_number":12,"context_line":"_TokenCache object. But _TokenCache object treats it as a isotime"},{"line_number":13,"context_line":"when getting cache. Therefor, _get_token_expiration should return"},{"line_number":14,"context_line":"a isotime too."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_11f56356","line":12,"updated":"2014-12-12 17:32:53.000000000","message":"s/a/an/","commit_id":"01a2d235f7af5261c10221243c4a82987f056ba5"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"06d47c1189b5f62876ab86344814237851bc4fe2","unresolved":false,"context_lines":[{"line_number":10,"context_line":"at the same time, _confirm_token_not_expired method returns a isotime."},{"line_number":11,"context_line":"We will cache the expire time returned by the two methods in the"},{"line_number":12,"context_line":"_TokenCache object. But _TokenCache object treats it as a isotime"},{"line_number":13,"context_line":"when getting cache. Therefor, _get_token_expiration should return"},{"line_number":14,"context_line":"a isotime too."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I85dbaaed0c761ff2f4bcc960df94a4e106af1730"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a961159_913dd32d","line":13,"updated":"2014-12-12 17:32:53.000000000","message":"Therefore, _get_token_expiration should return isotime too.","commit_id":"01a2d235f7af5261c10221243c4a82987f056ba5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"499e325a12a8b16b6758d9e1bb081508a4205f28","unresolved":false,"context_lines":[{"line_number":12,"context_line":"_TokenCache object. But _TokenCache object treats it as an isotime"},{"line_number":13,"context_line":"when getting cache. Therefore, _get_token_expiration should return"},{"line_number":14,"context_line":"isotime too."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I85dbaaed0c761ff2f4bcc960df94a4e106af1730"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a961159_be6c3337","line":15,"updated":"2015-01-18 08:03:29.000000000","message":"This needs an associated bug. Please reference a bug or open the bug in LP and reference the bug: https://bugs.launchpad.net/keystonemiddleware","commit_id":"364a73c9bccf991f1f01f013bc0d3fb4b24ee1e7"}],"keystonemiddleware/auth_token.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"499e325a12a8b16b6758d9e1bb081508a4205f28","unresolved":false,"context_lines":[{"line_number":970,"context_line":"                    data \u003d self._identity_server.verify_token(token,"},{"line_number":971,"context_line":"                                                              retry)"},{"line_number":972,"context_line":"                    # No need to confirm token expiration here since"},{"line_number":973,"context_line":"                    # verify_token fails for expired tokens."},{"line_number":974,"context_line":"                    expires \u003d _get_token_expiration(data)"},{"line_number":975,"context_line":"                self._confirm_token_bind(data, env)"},{"line_number":976,"context_line":"                self._token_cache.store(token_id, data, expires)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_7e564b5f","line":973,"updated":"2015-01-18 08:03:29.000000000","message":"With your change to _get_token_expiration you\u0027re potentially returning different data now than before, as this is a direct extraction of the data from the token itself. In this case we do not run through the _confirm_token_not_expired logic.\n\nIt would probably be better to make _get_token_expires always hand out the correct format and have _confirm_token_not_expired simply become an assert if the token is expired/exception instead of handling the formatting.","commit_id":"364a73c9bccf991f1f01f013bc0d3fb4b24ee1e7"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"d5e376e86ed1dc143fa22d8c0b45051727f82a5f","unresolved":false,"context_lines":[{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"        data, expires \u003d cached"},{"line_number":1847,"context_line":""},{"line_number":1848,"context_line":"        try:"},{"line_number":1849,"context_line":"            expires \u003d timeutils.parse_isotime(expires)"},{"line_number":1850,"context_line":"        except ValueError:"},{"line_number":1851,"context_line":"            # Gracefully handle upgrade of expiration times from *nix"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_be2418c7","line":1848,"updated":"2015-01-21 08:04:39.000000000","message":"If we store a normalize_time into cache, this line doesn\u0027t raise ValueError. This is because we will jsonutils.dumps data when storing data and jsonutils.loads data when getting data, and normalize_time would be changed during data converting:\n\n\u003e\u003e\u003e current_time \u003d timeutils.parse_isotime(\u00272000-01-01T00:01:10.000123Z\u0027)\n\n\u003e\u003e\u003e expires \u003d timeutils.normalize_time(current_time)\n\n\u003e\u003e\u003e print expires\n\n2000-01-01 00:01:10.000123\n\n\u003e\u003e\u003e print jsonutils.loads(jsonutils.dumps(expires))\n\n2000-01-01T00:01:10.000123\n\n\u003e\u003e\u003e print timeutils.parse_isotime(jsonutils.loads(jsonutils.dumps(expires)))\n\n2000-01-01 00:01:10.000123+00:00","commit_id":"364a73c9bccf991f1f01f013bc0d3fb4b24ee1e7"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"ca51ad57adce97e6962e1a332032d53ed54051d7","unresolved":false,"context_lines":[{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"        data, expires \u003d cached"},{"line_number":1847,"context_line":""},{"line_number":1848,"context_line":"        try:"},{"line_number":1849,"context_line":"            expires \u003d timeutils.parse_isotime(expires)"},{"line_number":1850,"context_line":"        except ValueError:"},{"line_number":1851,"context_line":"            # Gracefully handle upgrade of expiration times from *nix"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_ca9f3d5e","line":1848,"in_reply_to":"1a930d6b_af9bf5c7","updated":"2015-01-22 02:10:02.000000000","message":"Get your point now.","commit_id":"364a73c9bccf991f1f01f013bc0d3fb4b24ee1e7"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"0016ae80b45ad08d22be80581455e05e0efe086a","unresolved":false,"context_lines":[{"line_number":1845,"context_line":""},{"line_number":1846,"context_line":"        data, expires \u003d cached"},{"line_number":1847,"context_line":""},{"line_number":1848,"context_line":"        try:"},{"line_number":1849,"context_line":"            expires \u003d timeutils.parse_isotime(expires)"},{"line_number":1850,"context_line":"        except ValueError:"},{"line_number":1851,"context_line":"            # Gracefully handle upgrade of expiration times from *nix"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_af9bf5c7","line":1848,"in_reply_to":"1a930d6b_be2418c7","updated":"2015-01-21 15:47:29.000000000","message":"I\u0027m not arguing that we wont raise an error, what I am commenting on is that we\u0027re still inconsistent in the data that we\u0027re caching. We should be consistent and always use the same time-form. Lets fix the inconsistency to avoid potential issues in the future as well as the root of this bug.\n\nThe fact that in uuid workflow we store directly from _get_token_expiration and in cms-based tokens we\u0027re using the output from _confirm_token_not_expired means that we are [based on your change] still inconsistent.\n\nI suggest _get_expiration_time return a consistent/cachable value and _confirm_token_not_expired is simply an assert/true/false validation.","commit_id":"364a73c9bccf991f1f01f013bc0d3fb4b24ee1e7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b6a14edde6b976d4c2953c961c732778eb7df0ef","unresolved":false,"context_lines":[{"line_number":411,"context_line":"    utcnow \u003d timeutils.utcnow()"},{"line_number":412,"context_line":"    if utcnow \u003e\u003d expires:"},{"line_number":413,"context_line":"        raise InvalidToken(_(\u0027Token authorization failed\u0027))"},{"line_number":414,"context_line":"    return timeutils.isotime(at\u003dexpires, subsecond\u003dTrue)"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":""},{"line_number":417,"context_line":"def _v3_to_v2_catalog(catalog):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_64f73f5a","side":"PARENT","line":414,"updated":"2015-02-09 22:42:22.000000000","message":"++ nice job, i don\u0027t know why this ever had to return anything\n\nmaybe in another patch change this function to: _is_token_expired","commit_id":"85c8830f15040925f97d08a20b15fd8c429171a4"}]}
