)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Convert audit_ids to bytes before msgpacking"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Converting the audit_ids to bytes before sending them to msgpack."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"partially implements bp klw-tokens"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"9a80dd14_88734ae6","line":9,"updated":"2015-03-05 23:17:56.000000000","message":"why?","commit_id":"8405516294858e65a8596fec635cc60c56001133"}],"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6601eff4352293237bc8c3426bcb31f82c64a67f","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        # decrypted properly, not the actual validity of token data."},{"line_number":120,"context_line":"        issued_at \u003d timeutils.isotime(timeutils.utcnow())"},{"line_number":121,"context_line":"        expires_at \u003d timeutils.isotime(timeutils.utcnow())"},{"line_number":122,"context_line":"        audit_ids \u003d provider.random_urlsafe_str()"},{"line_number":123,"context_line":"        exp_token_data \u003d {"},{"line_number":124,"context_line":"            \u0027token\u0027: {"},{"line_number":125,"context_line":"                \u0027issued_at\u0027: issued_at,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_e5ed238d","line":122,"updated":"2015-03-04 16:35:49.000000000","message":"if the variable name is going to be plural, make it a list here?","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"92dfe4bfe4f2d3e84a24bd7aa36833c7e4e1173d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"        # decrypted properly, not the actual validity of token data."},{"line_number":120,"context_line":"        issued_at \u003d timeutils.isotime(timeutils.utcnow())"},{"line_number":121,"context_line":"        expires_at \u003d timeutils.isotime(timeutils.utcnow())"},{"line_number":122,"context_line":"        audit_ids \u003d provider.random_urlsafe_str()"},{"line_number":123,"context_line":"        exp_token_data \u003d {"},{"line_number":124,"context_line":"            \u0027token\u0027: {"},{"line_number":125,"context_line":"                \u0027issued_at\u0027: issued_at,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_0765d7e0","line":122,"in_reply_to":"9a80dd14_e5ed238d","updated":"2015-03-04 18:43:26.000000000","message":"Done","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6601eff4352293237bc8c3426bcb31f82c64a67f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":165,"context_line":"        # All we are validating here is that the token is encrypted and"},{"line_number":166,"context_line":"        # decrypted properly, not the actual validity of token data."},{"line_number":167,"context_line":"        audit_ids \u003d provider.random_urlsafe_str()"},{"line_number":168,"context_line":"        token_data \u003d {"},{"line_number":169,"context_line":"            \u0027token\u0027: {"},{"line_number":170,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_058957ca","line":167,"updated":"2015-03-04 16:35:49.000000000","message":"same","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"92dfe4bfe4f2d3e84a24bd7aa36833c7e4e1173d","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":165,"context_line":"        # All we are validating here is that the token is encrypted and"},{"line_number":166,"context_line":"        # decrypted properly, not the actual validity of token data."},{"line_number":167,"context_line":"        audit_ids \u003d provider.random_urlsafe_str()"},{"line_number":168,"context_line":"        token_data \u003d {"},{"line_number":169,"context_line":"            \u0027token\u0027: {"},{"line_number":170,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a7e88b7d","line":167,"in_reply_to":"9a80dd14_058957ca","updated":"2015-03-04 18:43:26.000000000","message":"Done","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            \u0027token\u0027: {"},{"line_number":124,"context_line":"                \u0027issued_at\u0027: issued_at,"},{"line_number":125,"context_line":"                \u0027expires_at\u0027: expires_at,"},{"line_number":126,"context_line":"                \u0027audit_ids\u0027: audit_ids"},{"line_number":127,"context_line":"            }"},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_685ff641","line":126,"updated":"2015-03-05 23:17:56.000000000","message":"revert this change.","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            \u0027token\u0027: {"},{"line_number":169,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":170,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":171,"context_line":"                \u0027audit_ids\u0027: audit_ids"},{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_c8546223","line":171,"updated":"2015-03-05 23:17:56.000000000","message":"leave the trailing ,","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":168,"context_line":"            \u0027token\u0027: {"},{"line_number":169,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":170,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":171,"context_line":"                \u0027audit_ids\u0027: audit_ids"},{"line_number":172,"context_line":"            }"},{"line_number":173,"context_line":"        }"},{"line_number":174,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_7227bcca","line":171,"in_reply_to":"9a80dd14_c8546223","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            \u0027token\u0027: {"},{"line_number":187,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":188,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":189,"context_line":"                \u0027audit_ids\u0027: audit_ids"},{"line_number":190,"context_line":"            }"},{"line_number":191,"context_line":"        }"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_283dfede","line":189,"updated":"2015-03-05 23:17:56.000000000","message":"leave the trailing ,","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":186,"context_line":"            \u0027token\u0027: {"},{"line_number":187,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":188,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":189,"context_line":"                \u0027audit_ids\u0027: audit_ids"},{"line_number":190,"context_line":"            }"},{"line_number":191,"context_line":"        }"},{"line_number":192,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_fd061d1c","line":189,"in_reply_to":"9a80dd14_283dfede","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                \u0027OS-TRUST:trust\u0027: {\u0027id\u0027: uuid.uuid4().hex},"},{"line_number":248,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":249,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":250,"context_line":"                \u0027audit_ids\u0027: [provider.random_urlsafe_str()]"},{"line_number":251,"context_line":"            }"},{"line_number":252,"context_line":"        }"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_682616d0","line":250,"updated":"2015-03-05 23:17:56.000000000","message":"leave the trailing ,\n\nalso, why change the pattern of assigning to audit_ids?","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":247,"context_line":"                \u0027OS-TRUST:trust\u0027: {\u0027id\u0027: uuid.uuid4().hex},"},{"line_number":248,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":249,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":250,"context_line":"                \u0027audit_ids\u0027: [provider.random_urlsafe_str()]"},{"line_number":251,"context_line":"            }"},{"line_number":252,"context_line":"        }"},{"line_number":253,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_7d406d34","line":250,"in_reply_to":"9a80dd14_682616d0","updated":"2015-03-06 17:08:47.000000000","message":"Only reason I didn\u0027t assign the ids to \u0027audit_ids\u0027 before using them here is because we don\u0027t need to compare them or validate them, so there isn\u0027t a need to assign them to anything since we\u0027re not asserting they didn\u0027t change.","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                \u0027OS-TRUST:trust\u0027: {\u0027id\u0027: uuid.uuid4().hex},"},{"line_number":264,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":265,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":266,"context_line":"                \u0027audit_ids\u0027: [provider.random_urlsafe_str()]"},{"line_number":267,"context_line":"            }"},{"line_number":268,"context_line":"        }"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_a8300e02","line":266,"updated":"2015-03-05 23:17:56.000000000","message":"leave the trailing ,","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":263,"context_line":"                \u0027OS-TRUST:trust\u0027: {\u0027id\u0027: uuid.uuid4().hex},"},{"line_number":264,"context_line":"                \u0027issued_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":265,"context_line":"                \u0027expires_at\u0027: timeutils.isotime(timeutils.utcnow()),"},{"line_number":266,"context_line":"                \u0027audit_ids\u0027: [provider.random_urlsafe_str()]"},{"line_number":267,"context_line":"            }"},{"line_number":268,"context_line":"        }"},{"line_number":269,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_3d7275ad","line":266,"in_reply_to":"9a80dd14_a8300e02","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0e6afaec7296f45d58676428af5d38fbe61e0ba0","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def test_domain_scoped_payload_with_default_domain(self):"},{"line_number":131,"context_line":"        exp_user_id \u003d uuid.uuid4().hex"},{"line_number":132,"context_line":"        exp_domain_id \u003d CONF.identity.default_domain_id"},{"line_number":133,"context_line":"        exp_audit_ids \u003d base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        payload \u003d token_formatters.DomainScopedPayload.assemble("}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_731ed460","line":132,"updated":"2015-03-06 21:32:12.000000000","message":"missed this one.","commit_id":"703604f946a4e1a4b82d1d27203fde529bfbfabd"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"67a164d35cd19626fdadeabb2e42b7eb6712b275","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    def test_domain_scoped_payload_with_default_domain(self):"},{"line_number":131,"context_line":"        exp_user_id \u003d uuid.uuid4().hex"},{"line_number":132,"context_line":"        exp_domain_id \u003d CONF.identity.default_domain_id"},{"line_number":133,"context_line":"        exp_audit_ids \u003d base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        payload \u003d token_formatters.DomainScopedPayload.assemble("}],"source_content_type":"text/x-python","patch_set":11,"id":"9a80dd14_339d3cbd","line":132,"in_reply_to":"9a80dd14_731ed460","updated":"2015-03-06 21:34:53.000000000","message":"Done","commit_id":"703604f946a4e1a4b82d1d27203fde529bfbfabd"}],"keystone/token/provider.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"cf1e7fba804787926ddad5b6aa6779c5e8e7d216","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def random_urlsafe_str(str_to_decode\u003dNone):"},{"line_number":57,"context_line":"    \"\"\"Generate a random URL-safe string."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    :param str_to_decode: string to decode, if one isn\u0027t provided generate a"},{"line_number":60,"context_line":"                          random one."},{"line_number":61,"context_line":"    :returns: a base64 encoded representation of the uuid in bytes."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_db1e8cba","line":59,"updated":"2015-03-04 02:53:45.000000000","message":"suggestion: if not provided generate a random one.","commit_id":"a85bb1c8378de3eece0f732dd9eefab658c74ef8"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1678d63d6e90055d44abd3f168e9dc09747933f2","unresolved":false,"context_lines":[{"line_number":56,"context_line":"def random_urlsafe_str(str_to_decode\u003dNone):"},{"line_number":57,"context_line":"    \"\"\"Generate a random URL-safe string."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    :param str_to_decode: string to decode, if one isn\u0027t provided generate a"},{"line_number":60,"context_line":"                          random one."},{"line_number":61,"context_line":"    :returns: a base64 encoded representation of the uuid in bytes."},{"line_number":62,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"ba7be1f8_766f75fc","line":59,"in_reply_to":"ba7be1f8_db1e8cba","updated":"2015-03-04 03:39:39.000000000","message":"++ Done","commit_id":"a85bb1c8378de3eece0f732dd9eefab658c74ef8"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6601eff4352293237bc8c3426bcb31f82c64a67f","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":"    # chop the padding (\u003d\u003d) off the end of the encoding to save space"},{"line_number":64,"context_line":"    if str_to_decode:"},{"line_number":65,"context_line":"        return base64.urlsafe_b64encode(str_to_decode)[:-2]"},{"line_number":66,"context_line":"    else:"},{"line_number":67,"context_line":"        return base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_05d157fb","line":64,"updated":"2015-03-04 16:35:49.000000000","message":"you\u0027re encoding a string here to base64, not decoding it -- so i don\u0027t understand the name. it\u0027s also no longer random, if you\u0027re providing data, so the method name is a misnomer. all this leads me to suggest you should be writing a new function to do what you want :)","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"92dfe4bfe4f2d3e84a24bd7aa36833c7e4e1173d","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":"    # chop the padding (\u003d\u003d) off the end of the encoding to save space"},{"line_number":64,"context_line":"    if str_to_decode:"},{"line_number":65,"context_line":"        return base64.urlsafe_b64encode(str_to_decode)[:-2]"},{"line_number":66,"context_line":"    else:"},{"line_number":67,"context_line":"        return base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_ec0b4829","line":64,"in_reply_to":"9a80dd14_05d157fb","updated":"2015-03-04 18:43:26.000000000","message":"Done","commit_id":"a3dccdeb36a6ceac7304814a0342ed575d0a4554"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8f1e8498301476aece0cf677acd2f0460d0ac719","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def base64_encode(str_to_encode):"},{"line_number":57,"context_line":"    \"\"\"Encode a URL-safe string.\"\"\""},{"line_number":58,"context_line":"    return base64.urlsafe_b64encode(str_to_encode)[:-2]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def random_urlsafe_str():"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_ae94a3e2","line":58,"updated":"2015-03-05 19:30:30.000000000","message":"Does the resulting string need to be decodable? The -2 here is wrong in the general case. Maybe you really want .rstrip(\u0027\u003d\u0027)?","commit_id":"d344f0c3fbef1e2dcd22105a3f70e49a5bed9056"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7c80a17020144299b4d0de15d47611b356849058","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def base64_encode(str_to_encode):"},{"line_number":57,"context_line":"    \"\"\"Encode a URL-safe string.\"\"\""},{"line_number":58,"context_line":"    return base64.urlsafe_b64encode(str_to_encode)[:-2]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def random_urlsafe_str():"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_f1275cb4","line":58,"in_reply_to":"9a80dd14_ae94a3e2","updated":"2015-03-05 19:34:02.000000000","message":"Done","commit_id":"d344f0c3fbef1e2dcd22105a3f70e49a5bed9056"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def random_urlsafe_str():"},{"line_number":62,"context_line":"    \"\"\"Generate a random URL-safe string.\"\"\""},{"line_number":63,"context_line":"    # chop the padding (\u003d\u003d) off the end of the encoding to save space"},{"line_number":64,"context_line":"    return base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def random_urlsafe_str_to_bytes(s):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_e32789b4","line":64,"updated":"2015-03-05 23:17:56.000000000","message":"is this supposed to call base64_encode?","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"def random_urlsafe_str():"},{"line_number":62,"context_line":"    \"\"\"Generate a random URL-safe string.\"\"\""},{"line_number":63,"context_line":"    # chop the padding (\u003d\u003d) off the end of the encoding to save space"},{"line_number":64,"context_line":"    return base64.urlsafe_b64encode(uuid.uuid4().bytes)[:-2]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"def random_urlsafe_str_to_bytes(s):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_9d8e0178","line":64,"in_reply_to":"9a80dd14_e32789b4","updated":"2015-03-06 17:08:47.000000000","message":"Yep, it says in the doc string that it\u0027s suppose to generate a URL-safe string.","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8dc26aa1b9e8e8d58932f456b52b7c0dc348213c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"def random_urlsafe_str_to_bytes(s):"},{"line_number":68,"context_line":"    \"\"\"Convert a string generated by ``random_urlsafe_str()`` to bytes.\"\"\""},{"line_number":69,"context_line":"    # restore the padding (\u003d\u003d) at the end of the string"},{"line_number":70,"context_line":"    return base64.urlsafe_b64decode(s + \u0027\u003d\u003d\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def default_expire_time():"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a80dd14_bcb922cd","line":70,"updated":"2015-03-12 17:19:32.000000000","message":"Is this correct? I know it\u0027s not a part of the patch, but since we don\u0027t actually know the length of the string how do we know how much padding would have been used?","commit_id":"da163c6a59f965eb4e2b62cb2b94d217c14126e0"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b4013d98e0da323db6ff3c0fc3697c14d8c0704e","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            issued_at_ts \u003d unpacked_token[1]"},{"line_number":193,"context_line":"            expires_at_ts \u003d unpacked_token[2]"},{"line_number":194,"context_line":"            audit_ids \u003d unpacked_token[3]"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # Uncompress the IDs"},{"line_number":197,"context_line":"        user_id \u003d self._convert_uuid_bytes_to_hex(b_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_c31310ff","line":194,"updated":"2015-03-03 21:49:04.000000000","message":"so audit_ids is bytes here now","commit_id":"e0465458aca808ce3e0fbc2049f2e5892aa23433"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1ba2aeea36aacd53f24af5cd8a0c6d42b2b511f","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        else:"},{"line_number":192,"context_line":"            issued_at_ts \u003d unpacked_token[1]"},{"line_number":193,"context_line":"            expires_at_ts \u003d unpacked_token[2]"},{"line_number":194,"context_line":"            audit_ids \u003d unpacked_token[3]"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"        # Uncompress the IDs"},{"line_number":197,"context_line":"        user_id \u003d self._convert_uuid_bytes_to_hex(b_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_66dd12e0","line":194,"in_reply_to":"ba7be1f8_c31310ff","updated":"2015-03-03 22:18:36.000000000","message":"Done","commit_id":"e0465458aca808ce3e0fbc2049f2e5892aa23433"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"b4013d98e0da323db6ff3c0fc3697c14d8c0704e","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        b_trust_id \u003d unpacked_token[2]"},{"line_number":266,"context_line":"        issued_at_ts \u003d unpacked_token[3]"},{"line_number":267,"context_line":"        expires_at_ts \u003d unpacked_token[4]"},{"line_number":268,"context_line":"        audit_ids \u003d unpacked_token[5]"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # Uncompress the IDs"},{"line_number":271,"context_line":"        user_id \u003d self._convert_uuid_bytes_to_hex(b_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_03d9a856","line":268,"updated":"2015-03-03 21:49:04.000000000","message":"same","commit_id":"e0465458aca808ce3e0fbc2049f2e5892aa23433"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c1ba2aeea36aacd53f24af5cd8a0c6d42b2b511f","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        b_trust_id \u003d unpacked_token[2]"},{"line_number":266,"context_line":"        issued_at_ts \u003d unpacked_token[3]"},{"line_number":267,"context_line":"        expires_at_ts \u003d unpacked_token[4]"},{"line_number":268,"context_line":"        audit_ids \u003d unpacked_token[5]"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"        # Uncompress the IDs"},{"line_number":271,"context_line":"        user_id \u003d self._convert_uuid_bytes_to_hex(b_user_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_86d846f0","line":268,"in_reply_to":"ba7be1f8_03d9a856","updated":"2015-03-03 22:18:36.000000000","message":"Done","commit_id":"e0465458aca808ce3e0fbc2049f2e5892aa23433"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        audit_ids_in_bytes \u003d []"},{"line_number":127,"context_line":"        for audit_id in audit_ids:"},{"line_number":128,"context_line":"            a_id \u003d provider.random_urlsafe_str_to_bytes(audit_id)"},{"line_number":129,"context_line":"            audit_ids_in_bytes.append(a_id)"},{"line_number":130,"context_line":"        return (issued_at_int, expires_at_int, audit_ids_in_bytes)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def pack(self, payload):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_e375c998","line":129,"updated":"2015-03-05 23:17:56.000000000","message":"126-129 is essentially:\n\n audit_ids_in_bytes \u003d map(provider.random_urlsafe_str_to_bytes, audit_ids)\n\nalso, would be easier to at line 125\n\n audit_ids \u003d map(provider.random_urlsafe_str_to_bytes, audit_ids)","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        audit_ids_in_bytes \u003d []"},{"line_number":127,"context_line":"        for audit_id in audit_ids:"},{"line_number":128,"context_line":"            a_id \u003d provider.random_urlsafe_str_to_bytes(audit_id)"},{"line_number":129,"context_line":"            audit_ids_in_bytes.append(a_id)"},{"line_number":130,"context_line":"        return (issued_at_int, expires_at_int, audit_ids_in_bytes)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def pack(self, payload):"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_1825bf5b","line":129,"in_reply_to":"9a80dd14_e375c998","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        audit_id_strs \u003d []"},{"line_number":209,"context_line":"        for audit_id in audit_ids:"},{"line_number":210,"context_line":"            a_id \u003d provider.base64_encode(audit_id)"},{"line_number":211,"context_line":"            audit_id_strs.append(a_id)"},{"line_number":212,"context_line":"        # Generate created at and expires at times"},{"line_number":213,"context_line":"        issued_at_str \u003d self._convert_int_to_time_string(issued_at_ts)"},{"line_number":214,"context_line":"        expires_at_str \u003d self._convert_int_to_time_string(expires_at_ts)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_63de396f","line":211,"updated":"2015-03-05 23:17:56.000000000","message":"use map()","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        audit_id_strs \u003d []"},{"line_number":209,"context_line":"        for audit_id in audit_ids:"},{"line_number":210,"context_line":"            a_id \u003d provider.base64_encode(audit_id)"},{"line_number":211,"context_line":"            audit_id_strs.append(a_id)"},{"line_number":212,"context_line":"        # Generate created at and expires at times"},{"line_number":213,"context_line":"        issued_at_str \u003d self._convert_int_to_time_string(issued_at_ts)"},{"line_number":214,"context_line":"        expires_at_str \u003d self._convert_int_to_time_string(expires_at_ts)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_f8c1cb54","line":211,"in_reply_to":"9a80dd14_63de396f","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b42d8dcf5bac4ae1e6b0ebd84f1cd08bef4189d2","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        audit_id_strs \u003d []"},{"line_number":275,"context_line":"        for audit_id in audit_ids:"},{"line_number":276,"context_line":"            a_id \u003d provider.base64_encode(audit_id)"},{"line_number":277,"context_line":"            audit_id_strs.append(a_id)"},{"line_number":278,"context_line":"        # Validate that the trust exists"},{"line_number":279,"context_line":"        trust_ref \u003d self.trust_api.get_trust(trust_id)"},{"line_number":280,"context_line":"        # Generate created at and expires at times"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_83d96d85","line":277,"updated":"2015-03-05 23:17:56.000000000","message":"use map()","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"b452fa08466edb84d1a9ca1197d817cc8170c81d","unresolved":false,"context_lines":[{"line_number":274,"context_line":"        audit_id_strs \u003d []"},{"line_number":275,"context_line":"        for audit_id in audit_ids:"},{"line_number":276,"context_line":"            a_id \u003d provider.base64_encode(audit_id)"},{"line_number":277,"context_line":"            audit_id_strs.append(a_id)"},{"line_number":278,"context_line":"        # Validate that the trust exists"},{"line_number":279,"context_line":"        trust_ref \u003d self.trust_api.get_trust(trust_id)"},{"line_number":280,"context_line":"        # Generate created at and expires at times"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_d8bc07df","line":277,"in_reply_to":"9a80dd14_83d96d85","updated":"2015-03-06 17:08:47.000000000","message":"Done","commit_id":"8405516294858e65a8596fec635cc60c56001133"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"8dc26aa1b9e8e8d58932f456b52b7c0dc348213c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        b_user_id \u003d cls.convert_uuid_hex_to_bytes(user_id)"},{"line_number":157,"context_line":"        expires_at_int \u003d cls._convert_time_string_to_int(expires_at)"},{"line_number":158,"context_line":"        b_audit_ids \u003d map(provider.random_urlsafe_str_to_bytes, audit_ids)"},{"line_number":159,"context_line":"        return (b_user_id, expires_at_int, b_audit_ids)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a80dd14_da5a5682","line":158,"updated":"2015-03-12 17:19:32.000000000","message":"In Python3 map returns a instance or map (but it is iterable). Does that work when passed into msgpack?","commit_id":"da163c6a59f965eb4e2b62cb2b94d217c14126e0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"ad7f0e347ca53d0f37f1c0575228d0959e10eb1c","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        b_user_id \u003d cls.convert_uuid_hex_to_bytes(user_id)"},{"line_number":157,"context_line":"        expires_at_int \u003d cls._convert_time_string_to_int(expires_at)"},{"line_number":158,"context_line":"        b_audit_ids \u003d map(provider.random_urlsafe_str_to_bytes, audit_ids)"},{"line_number":159,"context_line":"        return (b_user_id, expires_at_int, b_audit_ids)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a80dd14_2021804d","line":158,"in_reply_to":"9a80dd14_6048d85c","updated":"2015-03-12 19:33:20.000000000","message":"This is the result of the above fix but on python 2.7\n\nhttp://cdn.pasteraw.com/hcdqfyykxegsdshnk45146p059mkboc","commit_id":"da163c6a59f965eb4e2b62cb2b94d217c14126e0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"24bf3bf92a87133ca73a14f618e611d9325f9c5b","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        \"\"\""},{"line_number":156,"context_line":"        b_user_id \u003d cls.convert_uuid_hex_to_bytes(user_id)"},{"line_number":157,"context_line":"        expires_at_int \u003d cls._convert_time_string_to_int(expires_at)"},{"line_number":158,"context_line":"        b_audit_ids \u003d map(provider.random_urlsafe_str_to_bytes, audit_ids)"},{"line_number":159,"context_line":"        return (b_user_id, expires_at_int, b_audit_ids)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a80dd14_6048d85c","line":158,"in_reply_to":"9a80dd14_da5a5682","updated":"2015-03-12 19:32:16.000000000","message":"Yeah, this blows up in python 3.3.3 because the object passed back is of type map and msgpack doesn\u0027t know how to deal with that. \n\nhttp://cdn.pasteraw.com/gp45itmhposwmqljqdi75gysc72rv74\n\nWe could protect against this by doing \n\n    b_audit_ids \u003d list(map(provider.random_urlsafe_str_to_bytes, audit_ids))\n\nwhich would ensure that a list is always returned, regardless of py 2x and py3, before passing to msgpack.","commit_id":"da163c6a59f965eb4e2b62cb2b94d217c14126e0"}]}
