)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7be622b00c01cc55f86fa09e73e2e534ae959ba7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Richard Avelar \u003ccsravelar@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-19 09:12:17 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Policy in Code (part 4)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit does the following:"},{"line_number":10,"context_line":"    - Moves default access_token policies into code"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da36d5c6_675fe572","line":7,"updated":"2017-02-20 16:48:22.000000000","message":"nit: code \n\nonly to be consistent with the rest of the patches.","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7be622b00c01cc55f86fa09e73e2e534ae959ba7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    - Moves default consumer policies into code"},{"line_number":12,"context_line":"    - Moves default group_endpoint policies into code"},{"line_number":13,"context_line":"    - Moves default identity_provider policies into code"},{"line_number":14,"context_line":"    - Moves default project_endpointpolicies into code"},{"line_number":15,"context_line":"    - Moves default trust policies into code"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"partially-implements blueprint policy-in-code"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"da36d5c6_07c70913","line":14,"updated":"2017-02-20 16:48:22.000000000","message":"Add a space between project_endpoint and policies.","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7cf53f8896b9e9ce2bd0f6329b4c370595ccbd4d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    - Moves default project_endpoint policies into code"},{"line_number":15,"context_line":"    - Moves default trust policies into code"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Partially-Implements: https://blueprints.launchpad.net/keystone/+spec/policy-in-code"},{"line_number":18,"context_line":"Change-Id: I9e93d171b3580614a94cc32ce020e3111e5041c8"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"ba2be162_7d1daa72","line":17,"updated":"2017-03-01 15:00:42.000000000","message":"Same comment here as some of the previous patches in the chain. This should be:\n\n  bp policy-in-code\n\nor \n\n  blueprint policy-in-code","commit_id":"aeac84a5a7b42cf555cdd45db47584418e583aa0"}],"etc/policy.json":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"96c09518d831cd841fd6c8da4b2927ffa0c63641","unresolved":false,"context_lines":[{"line_number":3,"context_line":"    \"identity:list_trusts\": \"\","},{"line_number":4,"context_line":"    \"identity:list_roles_for_trust\": \"\","},{"line_number":5,"context_line":"    \"identity:get_role_for_trust\": \"\","},{"line_number":6,"context_line":"    \"identity:delete_trust\": \"\","},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"    \"identity:create_consumer\": \"rule:admin_required\","},{"line_number":9,"context_line":"    \"identity:get_consumer\": \"rule:admin_required\","}],"source_content_type":"application/json","patch_set":17,"id":"1a1ced50_9777d407","side":"PARENT","line":6,"updated":"2017-03-23 16:33:33.000000000","message":"These should be protected somehow, but I have a feeling these policies are coded into the trust API itself :-/","commit_id":"b53640f5ccfc6d55f121a69fc230fb2a3ea96aba"}],"keystone/common/policies/__init__.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"6a24cfa1b71db1bbb9ed36f0bad50ec92151ec6d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystone.common.policies import endpoint"},{"line_number":22,"context_line":"from keystone.common.policies import grant"},{"line_number":23,"context_line":"from keystone.common.policies import group"},{"line_number":24,"context_line":"from keystone.common.policies import group_endpoint"},{"line_number":25,"context_line":"from keystone.common.policies import identity_provider"},{"line_number":26,"context_line":"from keystone.common.policies import implied_role"},{"line_number":27,"context_line":"from keystone.common.policies import policy"}],"source_content_type":"text/x-python","patch_set":9,"id":"3a1ff146_104c936f","line":24,"updated":"2017-03-15 17:03:42.000000000","message":"nit: endpoint_group seems to fit the overall name of the API better, since we refer to these groupings as Endpoint Groups.\n\nhttps://developer.openstack.org/api-ref/identity/v3-ext/index.html#os-ep-filter-api","commit_id":"8fbf7f90cfa722a400ac6e9be749823703937798"}],"keystone/common/policies/access_token.py":[{"author":{"_account_id":20466,"name":"Tin Lam","email":"tin@lam.wtf","username":"tinlam"},"change_message_id":"b097289ce1169239a67d9d6c6e51a2f0bcb531a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"da36d5c6_e3fb2045","updated":"2017-02-24 18:39:28.000000000","message":"Since these policies along with the consumers policy all tie to */OS-OAUTH1/* APIs should they be gathered into 1 policy group named ``oauth1_policies``?","commit_id":"410d2d93f87dcf42321e6a70778eb5ac69a35719"}],"keystone/policies/group_endpoint.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7be622b00c01cc55f86fa09e73e2e534ae959ba7","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_associated_with_endpoint_group\u0027,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":31,"context_line":"    policy.RuleDefault("},{"line_number":32,"context_line":"        name\u003dbase.IDENTITY % \u0027list_endpoints_associated_with_endpoint_group\u0027,"},{"line_number":33,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_a7747dcf","line":30,"updated":"2017-02-20 16:48:22.000000000","message":"++ I actually really like this indentation convention. I find that it looks clean and consistent in a lot of cases. I\u0027d be OK making all of these that way.\n\n  policy.RuleDefault(\n      name\u003dbase.IDENTITY % \u0027list_projects_associated_with_endpoint_group\u0027,\n      check_str\u003dbase.RULE_ADMIN_REQUIRED\n  ),\n\nIt looks good in cases where you have long strings (like this one), but it also looks good when you don\u0027t.\n\n  policy.RuleDefault(\n      name\u003dbase.IDENTITY % \u0027create_endpoint_group\u0027,\n      check_str\u003dbase.RULE_ADMIN_REQUIRED\n  ),","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f2d9a627c89afc07bdab7ee275aeb0a612a0a47b","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_associated_with_endpoint_group\u0027,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":31,"context_line":"    policy.RuleDefault("},{"line_number":32,"context_line":"        name\u003dbase.IDENTITY % \u0027list_endpoints_associated_with_endpoint_group\u0027,"},{"line_number":33,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_5cb70f39","line":30,"in_reply_to":"da36d5c6_9d134a5c","updated":"2017-02-20 20:58:33.000000000","message":"So I\u0027ve been told :)\n\nThanks for sticking with the reviews, this is great!","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"8c1019bb33314a83dc6ea2d90fc4b83b54ed3a77","unresolved":false,"context_lines":[{"line_number":27,"context_line":"                       check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":28,"context_line":"    policy.RuleDefault("},{"line_number":29,"context_line":"        name\u003dbase.IDENTITY % \u0027list_projects_associated_with_endpoint_group\u0027,"},{"line_number":30,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"},{"line_number":31,"context_line":"    policy.RuleDefault("},{"line_number":32,"context_line":"        name\u003dbase.IDENTITY % \u0027list_endpoints_associated_with_endpoint_group\u0027,"},{"line_number":33,"context_line":"        check_str\u003dbase.RULE_ADMIN_REQUIRED),"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_9d134a5c","line":30,"in_reply_to":"da36d5c6_a7747dcf","updated":"2017-02-20 17:52:51.000000000","message":"You\u0027re a lot of work, you know that lance? ;)","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"}],"keystone/policies/trust.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"7be622b00c01cc55f86fa09e73e2e534ae959ba7","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027create_trust\u0027,"},{"line_number":19,"context_line":"                       check_str\u003d\u0027user_id:%(trust.trustor_user_id)s\u0027),"},{"line_number":20,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027list_trusts\u0027,"},{"line_number":21,"context_line":"                       check_str\u003d\"\"),"},{"line_number":22,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027list_roles_for_trust\u0027,"},{"line_number":23,"context_line":"                       check_str\u003d\"\"),"},{"line_number":24,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027get_role_for_trust\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_a709dd33","line":21,"updated":"2017-02-20 16:48:22.000000000","message":"nit: single quotes to be consistent with the rest of the strings in the module?","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"},{"author":{"_account_id":18464,"name":"Richard Avelar","email":"csravelar@gmail.com","username":"razone"},"change_message_id":"8c1019bb33314a83dc6ea2d90fc4b83b54ed3a77","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027create_trust\u0027,"},{"line_number":19,"context_line":"                       check_str\u003d\u0027user_id:%(trust.trustor_user_id)s\u0027),"},{"line_number":20,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027list_trusts\u0027,"},{"line_number":21,"context_line":"                       check_str\u003d\"\"),"},{"line_number":22,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027list_roles_for_trust\u0027,"},{"line_number":23,"context_line":"                       check_str\u003d\"\"),"},{"line_number":24,"context_line":"    policy.RuleDefault(name\u003dbase.IDENTITY % \u0027get_role_for_trust\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da36d5c6_3d2b3e84","line":21,"in_reply_to":"da36d5c6_a709dd33","updated":"2017-02-20 17:52:51.000000000","message":"Done","commit_id":"3f53f24afe865d72d4487be9ec98d1eefc0253c0"}]}
