)]}'
{"keystone/common/policies/user.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b2b9064491e7d9b1c2bb74e3ea8184de2455d9a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_user\u0027,"},{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":21,"context_line":"        description\u003d\u0027Show user details\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":23,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":3,"id":"ffe62b97_5a5b2053","line":21,"updated":"2017-03-27 18:37:20.000000000","message":"nit: Show details about a specific user.","commit_id":"b1c663992589a567bc9e4cf211164e02d9798407"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"5b2b9064491e7d9b1c2bb74e3ea8184de2455d9a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":33,"context_line":"        description\u003d\u0027List projects for user\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/OS-FEDERATION/projects\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":36,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":37,"context_line":"        name\u003dbase.IDENTITY % \u0027list_domains_for_user\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffe62b97_553771e4","line":34,"updated":"2017-03-27 18:37:20.000000000","message":"FWIW - these are deprecated API in favor of /v3/auth/projects and v3/auth/domains. While I think we should still document them in generated policy files, I wonder if we should advertise they are deprecated in generated policy files, too?","commit_id":"b1c663992589a567bc9e4cf211164e02d9798407"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a79024da0c050974af9ee039cb6b9bf98ba63d24","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_users\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":27,"context_line":"        description\u003d\u0027List users\u0027,"},{"line_number":28,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users\u0027,"},{"line_number":29,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":30,"context_line":"      policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_12721c4a","line":27,"updated":"2017-03-27 19:43:46.000000000","message":"Add punctuation to be consistent with the rest of the descriptions in this module.","commit_id":"c6776056af3acc7d95c37faf66e45794d7b8dc0c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a79024da0c050974af9ee039cb6b9bf98ba63d24","unresolved":false,"context_lines":[{"line_number":30,"context_line":"      policy.DocumentedRuleDefault("},{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":33,"context_line":"        description\u003d\u0027List projects for user.\u0027,"},{"line_number":34,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027 /v3/auth/projects\u0027,"},{"line_number":35,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":36,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_72a4c8a6","line":33,"updated":"2017-03-27 19:43:46.000000000","message":"nit: List all projects a user has access to via a role assignment.","commit_id":"c6776056af3acc7d95c37faf66e45794d7b8dc0c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"a79024da0c050974af9ee039cb6b9bf98ba63d24","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":37,"context_line":"        name\u003dbase.IDENTITY % \u0027list_domains_for_user\u0027,"},{"line_number":38,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":39,"context_line":"        description\u003d\u0027List domains for user.\u0027,"},{"line_number":40,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/auth/domains\u0027,"},{"line_number":41,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":42,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":6,"id":"ffe62b97_32aac070","line":39,"updated":"2017-03-27 19:43:46.000000000","message":"nit: List all domains a user has access to via a role assignment.","commit_id":"c6776056af3acc7d95c37faf66e45794d7b8dc0c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1b66072282ec8aab77f1b447e140db037adc7906","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_user\u0027,"},{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":21,"context_line":"        description\u003d\u0027Show details about a specific user.\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":23,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"dfeb2761_04c5b88e","line":21,"range":{"start_line":21,"start_character":21,"end_line":21,"end_character":55},"updated":"2017-03-30 17:33:19.000000000","message":"why not just \"Show user details\" to be in consistent with all other entities (as you\u0027ve been doing in other patches)","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1b66072282ec8aab77f1b447e140db037adc7906","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":33,"context_line":"        description\u003d(\u0027List all projects a user has access to via a role \u0027"},{"line_number":34,"context_line":"                     \u0027assignment.\u0027),"},{"line_number":35,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027 /v3/auth/projects\u0027,"},{"line_number":36,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":37,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"dfeb2761_a4696c8c","line":34,"range":{"start_line":33,"start_character":65,"end_line":34,"end_character":32},"updated":"2017-03-30 17:33:19.000000000","message":"I\u0027d say \"via role assignments\" as there can be multiple on the same project/domain","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d99c94767d0e50590a459d911c02f080a720bff8","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":33,"context_line":"        description\u003d(\u0027List all projects a user has access to via a role \u0027"},{"line_number":34,"context_line":"                     \u0027assignment.\u0027),"},{"line_number":35,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027 /v3/auth/projects\u0027,"},{"line_number":36,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":37,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"bff0334d_793e562a","line":34,"in_reply_to":"dfeb2761_a4696c8c","updated":"2017-04-05 22:18:13.000000000","message":"This doesn\u0027t list projects for \"a user\", this returns the list of projects accessible to the token in context. In other words, \"what projects can I generate a scoped token for?\" I\u0027m not sure how that should be worded as a doc, though.","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"1b66072282ec8aab77f1b447e140db037adc7906","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":38,"context_line":"        name\u003dbase.IDENTITY % \u0027list_domains_for_user\u0027,"},{"line_number":39,"context_line":"        check_str\u003d\u0027\u0027,"},{"line_number":40,"context_line":"        description\u003d(\u0027List all domains a user has access to via a role \u0027"},{"line_number":41,"context_line":"                     \u0027assignment.\u0027),"},{"line_number":42,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/auth/domains\u0027,"},{"line_number":43,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"dfeb2761_640924dc","line":41,"range":{"start_line":40,"start_character":66,"end_line":41,"end_character":33},"updated":"2017-03-30 17:33:19.000000000","message":"ditto","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d99c94767d0e50590a459d911c02f080a720bff8","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dbase.IDENTITY % \u0027create_user\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":47,"context_line":"        description\u003d\u0027Create user.\u0027,"},{"line_number":48,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users\u0027,"},{"line_number":49,"context_line":"                     \u0027method\u0027: \u0027POST\u0027}]),"},{"line_number":50,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"bff0334d_9960fa34","line":47,"updated":"2017-04-05 22:18:13.000000000","message":"Create *a* user, and so on for the other description strings below.","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d99c94767d0e50590a459d911c02f080a720bff8","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":51,"context_line":"        name\u003dbase.IDENTITY % \u0027update_user\u0027,"},{"line_number":52,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":53,"context_line":"        description\u003d\u0027Update user.\u0027,"},{"line_number":54,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":55,"context_line":"                     \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":56,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":8,"id":"bff0334d_b9e97e81","line":53,"updated":"2017-04-05 22:18:13.000000000","message":"\"Update a user, including administrative password resets.\"","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"d99c94767d0e50590a459d911c02f080a720bff8","unresolved":false,"context_lines":[{"line_number":62,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":63,"context_line":"        name\u003dbase.IDENTITY % \u0027change_password\u0027,"},{"line_number":64,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":65,"context_line":"        description\u003d\u0027Change password for user.\u0027,"},{"line_number":66,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}/password\u0027,"},{"line_number":67,"context_line":"                     \u0027method\u0027: \u0027POST\u0027}])"},{"line_number":68,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":8,"id":"bff0334d_79dad6e9","line":65,"updated":"2017-04-05 22:18:13.000000000","message":"This is not quite accurate, and potentially breaking if it\u0027s interpreted as \"change password for any user.\" It\u0027s intended for a self-service password change, and requires a secondary password challenge. How about:\n\n  \"Self-service password change.\"","commit_id":"c148dd31052567be3f6d31650727684208059430"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"86efeefafa9e2c79cf6bc56a827e0369bc3d1601","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":19,"context_line":"        name\u003dbase.IDENTITY % \u0027get_user\u0027,"},{"line_number":20,"context_line":"        check_str\u003dbase.RULE_ADMIN_OR_OWNER,"},{"line_number":21,"context_line":"        description\u003d\u0027Show user details.\u0027,"},{"line_number":22,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":23,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":24,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":25,"context_line":"        name\u003dbase.IDENTITY % \u0027list_users\u0027,"},{"line_number":26,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":27,"context_line":"        description\u003d\u0027List users.\u0027,"},{"line_number":28,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users\u0027,"},{"line_number":29,"context_line":"                     \u0027method\u0027: \u0027GET\u0027}]),"},{"line_number":30,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":31,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_for_user\u0027,"},{"line_number":32,"context_line":"        check_str\u003d\u0027\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"bff0334d_e0569e2a","line":29,"range":{"start_line":21,"start_character":0,"end_line":29,"end_character":40},"updated":"2017-04-10 18:36:41.000000000","message":"both should have HEAD, as the default router is used\n\nhttps://github.com/openstack/keystone/blob/master/keystone/identity/routers.py#L36-L39\n\nhttps://github.com/openstack/keystone/blob/master/keystone/common/router.py#L43-L52","commit_id":"e7220edf149f7231b20089615e910268e24ff018"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"2292c381c69b32db9efa930f6173ac5fa8393899","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":55,"context_line":"        name\u003dbase.IDENTITY % \u0027update_user\u0027,"},{"line_number":56,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":57,"context_line":"        description\u003d\u0027Update a user.\u0027,"},{"line_number":58,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":59,"context_line":"                     \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":60,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_c9317b5c","line":57,"updated":"2017-04-20 20:29:09.000000000","message":"Dolph had an additional comment here on patch set 8.","commit_id":"da9bab9a8dcd2c311a366fc3f94fa472a681da25"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"abca35ee708a457a3ba315f0804fa8c26e6f8a27","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":55,"context_line":"        name\u003dbase.IDENTITY % \u0027update_user\u0027,"},{"line_number":56,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED,"},{"line_number":57,"context_line":"        description\u003d\u0027Update a user.\u0027,"},{"line_number":58,"context_line":"        operations\u003d[{\u0027path\u0027: \u0027/v3/users/{user_id}\u0027,"},{"line_number":59,"context_line":"                     \u0027method\u0027: \u0027PATCH\u0027}]),"},{"line_number":60,"context_line":"    policy.DocumentedRuleDefault("}],"source_content_type":"text/x-python","patch_set":12,"id":"7ffa3b31_291fbfb7","line":57,"in_reply_to":"7ffa3b31_c9317b5c","updated":"2017-04-20 20:31:26.000000000","message":"Done","commit_id":"da9bab9a8dcd2c311a366fc3f94fa472a681da25"}]}
