)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"8012aa42fe1dfd64d3940716f1e3aef292728527","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Fernet token formatter with explicit role"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Fernet tokens only include the user ID and the project ID the user has scoped"},{"line_number":10,"context_line":"to on when dealing with project-scoped tokens. This change makes it so that if"},{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I4dcbd3663190eafb399351f8ceef8a219db453ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3aaa91ec_213f91d7","line":12,"range":{"start_line":10,"start_character":47,"end_line":12,"end_character":31},"updated":"2016-06-22 17:30:23.000000000","message":"What does this buy us? Is this saving clients a request to keystone API ?","commit_id":"456aa8d442e33b175ae59d1e6bbf371735f2fa75"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"604ac1746540addf1827a3d231ffe76e9fa3a004","unresolved":false,"context_lines":[{"line_number":10,"context_line":"to on when dealing with project-scoped tokens. This change makes it so that if"},{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I4dcbd3663190eafb399351f8ceef8a219db453ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"dab17558_f9702f0d","line":13,"updated":"2016-05-11 03:57:19.000000000","message":"From the discussions at the summit, I thought this was related to a spec?","commit_id":"456aa8d442e33b175ae59d1e6bbf371735f2fa75"},{"author":{"_account_id":17645,"name":"Shan Guo","email":"guoshan.jolie@gmail.com","username":"guoshan"},"change_message_id":"8d7265e1a51b33b2b03a1aa59ca651b6bc321124","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint subset-tokens"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4dcbd3663190eafb399351f8ceef8a219db453ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a71b18c_b737deae","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":23},"updated":"2016-12-12 06:14:36.000000000","message":"subset-tokens----\u003esubsets-tokens\n\ncorrectly link to the blueprint page","commit_id":"159baedb749c5c8e29147d258e6d099fb3ac4a7c"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"c5f30dcd8d8b472c087c6ba7748d25a6aee36c06","unresolved":false,"context_lines":[{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint subset-tokens"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I4dcbd3663190eafb399351f8ceef8a219db453ec"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a71b18c_7a38b8d3","line":14,"range":{"start_line":14,"start_character":0,"end_line":14,"end_character":23},"in_reply_to":"3a71b18c_b737deae","updated":"2017-12-04 21:13:33.000000000","message":"Done","commit_id":"159baedb749c5c8e29147d258e6d099fb3ac4a7c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"db1a89c485a168197fe0c08473df032e84e7cb3e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fernet tokens only include the user ID and the project ID the user has scoped"},{"line_number":10,"context_line":"to on when dealing with project-scoped tokens. This change makes it so that if"},{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint subsets-tokens"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"bff0334d_16e97ee4","line":12,"updated":"2017-04-12 14:35:39.000000000","message":"Okay, but what is the advantage of this ? Please describe in the commit message","commit_id":"ffdede636685e8b2577e2b1cea90a0f3abdd2d2f"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"c5f30dcd8d8b472c087c6ba7748d25a6aee36c06","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Fernet tokens only include the user ID and the project ID the user has scoped"},{"line_number":10,"context_line":"to on when dealing with project-scoped tokens. This change makes it so that if"},{"line_number":11,"context_line":"the user only has one role on the project, the role ID of that assignment is"},{"line_number":12,"context_line":"included in the fernet payload."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"blueprint subsets-tokens"},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"5ff73747_27efd11e","line":12,"in_reply_to":"bff0334d_16e97ee4","updated":"2017-12-04 21:13:33.000000000","message":"Look at the blueprint linked below.  This is a necessary step in order to let a user request a token with an explicit role.","commit_id":"ffdede636685e8b2577e2b1cea90a0f3abdd2d2f"}],"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"775adf909108bba5174af4f7249e1ac4a11b35a0","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        exp_methods \u003d exp_methods or [\u0027password\u0027]"},{"line_number":345,"context_line":"        exp_expires_at \u003d utils.isotime(timeutils.utcnow(), subsecond\u003dTrue)"},{"line_number":346,"context_line":"        exp_audit_ids \u003d [provider.random_urlsafe_str()]"},{"line_number":347,"context_line":"#        import rpdb; rpdb.set_trace()"},{"line_number":348,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":349,"context_line":"            exp_user_id, exp_methods, exp_project_id, exp_domain_id,"},{"line_number":350,"context_line":"            exp_expires_at, exp_audit_ids, exp_trust_id, exp_federated_info,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_78056b78","line":347,"updated":"2016-04-26 14:36:33.000000000","message":"We can remove this, too.","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d147040cdb9fecef97ee2b6918735b75a679e8b","unresolved":false,"context_lines":[{"line_number":344,"context_line":"        exp_methods \u003d exp_methods or [\u0027password\u0027]"},{"line_number":345,"context_line":"        exp_expires_at \u003d utils.isotime(timeutils.utcnow(), subsecond\u003dTrue)"},{"line_number":346,"context_line":"        exp_audit_ids \u003d [provider.random_urlsafe_str()]"},{"line_number":347,"context_line":"#        import rpdb; rpdb.set_trace()"},{"line_number":348,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":349,"context_line":"            exp_user_id, exp_methods, exp_project_id, exp_domain_id,"},{"line_number":350,"context_line":"            exp_expires_at, exp_audit_ids, exp_trust_id, exp_federated_info,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_184437b5","line":347,"in_reply_to":"1a122d0e_78056b78","updated":"2016-04-26 14:51:25.000000000","message":"Done","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"}],"keystone/token/providers/fernet/token_formatters.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"775adf909108bba5174af4f7249e1ac4a11b35a0","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        version \u003d payload_class.version"},{"line_number":158,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":159,"context_line":"            user_id, methods, project_id, domain_id, expires_at, audit_ids,"},{"line_number":160,"context_line":"            trust_id, federated_info, access_token_id, role_id)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        versioned_payload \u003d (version,) + payload"},{"line_number":163,"context_line":"        serialized_payload \u003d msgpack.packb(versioned_payload)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_d8a11f96","line":160,"updated":"2016-04-26 14:36:33.000000000","message":"nit: \n\n        trust_id, federated_info, access_token_id, role_id\n    )\n\nJust to keep the previous convention","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d147040cdb9fecef97ee2b6918735b75a679e8b","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        version \u003d payload_class.version"},{"line_number":158,"context_line":"        payload \u003d payload_class.assemble("},{"line_number":159,"context_line":"            user_id, methods, project_id, domain_id, expires_at, audit_ids,"},{"line_number":160,"context_line":"            trust_id, federated_info, access_token_id, role_id)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        versioned_payload \u003d (version,) + payload"},{"line_number":163,"context_line":"        serialized_payload \u003d msgpack.packb(versioned_payload)"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_f827bb0f","line":160,"in_reply_to":"1a122d0e_d8a11f96","updated":"2016-04-26 14:51:25.000000000","message":"Done","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"775adf909108bba5174af4f7249e1ac4a11b35a0","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class ProjectSingleRolePayload(BasePayload):"},{"line_number":456,"context_line":"    version \u003d 2"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    @classmethod"},{"line_number":459,"context_line":"    def create_arguments_apply(cls, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_b8e423e0","line":456,"updated":"2016-04-26 14:36:33.000000000","message":"We will need to change this to be a difference version than the ProjectScopedPayload","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"9d147040cdb9fecef97ee2b6918735b75a679e8b","unresolved":false,"context_lines":[{"line_number":453,"context_line":""},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"class ProjectSingleRolePayload(BasePayload):"},{"line_number":456,"context_line":"    version \u003d 2"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    @classmethod"},{"line_number":459,"context_line":"    def create_arguments_apply(cls, **kwargs):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_1b2f1189","line":456,"in_reply_to":"1a122d0e_b8e423e0","updated":"2016-04-26 14:51:25.000000000","message":"Done","commit_id":"fb9f121685c2528ab897c5934cb258b4ef2a720f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d0c230b4b7e5992ba187a4a51c7efb7996bfdd39","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def create_token(self, user_id, expires_at, audit_ids, methods\u003dNone,"},{"line_number":139,"context_line":"                     domain_id\u003dNone, project_id\u003dNone, trust_id\u003dNone,"},{"line_number":140,"context_line":"                     federated_info\u003dNone, access_token_id\u003dNone, role_id\u003dNone):"},{"line_number":141,"context_line":"        \"\"\"Given a set of payload attributes, generate a Fernet token.\"\"\""},{"line_number":142,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":143,"context_line":"            if payload_class.create_arguments_apply("}],"source_content_type":"text/x-python","patch_set":9,"id":"7f515b1d_839a3811","line":140,"range":{"start_line":140,"start_character":64,"end_line":140,"end_character":76},"updated":"2017-10-09 15:29:06.000000000","message":"This will need to be hooked into the token.provider.common package somehow to invoke this code. Otherwise the new payload class will never be used.","commit_id":"93939d42cf192b2cb85df870a2cba67467247d47"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"c5f30dcd8d8b472c087c6ba7748d25a6aee36c06","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    def create_token(self, user_id, expires_at, audit_ids, methods\u003dNone,"},{"line_number":139,"context_line":"                     domain_id\u003dNone, project_id\u003dNone, trust_id\u003dNone,"},{"line_number":140,"context_line":"                     federated_info\u003dNone, access_token_id\u003dNone, role_id\u003dNone):"},{"line_number":141,"context_line":"        \"\"\"Given a set of payload attributes, generate a Fernet token.\"\"\""},{"line_number":142,"context_line":"        for payload_class in PAYLOAD_CLASSES:"},{"line_number":143,"context_line":"            if payload_class.create_arguments_apply("}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_f2bf63a7","line":140,"range":{"start_line":140,"start_character":64,"end_line":140,"end_character":76},"in_reply_to":"7f515b1d_839a3811","updated":"2017-12-04 21:13:33.000000000","message":"Yep.  That will be a follow on change.","commit_id":"93939d42cf192b2cb85df870a2cba67467247d47"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d0c230b4b7e5992ba187a4a51c7efb7996bfdd39","unresolved":false,"context_lines":[{"line_number":698,"context_line":"                audit_ids, trust_id, federated_info, access_token_id, role_id)"},{"line_number":699,"context_line":""},{"line_number":700,"context_line":""},{"line_number":701,"context_line":"class ProjectSingleRolePayload(BasePayload):"},{"line_number":702,"context_line":"    version \u003d 8"},{"line_number":703,"context_line":""},{"line_number":704,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f515b1d_c3ddd0dd","line":701,"range":{"start_line":701,"start_character":6,"end_line":701,"end_character":30},"updated":"2017-10-09 15:29:06.000000000","message":"I\u0027d be nice to not need another token payload for this. If we can leverage the existing ProjectScopedPayload work, then we don\u0027t need a separate thing specifically for this.","commit_id":"93939d42cf192b2cb85df870a2cba67467247d47"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38df3aac74d084d92f682fe7f35c84c12e2f383e","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        try:"},{"line_number":413,"context_line":"            b_role_id \u003d cls.convert_uuid_hex_to_bytes(role_id)"},{"line_number":414,"context_line":"        except TypeError:"},{"line_number":415,"context_line":"            b_role_id \u003d None"},{"line_number":416,"context_line":"            # the role ID is not bytes, and thus None"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        return (b_user_id, methods, b_domain_id, expires_at_int, b_audit_ids,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df87a7cf_e111eb53","line":415,"range":{"start_line":415,"start_character":12,"end_line":415,"end_character":28},"updated":"2017-12-07 20:34:21.000000000","message":"wouldn\u0027t we want to default to packing the original value, even if it isn\u0027t bytes?","commit_id":"fbf586f4919babf950d9ec59686392f12e2cdc00"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"260a8896f6f363e60b209129344661e880507845","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        try:"},{"line_number":413,"context_line":"            b_role_id \u003d cls.convert_uuid_hex_to_bytes(role_id)"},{"line_number":414,"context_line":"        except TypeError:"},{"line_number":415,"context_line":"            b_role_id \u003d None"},{"line_number":416,"context_line":"            # the role ID is not bytes, and thus None"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        return (b_user_id, methods, b_domain_id, expires_at_int, b_audit_ids,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df87a7cf_dda82c21","line":415,"range":{"start_line":415,"start_character":12,"end_line":415,"end_character":28},"in_reply_to":"df87a7cf_e111eb53","updated":"2017-12-09 02:10:55.000000000","message":"would that even work with Fernet?  We\u0027re limited to space in the token, right?","commit_id":"fbf586f4919babf950d9ec59686392f12e2cdc00"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38df3aac74d084d92f682fe7f35c84c12e2f383e","unresolved":false,"context_lines":[{"line_number":439,"context_line":"        try:"},{"line_number":440,"context_line":"            role_id \u003d cls.convert_uuid_bytes_to_hex(payload[5])"},{"line_number":441,"context_line":"        except TypeError:"},{"line_number":442,"context_line":"            role_id \u003d None"},{"line_number":443,"context_line":"        project_id \u003d None"},{"line_number":444,"context_line":"        trust_id \u003d None"},{"line_number":445,"context_line":"        federated_info \u003d None"}],"source_content_type":"text/x-python","patch_set":11,"id":"df87a7cf_811a5f6c","line":442,"range":{"start_line":442,"start_character":12,"end_line":442,"end_character":26},"updated":"2017-12-07 20:34:21.000000000","message":"Same comment here.","commit_id":"fbf586f4919babf950d9ec59686392f12e2cdc00"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"38df3aac74d084d92f682fe7f35c84c12e2f383e","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        try:"},{"line_number":469,"context_line":"            b_role_id \u003d cls.convert_uuid_hex_to_bytes(role_id)"},{"line_number":470,"context_line":"        except TypeError:"},{"line_number":471,"context_line":"            b_role_id \u003d None"},{"line_number":472,"context_line":"            # the role ID is not bytes, and thus None"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return (b_user_id, methods, b_project_id, expires_at_int, b_audit_ids,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df87a7cf_212593ab","line":471,"range":{"start_line":471,"start_character":11,"end_line":471,"end_character":28},"updated":"2017-12-07 20:34:21.000000000","message":"Same comment here, what if the role_id is something not UUID formatted. This might seem unlikely, but until we started working with this type of logic, we\u0027ve had folks come out of the woodwork about conversions.","commit_id":"fbf586f4919babf950d9ec59686392f12e2cdc00"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"260a8896f6f363e60b209129344661e880507845","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        try:"},{"line_number":469,"context_line":"            b_role_id \u003d cls.convert_uuid_hex_to_bytes(role_id)"},{"line_number":470,"context_line":"        except TypeError:"},{"line_number":471,"context_line":"            b_role_id \u003d None"},{"line_number":472,"context_line":"            # the role ID is not bytes, and thus None"},{"line_number":473,"context_line":""},{"line_number":474,"context_line":"        return (b_user_id, methods, b_project_id, expires_at_int, b_audit_ids,"}],"source_content_type":"text/x-python","patch_set":11,"id":"df87a7cf_1db3f499","line":471,"range":{"start_line":471,"start_character":11,"end_line":471,"end_character":28},"in_reply_to":"df87a7cf_212593ab","updated":"2017-12-09 02:10:55.000000000","message":"If that is true of role_ids, then it is true of audit and domain ids as well. Role_ids are managed by Keystone and, until we have reason to delegate to somewhere else, I think we should be pretty stringent about keeping them as uuids; a free form ID here is not possible, as they are used in URLs, and thus must at least be URL safe.","commit_id":"fbf586f4919babf950d9ec59686392f12e2cdc00"}]}
