)]}'
{"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5f841f9d217dc969337e8b44be9882d1fe9ecbd2","unresolved":false,"context_lines":[{"line_number":144,"context_line":"            base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2])"},{"line_number":145,"context_line":"        self.assertLess(len(encrypted_token), 255)"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_tampered_encrypted_token_throws_exception(self):"},{"line_number":148,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":149,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":150,"context_line":"        # All we are validating here is that the token is encrypted and"}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_3912c0b4","side":"PARENT","line":147,"updated":"2015-03-12 05:11:39.000000000","message":"Should this have disappeared?","commit_id":"d87768313b6e40b6b1754562fb041646f0c83b92"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"5f841f9d217dc969337e8b44be9882d1fe9ecbd2","unresolved":false,"context_lines":[{"line_number":215,"context_line":"            uuid.uuid4().hex)"},{"line_number":216,"context_line":"        self.assertLess(len(encrypted_token), 255)"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def test_tampered_encrypted_trust_token_throws_exception(self):"},{"line_number":219,"context_line":"        user_id \u003d uuid.uuid4().hex"},{"line_number":220,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":221,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_790c3895","side":"PARENT","line":218,"updated":"2015-03-12 05:11:39.000000000","message":"same as above.","commit_id":"d87768313b6e40b6b1754562fb041646f0c83b92"}],"keystone/token/providers/fernet/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"86b186ecd263701676a0a276929030f60542afba","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # rather than appearing in the payload, the creation time is encoded"},{"line_number":204,"context_line":"        # into the token format itself"},{"line_number":205,"context_line":"        created_at \u003d Provider._created_at(token_str)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        # because expiration is not encoded into the token, we need to compute"},{"line_number":208,"context_line":"        # it dynamically"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_e0a6a452","line":205,"updated":"2015-03-05 21:25:34.000000000","message":"is this suppose to be _creation_time()?","commit_id":"bc2654b9750829214a9f3864073d3301c7f403be"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ff1ff321706e9e60a68ca23af2226108f05e9245","unresolved":false,"context_lines":[{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # rather than appearing in the payload, the creation time is encoded"},{"line_number":204,"context_line":"        # into the token format itself"},{"line_number":205,"context_line":"        created_at \u003d Provider._created_at(token_str)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        # because expiration is not encoded into the token, we need to compute"},{"line_number":208,"context_line":"        # it dynamically"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_14a7790d","line":205,"in_reply_to":"9a80dd14_e0a6a452","updated":"2015-03-05 21:30:24.000000000","message":"yes, i put this up before running tests one last time. have a few changes to make still, so WIP","commit_id":"bc2654b9750829214a9f3864073d3301c7f403be"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f3b82a5087d4620be7c99f8e402feab6edb3d8e","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        # Although we accept issued_at and expires_at as part of this method\u0027s"},{"line_number":95,"context_line":"        # signature, we don\u0027t encode either into the token\u0027s payload, and thus"},{"line_number":96,"context_line":"        # just pass the both back through to the client as part of token_data."},{"line_number":97,"context_line":"        # this will still give the client an indication of how long the token"},{"line_number":98,"context_line":"        # will last. Instead, the token\u0027s creation time is encoded into the"},{"line_number":99,"context_line":"        # Fernet format itself, and the token\u0027s expiration is just computed"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_5cd71d4b","line":96,"updated":"2015-03-06 23:10:03.000000000","message":"change \"the both\" to \"them both\"","commit_id":"0cd63290447a0a61278f6c8c73f04aa354cd96ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f3b82a5087d4620be7c99f8e402feab6edb3d8e","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        # this will still give the client an indication of how long the token"},{"line_number":98,"context_line":"        # will last. Instead, the token\u0027s creation time is encoded into the"},{"line_number":99,"context_line":"        # Fernet format itself, and the token\u0027s expiration is just computed"},{"line_number":100,"context_line":"        # from that based on CONF."},{"line_number":101,"context_line":"        token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":102,"context_line":"            user_id,"},{"line_number":103,"context_line":"            method_names,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_5c3e3d8d","line":100,"updated":"2015-03-06 23:10:03.000000000","message":"change \"that\" to \"the token creation time\"","commit_id":"0cd63290447a0a61278f6c8c73f04aa354cd96ed"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4f3b82a5087d4620be7c99f8e402feab6edb3d8e","unresolved":false,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        # convert those bytes to an integer"},{"line_number":157,"context_line":"        # (it\u0027s a 64-bit \"unsigned long long int\" in C)"},{"line_number":158,"context_line":"        timestamp_int \u003d struct.unpack(\"\u003eQ\", timestamp_bytes)[0]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # and with an integer, it\u0027s trivial to produce a datetime object"},{"line_number":161,"context_line":"        created_at \u003d datetime.datetime.fromtimestamp(timestamp_int)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_dc494d32","line":158,"updated":"2015-03-06 23:10:03.000000000","message":"(nit) use \u0027 for strings... also, could use a symbol for the \u0027\u003eQ\u0027 string to help explain it.","commit_id":"0cd63290447a0a61278f6c8c73f04aa354cd96ed"},{"author":{"_account_id":13152,"name":"Jorge Munoz","email":"elkidster@gmail.com","username":"jmunoz"},"change_message_id":"a2c485b53c1be7141e5d449e876e26e90ef2ce78","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        timestamp_int \u003d struct.unpack(\"\u003eQ\", timestamp_bytes)[0]"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        # and with an integer, it\u0027s trivial to produce a datetime object"},{"line_number":161,"context_line":"        created_at \u003d datetime.datetime.fromtimestamp(timestamp_int)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        return created_at"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a80dd14_f71f8c59","line":161,"updated":"2015-03-11 05:13:14.000000000","message":"This should be in utc: created_at \u003d datetime.datetime.utcfromtimestamp(timestamp_int)","commit_id":"f96f2b214fc6ce7f0b3412f6a01fbcd72b066eb9"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"4cc2e9ce8daccbe1cd4bcd4add94051bf4bfcfa8","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        created_at \u003d Provider._creation_time(token_str)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        # because expiration is not encoded into the token, we need to compute"},{"line_number":204,"context_line":"        # it dynamically"},{"line_number":205,"context_line":"        lifespan \u003d datetime.timedelta(seconds\u003dCONF.token.expiration)"},{"line_number":206,"context_line":"        expires_at \u003d timeutils.normalize_time(created_at + lifespan)"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"9a80dd14_19d6dcf1","line":204,"updated":"2015-03-12 05:08:24.000000000","message":"This looks like a hold-over from the attempt to utilize the creation_time + conf.token.expiration, the expieration should be encoded in the token now right?","commit_id":"14c704f5563dbf63bb59b45b96d9e76db90592e2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"db1c454851568896bf80e52c1dde93a40bc5699e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"# Fernet byte indexes as as computed by pypi/keyless_fernet and defined in"},{"line_number":34,"context_line":"# https://github.com/fernet/spec"},{"line_number":35,"context_line":"TIMESTAMP_START \u003d 1"},{"line_number":36,"context_line":"TIMESTAMP_END \u003d 9"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a80dd14_14e2232f","line":33,"updated":"2015-03-12 05:44:21.000000000","message":"typo: as as","commit_id":"c83f8920bf59563631673c51acd94ce1134a9852"}]}
