)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d416b0caa0e676d39af852f6623ea1be6b4340ce","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Allow fetching an expired token"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A service user from auth_token middleware should be able to fetch a"},{"line_number":10,"context_line":"token that has expired within a certain window so that long running"},{"line_number":11,"context_line":"operations can finish."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"5a74a57a_cdab5f88","line":9,"updated":"2016-11-23 20:42:35.000000000","message":"Do we restrict this to only being called by the service user?","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"}],"api-ref/source/v3/parameters.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aa10c77bd818d1d279dcefe4c177466ae6b6ee3","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# variables in query"},{"line_number":133,"context_line":"allow_expired:"},{"line_number":134,"context_line":"  description: |"},{"line_number":135,"context_line":"    (Since v3.8) Allow fetching a token that has expired. By default expired"},{"line_number":136,"context_line":"    tokens return a 404 exception."},{"line_number":137,"context_line":"  in: query"},{"line_number":138,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_15b83c74","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":16},"updated":"2016-11-20 13:23:59.000000000","message":"add a new \"What\u0027s new in 3.8\" section to https://github.com/openstack/keystone/blob/master/api-ref/source/v3/index.rst","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe7a3f2dd7eddf6072f541415dabfe195f137260","unresolved":false,"context_lines":[{"line_number":132,"context_line":"# variables in query"},{"line_number":133,"context_line":"allow_expired:"},{"line_number":134,"context_line":"  description: |"},{"line_number":135,"context_line":"    (Since v3.8) Allow fetching a token that has expired. By default expired"},{"line_number":136,"context_line":"    tokens return a 404 exception."},{"line_number":137,"context_line":"  in: query"},{"line_number":138,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_59dae718","line":135,"range":{"start_line":135,"start_character":4,"end_line":135,"end_character":16},"in_reply_to":"7a77a97e_15b83c74","updated":"2016-11-21 05:51:41.000000000","message":"Done","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"}],"keystone/auth/controllers.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"28b2f5eae48929f2eb44e0047aa72fc731a13764","unresolved":false,"context_lines":[{"line_number":548,"context_line":"    @controller.protected()"},{"line_number":549,"context_line":"    def check_token(self, request):"},{"line_number":550,"context_line":"        token_id \u003d request.context_dict.get(\u0027subject_token_id\u0027)"},{"line_number":551,"context_line":"        window_seconds \u003d self._token_validation_window(request)"},{"line_number":552,"context_line":"        token_data \u003d self.token_provider_api.validate_v3_token("},{"line_number":553,"context_line":"            token_id, window_seconds\u003dwindow_seconds)"},{"line_number":554,"context_line":"        # NOTE(morganfainberg): The code in"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_469b5a72","line":551,"range":{"start_line":551,"start_character":8,"end_line":551,"end_character":22},"updated":"2016-10-07 05:20:01.000000000","message":"call it grace_window?","commit_id":"f02d2bd36528e01083194f61b6c5fe833135eb1d"}],"keystone/conf/token.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"28b2f5eae48929f2eb44e0047aa72fc731a13764","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    \u0027grace_window\u0027,"},{"line_number":172,"context_line":"    default\u003d48 * 60 * 60,"},{"line_number":173,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":174,"context_line":"This controls the number of seconds that a token can be retrieved for past the"},{"line_number":175,"context_line":"tokens expiry. This allows long running operations to succeed."},{"line_number":176,"context_line":"\"\"\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_86a8028f","line":175,"range":{"start_line":174,"start_character":66,"end_line":175,"end_character":13},"updated":"2016-10-07 05:20:01.000000000","message":"\"when expired.\"","commit_id":"f02d2bd36528e01083194f61b6c5fe833135eb1d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1d618e05938b2dfa456f5be99648da1306bb0413","unresolved":false,"context_lines":[{"line_number":172,"context_line":"    default\u003d48 * 60 * 60,"},{"line_number":173,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":174,"context_line":"This controls the number of seconds that a token can be retrieved for past the"},{"line_number":175,"context_line":"tokens expiry. This allows long running operations to succeed."},{"line_number":176,"context_line":"\"\"\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_1f91f299","line":175,"in_reply_to":"1a95cdbc_86a8028f","updated":"2016-10-11 23:39:12.000000000","message":"nit++","commit_id":"f02d2bd36528e01083194f61b6c5fe833135eb1d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"28b2f5eae48929f2eb44e0047aa72fc731a13764","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":174,"context_line":"This controls the number of seconds that a token can be retrieved for past the"},{"line_number":175,"context_line":"tokens expiry. This allows long running operations to succeed."},{"line_number":176,"context_line":"\"\"\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"GROUP_NAME \u003d __name__.split(\u0027.\u0027)[-1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a95cdbc_a6a97e92","line":176,"range":{"start_line":176,"start_character":0,"end_line":176,"end_character":3},"updated":"2016-10-07 05:20:01.000000000","message":"\"Defaults to two days.\" \u003c\u003c not sure if we want to add that","commit_id":"f02d2bd36528e01083194f61b6c5fe833135eb1d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"1d618e05938b2dfa456f5be99648da1306bb0413","unresolved":false,"context_lines":[{"line_number":173,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":174,"context_line":"This controls the number of seconds that a token can be retrieved for past the"},{"line_number":175,"context_line":"tokens expiry. This allows long running operations to succeed."},{"line_number":176,"context_line":"\"\"\"))"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"GROUP_NAME \u003d __name__.split(\u0027.\u0027)[-1]"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa6399be_bff806e7","line":176,"in_reply_to":"1a95cdbc_a6a97e92","updated":"2016-10-11 23:39:12.000000000","message":"nit++ I don\u0027t expect people to know how long 172,800 seconds is.\n\nI\u0027d also suggest noting that operators may want to increase this value if they have long running operations that may exceed this value, and that if they\u0027re using Fernet tokens, they need to keep Fernet keys around longer than this many seconds.","commit_id":"f02d2bd36528e01083194f61b6c5fe833135eb1d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aa10c77bd818d1d279dcefe4c177466ae6b6ee3","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    default\u003d48 * 60 * 60,"},{"line_number":146,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":147,"context_line":"This controls the number of seconds that a token can be retrieved for beyond"},{"line_number":148,"context_line":"the inbuilt expiry time. This allows long running operations to succeed."},{"line_number":149,"context_line":"Defaults to two days."},{"line_number":150,"context_line":"\"\"\"))"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_957b6cbd","line":148,"range":{"start_line":148,"start_character":4,"end_line":148,"end_character":11},"updated":"2016-11-20 13:23:59.000000000","message":"super nit: This is so UK/british spelling, as someone who straddles both UK/US spelling, I normally would use built-in.","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe7a3f2dd7eddf6072f541415dabfe195f137260","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    default\u003d48 * 60 * 60,"},{"line_number":146,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":147,"context_line":"This controls the number of seconds that a token can be retrieved for beyond"},{"line_number":148,"context_line":"the inbuilt expiry time. This allows long running operations to succeed."},{"line_number":149,"context_line":"Defaults to two days."},{"line_number":150,"context_line":"\"\"\"))"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a77a97e_79d7a3ed","line":148,"range":{"start_line":148,"start_character":4,"end_line":148,"end_character":11},"in_reply_to":"7a77a97e_957b6cbd","updated":"2016-11-21 05:51:41.000000000","message":"Done","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d416b0caa0e676d39af852f6623ea1be6b4340ce","unresolved":false,"context_lines":[{"line_number":141,"context_line":"\"\"\"))"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"allow_expired_window \u003d cfg.IntOpt("},{"line_number":144,"context_line":"    \u0027allow_expired_window\u0027,"},{"line_number":145,"context_line":"    default\u003d48 * 60 * 60,"},{"line_number":146,"context_line":"    help\u003dutils.fmt(\"\"\""},{"line_number":147,"context_line":"This controls the number of seconds that a token can be retrieved for beyond"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_edb57bcd","line":144,"updated":"2016-11-23 20:42:35.000000000","message":"We need to add some documentation around this and the rotation of fernet keys. Regardless of what this value is, if a fernet key is removed based on `[token] expiration` time, then keystone will not be able to validate it.\n\nWe\u0027ve always suggested that operators take into consideration their `[token] expiration` time when doing rotation to avoid returning an Unauthorized exception even though the token is still valid. We\u0027re going to need to amend those statements with this configuration option instead for the same reasons.","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"}],"keystone/tests/unit/test_backend_sql.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"e6131181383072e0db0f60e711fb49cfb0936f63","unresolved":false,"context_lines":[{"line_number":737,"context_line":"        self.assertEqual(token_sql._expiry_range_batched, mysql_strategy.func)"},{"line_number":738,"context_line":"        self.assertEqual({\u0027batch_size\u0027: 1000}, mysql_strategy.keywords)"},{"line_number":739,"context_line":""},{"line_number":740,"context_line":"    def test_expiry_range_with_allow_expired(self):"},{"line_number":741,"context_line":"        window_secs \u003d 200"},{"line_number":742,"context_line":"        self.config_fixture.config(group\u003d\u0027token\u0027,"},{"line_number":743,"context_line":"                                   allow_expired_window\u003dwindow_secs)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_eb02e00a","line":740,"range":{"start_line":740,"start_character":8,"end_line":740,"end_character":44},"updated":"2016-11-21 15:58:49.000000000","message":"yey!","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"e6131181383072e0db0f60e711fb49cfb0936f63","unresolved":false,"context_lines":[{"line_number":2279,"context_line":"            frozen_datetime.tick(delta\u003ddatetime.timedelta(seconds\u003d12))"},{"line_number":2280,"context_line":"            self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":2281,"context_line":""},{"line_number":2282,"context_line":"            # but if we pass allow_expired it validates"},{"line_number":2283,"context_line":"            self._validate_token(token, allow_expired\u003dTrue)"},{"line_number":2284,"context_line":""},{"line_number":2285,"context_line":"            # and then if we\u0027re passed the allow_expired_window it will fail"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a77a97e_5971f176","line":2282,"range":{"start_line":2282,"start_character":12,"end_line":2282,"end_character":55},"updated":"2016-11-21 15:58:49.000000000","message":"is it possible to call token_flush here? It would be a good test ensuring that flushing works as expected.","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d416b0caa0e676d39af852f6623ea1be6b4340ce","unresolved":false,"context_lines":[{"line_number":2279,"context_line":"            frozen_datetime.tick(delta\u003ddatetime.timedelta(seconds\u003d12))"},{"line_number":2280,"context_line":"            self._validate_token(token, expected_status\u003dhttp_client.NOT_FOUND)"},{"line_number":2281,"context_line":""},{"line_number":2282,"context_line":"            # but if we pass allow_expired it validates"},{"line_number":2283,"context_line":"            self._validate_token(token, allow_expired\u003dTrue)"},{"line_number":2284,"context_line":""},{"line_number":2285,"context_line":"            # and then if we\u0027re passed the allow_expired_window it will fail"}],"source_content_type":"text/x-python","patch_set":12,"id":"5a74a57a_cddd1f44","line":2282,"in_reply_to":"7a77a97e_5971f176","updated":"2016-11-23 20:42:35.000000000","message":"The probably make a good sql specific test since this is going to be tested against fernet, which won\u0027t have any affect on token flush.","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"}],"keystone/token/persistence/backends/sql.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"12be585cb0e65c951ae6cd5110d944a0c1c1ac6f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_ec8a371a","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"updated":"2016-11-03 13:02:30.000000000","message":"i am not sure about this. Why is it +? Won\u0027t it flush all tokens in range (now - expiration, now + expired_window)?","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d88b2adc4bc6bedd9720d06816fae7d4f243cff5","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_4e2edbfb","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"7a77a97e_0bc71c13","updated":"2016-11-18 06:01:51.000000000","message":"It works because i\u0027m an idiot and i\u0027m wanting to remove things that have expired in the past, not check for inclusion. \n\nThe tests pass because the test for this is going to be checking for the right number, there\u0027s not a good way to check the sql is going to be correct.","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"c92aad3abd35e187f9af3c8b135f66d9a0840a2e","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_7e65b3df","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"7a77a97e_337294e6","updated":"2016-11-15 05:31:10.000000000","message":"No you\u0027re right, and i\u0027ve looked at this code a number of times and it still seems like it should be the other way around. Oh well - thanks!","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"6ccd8566370261e9b747ada49bbb9573285d3c10","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_0bc71c13","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"7a77a97e_7e65b3df","updated":"2016-11-15 07:31:41.000000000","message":"Why did it pass the tests then?","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"26e1006079e6a2cd316e9d8d79a1d0aa45825f7a","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_2f8181fb","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"ba5da102_2cfd0f6e","updated":"2016-11-03 13:19:35.000000000","message":"I have just tested it with the following script and it returned 401: http://paste.openstack.org/show/587759/","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"f8c38fe06528637691e7b5e7739804bb65ad7d6d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a77a97e_337294e6","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"ba5da102_2f8181fb","updated":"2016-11-15 05:23:30.000000000","message":"Can you have another look at this? I think this is right. \n\nThis is the expiry upper bound so we want to make sure we don\u0027t delete this that are greater than the expiry. Testing the other way doesn\u0027t seem to work.","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"19dace02a34fe0b9d163a0dc170041be14e04c51","unresolved":false,"context_lines":[{"line_number":51,"context_line":"def _expiry_upper_bound_func():"},{"line_number":52,"context_line":"    # don\u0027t flush anything within the grace window"},{"line_number":53,"context_line":"    sec \u003d datetime.timedelta(seconds\u003dCONF.token.allow_expired_window)"},{"line_number":54,"context_line":"    return timeutils.utcnow() + sec"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def _expiry_range_batched(session, upper_bound_func, batch_size):"}],"source_content_type":"text/x-python","patch_set":8,"id":"ba5da102_2cfd0f6e","line":54,"range":{"start_line":54,"start_character":30,"end_line":54,"end_character":31},"in_reply_to":"ba5da102_ec8a371a","updated":"2016-11-03 13:04:48.000000000","message":"I think that upper bound for expiry should be now - expired_window.","commit_id":"771dbaa631b08ad3dd79f25280c76d24dc6a0fe2"}],"releasenotes/notes/fetch-expired-token-f5d845b9601bc1ef.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"b84fb2444ae25f257f184e3b7f55cab5b9076514","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":4,"id":"fa6399be_ddc4d441","line":3,"range":{"start_line":3,"start_character":7,"end_line":3,"end_character":22},"updated":"2016-10-19 04:32:41.000000000","message":"use `` instead, this is rendered as rst","commit_id":"9dde22fb8406192a95b37c72305ad7f12e0f06f4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aa10c77bd818d1d279dcefe4c177466ae6b6ee3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_d536c401","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"updated":"2016-11-20 13:23:59.000000000","message":"Add:\n\n  [`blueprint allow-expired \u003chttps://blueprints.launchpad.net/keystone/+spec/allow-expired\u003e`_]\n\nas the first actual line","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe7a3f2dd7eddf6072f541415dabfe195f137260","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_79eec3b5","line":2,"range":{"start_line":2,"start_character":0,"end_line":2,"end_character":8},"in_reply_to":"7a77a97e_d536c401","updated":"2016-11-21 05:51:41.000000000","message":"Done","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aa10c77bd818d1d279dcefe4c177466ae6b6ee3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_15467c7a","line":3,"range":{"start_line":3,"start_character":7,"end_line":3,"end_character":22},"updated":"2016-11-20 13:23:59.000000000","message":"double backticks (``) here","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1aa10c77bd818d1d279dcefe4c177466ae6b6ee3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_3561b805","line":3,"range":{"start_line":3,"start_character":44,"end_line":3,"end_character":65},"updated":"2016-11-20 13:23:59.000000000","message":"token validation calls (``GET/HEAD /v3/auth/tokens``)","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fe7a3f2dd7eddf6072f541415dabfe195f137260","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - An \u0027allow_expired\u0027 flag is added to the token validation call that allows"},{"line_number":4,"context_line":"    fetching a token that has expired. This allows for validating tokens in"},{"line_number":5,"context_line":"    long running operations."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"7a77a97e_9929dff5","line":3,"range":{"start_line":3,"start_character":44,"end_line":3,"end_character":65},"in_reply_to":"7a77a97e_3561b805","updated":"2016-11-21 05:51:41.000000000","message":"Done","commit_id":"a7a5d7bf2de7efe756991ed81a0ff33be7a4d92c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"55db84045c0d2688cfa185d25e26813c1ba01c9d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`blueprint allow-expired \u003chttps://blueprints.launchpad.net/keystone/+spec/allow-expired\u003e`_]"},{"line_number":5,"context_line":"    An `allow_expired` flag is added to the token validation call"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5a74a57a_70d94421","line":2,"updated":"2016-11-23 21:11:07.000000000","message":"This should also amend the upgrades section since it is going to affect how operator rotate their fernet key repositories.","commit_id":"33e476ace764e6bed7a7b8823efe2ea5fd9b1881"}]}
