)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Adds a new configuration value:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"admin_project_id"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"If admin_project_id is set, and tokens requested for"},{"line_number":14,"context_line":"projects that match the admin_project_id will have an"},{"line_number":15,"context_line":"additional value in them;  `is_admin_project\u003dtrue`"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"1a26ad4f_3b6b12f3","line":12,"updated":"2015-11-01 23:44:58.000000000","message":"add the tag:\n\n  DocImpact\n\nso we know to make release notes about this","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"36955cdaa0566b1e6bf113196a60674aac12fa18","unresolved":false,"context_lines":[{"line_number":23,"context_line":"-- Should be helpful in making access control decisions"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Implements: blueprint is-admin-project"},{"line_number":26,"context_line":"Closes-Bug: #968696"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ic9cf9862739381a30130b4be87075f726736ff88"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba8a016a_517fcaaa","line":26,"updated":"2015-11-18 22:29:46.000000000","message":"I don\u0027t think this closes the bug on its own. We still need to actually change various places to make use of this new attribute of the token. E.g. only allow user creation when the token is scoped to the admin project, as mentioned in the bug description. That could be done under separate commits, but in that case this should be Partial-Bug.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"b9a328f21e22d8c72e863d6ef34ae83785960b4c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"-- Should be helpful in making access control decisions"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Implements: blueprint is-admin-project"},{"line_number":26,"context_line":"Closes-Bug: #968696"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ic9cf9862739381a30130b4be87075f726736ff88"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba8a016a_be1ee96d","line":26,"in_reply_to":"ba8a016a_517fcaaa","updated":"2015-11-19 11:56:53.000000000","message":"Yes, I agree we still need to update policies to make the fix complete.\n\nAdam is looking forward to have this line merged (me too!). :)","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":23,"context_line":"-- Should be helpful in making access control decisions"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Implements: blueprint is-admin-project"},{"line_number":26,"context_line":"Closes-Bug: #968696"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Change-Id: Ic9cf9862739381a30130b4be87075f726736ff88"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"ba8a016a_ee5c9f4c","line":26,"in_reply_to":"ba8a016a_be1ee96d","updated":"2015-11-19 21:46:10.000000000","message":"But the bug is that there is no way to fix the policies today.  Once this is fixed, we can do so.  This will only close the Keystone side of the bug.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"}],"keystone/common/config.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4f832fadb7630be40bdbd5712f488d6800605233","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                                                      group\u003d\u0027assignment\u0027)],"},{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.MultiStrOpt(\u0027admin_project_id\u0027, default\u003d[],"},{"line_number":384,"context_line":"                        help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":385,"context_line":"                        \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":386,"context_line":"                        \u0027this project will be contain the key/value \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_397bf9f6","line":383,"updated":"2015-11-02 21:27:13.000000000","message":"Didn\u0027t we also agreed to have an option to configure admin domain name and project name to enhanced deployability? i.e. don\u0027t have the create a project then reconfigure Keystone.","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                                                      group\u003d\u0027assignment\u0027)],"},{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.MultiStrOpt(\u0027admin_project_id\u0027, default\u003d[],"},{"line_number":384,"context_line":"                        help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":385,"context_line":"                        \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":386,"context_line":"                        \u0027this project will be contain the key/value \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_7bbe6a66","line":383,"updated":"2015-11-01 23:44:58.000000000","message":"Maybe we should also say that this value can be specified multiple times?\n\n\"Multiple `admin_project_id` values can be given by specifying the option multiple times. This can be performed to signal that X project can blah\"","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.MultiStrOpt(\u0027admin_project_id\u0027, default\u003d[],"},{"line_number":384,"context_line":"                        help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":385,"context_line":"                        \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":386,"context_line":"                        \u0027this project will be contain the key/value \u0027"},{"line_number":387,"context_line":"                        \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_1b8976c9","line":385,"updated":"2015-11-01 23:44:58.000000000","message":"nit: we\u0027ve been using the convention where the single quotes line up with each other\n\nalso two spaces after \"Tokens\"","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                        help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":385,"context_line":"                        \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":386,"context_line":"                        \u0027this project will be contain the key/value \u0027"},{"line_number":387,"context_line":"                        \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"    ],"},{"line_number":389,"context_line":"    \u0027domain_config\u0027: ["},{"line_number":390,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_fb8b5ac1","line":387,"updated":"2015-11-01 23:44:58.000000000","message":"they will have the key/value:\n\n  `is_admin_project`\n\n:)","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d98f3c81c0eb505328341bd126525798ad0910f1","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the Special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens  scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027be contain the key/value `admin_project_id\u003dtrue`.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_a7711c78","line":384,"updated":"2015-11-06 15:54:31.000000000","message":"why is \u0027Special\u0027 capitalized?","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"169073cab40ac155f402d81354546a375c14cb2f","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the Special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens  scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027be contain the key/value `admin_project_id\u003dtrue`.\u0027),"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_2d3e6d8c","line":384,"in_reply_to":"fa80f949_a7711c78","updated":"2015-11-06 16:29:38.000000000","message":"Because I studied German for two Semesters in College and it messed up mY abiLitY to propeRly capitalize.","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d98f3c81c0eb505328341bd126525798ad0910f1","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the Special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens  scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027be contain the key/value `admin_project_id\u003dtrue`.\u0027),"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_87973847","line":386,"updated":"2015-11-06 15:54:31.000000000","message":"remove 1 space after \u0027Tokens\u0027\n\nIt looks like the format throughout the doc is 1 space after periods.","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"169073cab40ac155f402d81354546a375c14cb2f","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the Special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens  scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027be contain the key/value `admin_project_id\u003dtrue`.\u0027),"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_0d7609a4","line":386,"in_reply_to":"fa80f949_87973847","updated":"2015-11-06 16:29:38.000000000","message":"Two spaces is correct.  Fixing it everywhere else in this file would be beyond the scope of this patch.  Feel free to submit a patch fixing it after this one merges.","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d98f3c81c0eb505328341bd126525798ad0910f1","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":390,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":391,"context_line":"                   \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":392,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":393,"context_line":"                   \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":394,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_67a81478","line":391,"updated":"2015-11-06 15:54:31.000000000","message":"ditto","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"169073cab40ac155f402d81354546a375c14cb2f","unresolved":false,"context_lines":[{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":390,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":391,"context_line":"                   \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":392,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":393,"context_line":"                   \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":394,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_2d7bcd8d","line":391,"in_reply_to":"fa80f949_67a81478","updated":"2015-11-06 16:29:38.000000000","message":"Ditto.","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"15023bd40f97c09a81b5234b1f17a9943e6f3420","unresolved":false,"context_lines":[{"line_number":390,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":391,"context_line":"                   \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":392,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":393,"context_line":"                   \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":394,"context_line":"    ],"},{"line_number":395,"context_line":"    \u0027domain_config\u0027: ["},{"line_number":396,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_27e44cdf","line":393,"updated":"2015-11-06 15:52:03.000000000","message":"this isn\u0027t in the token, it\u0027s \"is_admin_project\"","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"169073cab40ac155f402d81354546a375c14cb2f","unresolved":false,"context_lines":[{"line_number":390,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":391,"context_line":"                   \u0027operations on remote services.  Tokens  scoped to \u0027"},{"line_number":392,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":393,"context_line":"                   \u0027`admin_project_id\u003dtrue`.\u0027),"},{"line_number":394,"context_line":"    ],"},{"line_number":395,"context_line":"    \u0027domain_config\u0027: ["},{"line_number":396,"context_line":"        cfg.StrOpt(\u0027driver\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa80f949_cdc7a196","line":393,"in_reply_to":"fa80f949_27e44cdf","updated":"2015-11-06 16:29:38.000000000","message":"Sorry, missed that.","commit_id":"4f08560bb60f99e32cb017de481426e4831960a1"},{"author":{"_account_id":18835,"name":"Toshiya Shiga","email":"tos-shiga@yk.jp.nec.com","username":"tos-shiga"},"change_message_id":"2d66d3b18458abfe5d9a0fa04484b96e693f9dec","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":390,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":391,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_750885da","line":388,"updated":"2015-11-12 11:02:25.000000000","message":"remove this blank line to keep the format.","commit_id":"0956ba4be0a095b665a431291060bdfa03b8eac9"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"36955cdaa0566b1e6bf113196a60674aac12fa18","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                                                      group\u003d\u0027assignment\u0027)],"},{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_31cec62e","line":383,"updated":"2015-11-18 22:29:46.000000000","message":"is CONF.resource really the best section in which to put these? I\u0027m not seeing how these relate to the other things in this section. I thought they would go in DEFAULT.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                                                      group\u003d\u0027assignment\u0027)],"},{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_0e3a43e7","line":383,"in_reply_to":"ba8a016a_31cec62e","updated":"2015-11-19 21:46:10.000000000","message":"Projects fall under resource.  DEFAULT is for things global to the Keystone server.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"b9a328f21e22d8c72e863d6ef34ae83785960b4c","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_214f3c38","line":388,"updated":"2015-11-19 11:56:53.000000000","message":"I\u0027d prefer to have simply admin_project_domain and admin_project.\n\nThis way we would allow to specify only ID for admin_project, or name for both; this is aligned with what we o for auth.\n\nLet\u0027s allow specifying a name, but not restricting it to this ?","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_4e1b6b81","line":388,"in_reply_to":"ba8a016a_214f3c38","updated":"2015-11-19 21:46:10.000000000","message":"We cannot identify based on pattern.  That messed us up before, where we were assuming ids to be UUIDs, but that falls down, for example with LDAP assignments.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"36955cdaa0566b1e6bf113196a60674aac12fa18","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":392,"context_line":"                   \u0027`is_admin_project\u003dtrue`.\u0027),"},{"line_number":393,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_11062286","line":390,"updated":"2015-11-18 22:29:46.000000000","message":"Following up on a comment in an earlier patch set... 2 spaces after a sentence is only correct with typewriters. See http://www.writersdigest.com/online-editor/how-many-spaces-after-a-period","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":392,"context_line":"                   \u0027`is_admin_project\u003dtrue`.\u0027),"},{"line_number":393,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_2e14e74a","line":390,"in_reply_to":"ba8a016a_11062286","updated":"2015-11-19 21:46:10.000000000","message":"I wrote this on a typewriter.  And he lies.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"36955cdaa0566b1e6bf113196a60674aac12fa18","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":392,"context_line":"                   \u0027`is_admin_project\u003dtrue`.\u0027),"},{"line_number":393,"context_line":"    ],"},{"line_number":394,"context_line":"    \u0027domain_config\u0027: ["}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_11df020e","line":391,"updated":"2015-11-18 22:29:46.000000000","message":"s/ be//","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will be contain the key/value \u0027"},{"line_number":392,"context_line":"                   \u0027`is_admin_project\u003dtrue`.\u0027),"},{"line_number":393,"context_line":"    ],"},{"line_number":394,"context_line":"    \u0027domain_config\u0027: ["}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_ce0f5b35","line":391,"in_reply_to":"ba8a016a_11df020e","updated":"2015-11-19 21:46:10.000000000","message":"Done","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":380,"context_line":"                                                      group\u003d\u0027assignment\u0027)],"},{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_4d2b3eec","line":383,"updated":"2015-11-24 19:29:01.000000000","message":"remove default\u003dNone since that\u0027s the default anyways. (same for the other config option)","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":381,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":382,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ad466abd","line":384,"updated":"2015-11-24 19:29:01.000000000","message":"lowercase Domain","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ed231204","line":386,"updated":"2015-11-24 19:29:01.000000000","message":"single space after . (same for the other config option)","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":383,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027, default\u003dNone,"},{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_0a868113","line":386,"in_reply_to":"9a8ffd7b_ed231204","updated":"2015-12-01 02:49:12.000000000","message":"You are all heathens","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_6d1722a4","line":387,"updated":"2015-11-24 19:29:01.000000000","message":"The help should say what happens by default. (same for the other config option)","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":384,"context_line":"                   help\u003d\u0027Name of the Domain that contains the special \u0027"},{"line_number":385,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":386,"context_line":"                   \u0027remote services.  Tokens scoped to this project will \u0027"},{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_4abec9d5","line":387,"in_reply_to":"9a8ffd7b_6d1722a4","updated":"2015-12-01 02:49:12.000000000","message":"Done","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":18835,"name":"Toshiya Shiga","email":"tos-shiga@yk.jp.nec.com","username":"tos-shiga"},"change_message_id":"aa0b020c8751405f65f44bec20cd4547055f6e75","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`.\u0027),"},{"line_number":388,"context_line":"        cfg.StrOpt(\u0027admin_project_name\u0027, default\u003dNone,"},{"line_number":389,"context_line":"                   help\u003d\u0027Special project for performing administrative \u0027"},{"line_number":390,"context_line":"                   \u0027operations on remote services.  Tokens scoped to \u0027"},{"line_number":391,"context_line":"                   \u0027this project will contain the key/value \u0027"},{"line_number":392,"context_line":"                   \u0027`is_admin_project\u003dtrue`.\u0027),"},{"line_number":393,"context_line":"    ],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_71fe026d","line":390,"updated":"2015-11-25 06:29:20.000000000","message":"single space after period (same as L386)","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":388,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027,"},{"line_number":390,"context_line":"                   help\u003d\u0027Name of the domain that contains the special \u0027"},{"line_number":391,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":392,"context_line":"                   \u0027remote services. Tokens scoped to this project will \u0027"},{"line_number":393,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`. Defaults \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_22167df1","line":390,"updated":"2015-12-07 20:36:37.000000000","message":"this can be simplified:\n\n  Name of the domain that contains `admin_project_name`. Defaults to None.","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c458699a847c413c8689e4ce12a155df526cc84","unresolved":false,"context_lines":[{"line_number":387,"context_line":"                   help\u003d\u0027Maximum number of entities that will be returned \u0027"},{"line_number":388,"context_line":"                        \u0027in a resource collection.\u0027),"},{"line_number":389,"context_line":"        cfg.StrOpt(\u0027admin_project_domain_name\u0027,"},{"line_number":390,"context_line":"                   help\u003d\u0027Name of the domain that contains the special \u0027"},{"line_number":391,"context_line":"                   \u0027project for performing administrative operations on \u0027"},{"line_number":392,"context_line":"                   \u0027remote services. Tokens scoped to this project will \u0027"},{"line_number":393,"context_line":"                   \u0027contain the key/value `is_admin_project\u003dtrue`. Defaults \u0027"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e2115205","line":390,"in_reply_to":"7a740942_22167df1","updated":"2015-12-07 21:32:21.000000000","message":"Done","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"}],"keystone/tests/unit/test_v3.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":610,"context_line":"        require_catalog \u003d kwargs.pop(\u0027require_catalog\u0027, True)"},{"line_number":611,"context_line":"        endpoint_filter \u003d kwargs.pop(\u0027endpoint_filter\u0027, False)"},{"line_number":612,"context_line":"        ep_filter_assoc \u003d kwargs.pop(\u0027ep_filter_assoc\u0027, 0)"},{"line_number":613,"context_line":"        is_admin \u003d kwargs.pop(\u0027is_admin\u0027, False)"},{"line_number":614,"context_line":"        token \u003d self.assertValidTokenResponse(r, *args, **kwargs)"},{"line_number":615,"context_line":""},{"line_number":616,"context_line":"        if require_catalog:"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_fbb27a93","line":613,"updated":"2015-11-01 23:44:58.000000000","message":"there\u0027s no reason to shorten this, keep it `is_admin_project`, since i think we use `is_admin` to check if the token is the `admin_token` somewhere in the tests, reduce confusion \\o/","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if is_admin_project:"},{"line_number":642,"context_line":"            self.assertTrue(token[\u0027is_admin_project\u0027])"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ade2ea9d","line":642,"updated":"2015-11-24 19:29:01.000000000","message":"suggest use self.assertIs(True, token[\u0027is_admin_project\u0027]) so that the test also validates that it\u0027s a boolean.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"727cf368d72eefb392f31fb322bd7cdd22cdc1da","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if is_admin_project:"},{"line_number":642,"context_line":"            self.assertTrue(token[\u0027is_admin_project\u0027])"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_81d3aa03","line":642,"in_reply_to":"9a8ffd7b_8c0eed32","updated":"2015-11-26 19:49:35.000000000","message":"++","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if is_admin_project:"},{"line_number":642,"context_line":"            self.assertTrue(token[\u0027is_admin_project\u0027])"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_6adaad19","line":642,"in_reply_to":"9a8ffd7b_ade2ea9d","updated":"2015-12-01 02:49:12.000000000","message":"Done","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":18835,"name":"Toshiya Shiga","email":"tos-shiga@yk.jp.nec.com","username":"tos-shiga"},"change_message_id":"aa0b020c8751405f65f44bec20cd4547055f6e75","unresolved":false,"context_lines":[{"line_number":639,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"        if is_admin_project:"},{"line_number":642,"context_line":"            self.assertTrue(token[\u0027is_admin_project\u0027])"},{"line_number":643,"context_line":"        else:"},{"line_number":644,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_8c0eed32","line":642,"in_reply_to":"9a8ffd7b_ade2ea9d","updated":"2015-11-25 06:29:20.000000000","message":"I agree. we should test explicitly for boolean type.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if is_admin_project:"},{"line_number":604,"context_line":"            self.assertIs(True, token[\u0027is_admin_project\u0027])"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_42fce9b7","line":604,"updated":"2015-12-07 20:36:37.000000000","message":"use self.assertTrue(token[\u0027is_admin_project\u0027])","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c458699a847c413c8689e4ce12a155df526cc84","unresolved":false,"context_lines":[{"line_number":601,"context_line":"            self.assertIn(\u0027name\u0027, role)"},{"line_number":602,"context_line":""},{"line_number":603,"context_line":"        if is_admin_project:"},{"line_number":604,"context_line":"            self.assertIs(True, token[\u0027is_admin_project\u0027])"},{"line_number":605,"context_line":"        else:"},{"line_number":606,"context_line":"            self.assertNotIn(\u0027is_admin_project\u0027, token)"},{"line_number":607,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_c223f656","line":604,"in_reply_to":"7a740942_42fce9b7","updated":"2015-12-07 21:32:21.000000000","message":"Added a note to say we explicitly want to check it\u0027s a boolean","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_is_admin_token(self):"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        CONF.resource.admin_project_id \u003d [self.project[\u0027id\u0027]]"},{"line_number":428,"context_line":"        self.config_fixture.config("},{"line_number":429,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":430,"context_line":"            admin_project_id\u003d[self.project[\u0027id\u0027]])"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_bba88221","line":427,"updated":"2015-11-01 23:44:58.000000000","message":"is this needed? looks like it\u0027s being done one line below","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":434,"context_line":"            password\u003dself.user[\u0027password\u0027],"},{"line_number":435,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":436,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":437,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin\u003dTrue)"},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"    def test_token_for_non_admin_project_is_not_admin(self):"},{"line_number":440,"context_line":"        CONF.resource.admin_project_id \u003d [uuid.uuid4().hex]"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_dba53e47","line":437,"updated":"2015-11-01 23:44:58.000000000","message":"change `is_admin` to `is_admin_project`","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":448,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":449,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":450,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin\u003dFalse)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"class AllowRescopeScopedTokenDisabledTests(test_v3.RestfulTestCase):"},{"line_number":454,"context_line":"    def config_overrides(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_7b650a1c","line":451,"updated":"2015-11-01 23:44:58.000000000","message":"would be cool to see another test with multiple IDs set, and with no IDs set","commit_id":"3d289e7c04c54f4d97323f8987263ace551e89b5"},{"author":{"_account_id":18835,"name":"Toshiya Shiga","email":"tos-shiga@yk.jp.nec.com","username":"tos-shiga"},"change_message_id":"2d66d3b18458abfe5d9a0fa04484b96e693f9dec","unresolved":false,"context_lines":[{"line_number":423,"context_line":"        self.assertValidProjectScopedTokenResponse(r, require_catalog\u003dFalse)"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"    def test_is_admin_token(self):"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        self.config_fixture.config("},{"line_number":428,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":429,"context_line":"            admin_project_domain_name\u003dself.domain[\u0027name\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"da85f559_75d64529","line":426,"updated":"2015-11-12 11:02:25.000000000","message":"remove this blank line.","commit_id":"0956ba4be0a095b665a431291060bdfa03b8eac9"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.config_fixture.config("},{"line_number":431,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":432,"context_line":"            admin_project_name\u003dself.project[\u0027name\u0027])"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":435,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_cd896ecc","line":432,"updated":"2015-11-24 19:29:01.000000000","message":"combine these config settings to reduce duplication.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":429,"context_line":""},{"line_number":430,"context_line":"        self.config_fixture.config("},{"line_number":431,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":432,"context_line":"            admin_project_name\u003dself.project[\u0027name\u0027])"},{"line_number":433,"context_line":""},{"line_number":434,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":435,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ab2e4da3","line":432,"in_reply_to":"9a8ffd7b_cd896ecc","updated":"2015-12-01 02:49:12.000000000","message":"Done","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":435,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":436,"context_line":"            password\u003dself.user[\u0027password\u0027],"},{"line_number":437,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":438,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":439,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_006e5dc9","line":437,"updated":"2015-11-24 19:29:01.000000000","message":"There should also be a test that shows that the authenticate response has is_admin_project\u003dTrue","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":434,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":435,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":436,"context_line":"            password\u003dself.user[\u0027password\u0027],"},{"line_number":437,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":438,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":439,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":440,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_6b170555","line":437,"in_reply_to":"9a8ffd7b_006e5dc9","updated":"2015-12-01 02:49:12.000000000","message":"Done","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"50a2f0383ceb1446888d508ae18cfea63127f28d","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":439,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_token_for_non_admin_project_is_not_admin(self):"},{"line_number":442,"context_line":"        self.config_fixture.config("},{"line_number":443,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":444,"context_line":"            admin_project_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_dbf15802","line":441,"updated":"2015-11-20 00:24:38.000000000","message":"What about the OR cases? When admin_project_name is set but admin_project_domain_name is not or vice versa. Shouldn\u0027t the test validate that check as well?","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":439,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def test_token_for_non_admin_project_is_not_admin(self):"},{"line_number":442,"context_line":"        self.config_fixture.config("},{"line_number":443,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":444,"context_line":"            admin_project_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_0b099931","line":441,"in_reply_to":"ba8a016a_dbf15802","updated":"2015-12-01 02:49:12.000000000","message":"did \"project only\" but domain only will be changed shortly to handle domain as a project.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"152cd4bbfa6e61010db041ee57f08b8809d56ad7","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":447,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":448,"context_line":"            password\u003dself.user[\u0027password\u0027],"},{"line_number":449,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":450,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":451,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dFalse)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_40d0e553","line":449,"updated":"2015-11-24 19:29:01.000000000","message":"There should also be a test that shows that the authenticate response has is_admin_project\u003dFalse","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":446,"context_line":"        v3_token \u003d self.get_requested_token(self.build_authentication_request("},{"line_number":447,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":448,"context_line":"            password\u003dself.user[\u0027password\u0027],"},{"line_number":449,"context_line":"            project_id\u003dself.project[\u0027id\u0027]))"},{"line_number":450,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":451,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dFalse)"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_ab05ed14","line":449,"in_reply_to":"9a8ffd7b_40d0e553","updated":"2015-12-01 02:49:12.000000000","message":"Done","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e1d9d8b744d6f4dc843d9b83533c6703d1d29301","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def test_token_for_non_admin_project_is_not_admin(self):"},{"line_number":446,"context_line":"        self.config_fixture.config("},{"line_number":447,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":448,"context_line":"            admin_project_name\u003duuid.uuid4().hex)"},{"line_number":449,"context_line":"        r \u003d self.v3_create_token(self.build_authentication_request("},{"line_number":450,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_6362c118","line":447,"updated":"2015-12-01 07:23:39.000000000","message":"admin_project_domain_name should also be set here, to ensure the is_admin feature is correctly setup for this test","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cb1d6e6018664b4bc0ab400317cd5198afdbcedd","unresolved":false,"context_lines":[{"line_number":444,"context_line":""},{"line_number":445,"context_line":"    def test_token_for_non_admin_project_is_not_admin(self):"},{"line_number":446,"context_line":"        self.config_fixture.config("},{"line_number":447,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":448,"context_line":"            admin_project_name\u003duuid.uuid4().hex)"},{"line_number":449,"context_line":"        r \u003d self.v3_create_token(self.build_authentication_request("},{"line_number":450,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_3fcefc5a","line":447,"in_reply_to":"9a8ffd7b_6362c118","updated":"2015-12-01 11:29:21.000000000","message":"++","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cb1d6e6018664b4bc0ab400317cd5198afdbcedd","unresolved":false,"context_lines":[{"line_number":458,"context_line":"    def test_only_admin_project_set_acts_as_non_admin(self):"},{"line_number":459,"context_line":"        self.config_fixture.config("},{"line_number":460,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":461,"context_line":"            admin_project_name\u003dself.project[\u0027name\u0027])"},{"line_number":462,"context_line":"        r \u003d self.v3_create_token(self.build_authentication_request("},{"line_number":463,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":464,"context_line":"            password\u003dself.user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_3ff59c82","line":461,"updated":"2015-12-01 11:29:21.000000000","message":"Same comment as above by Lin.","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"8cc646aa119bb401e77c1b4fa044621b7594aaa8","unresolved":false,"context_lines":[{"line_number":458,"context_line":"    def test_only_admin_project_set_acts_as_non_admin(self):"},{"line_number":459,"context_line":"        self.config_fixture.config("},{"line_number":460,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":461,"context_line":"            admin_project_name\u003dself.project[\u0027name\u0027])"},{"line_number":462,"context_line":"        r \u003d self.v3_create_token(self.build_authentication_request("},{"line_number":463,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":464,"context_line":"            password\u003dself.user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_b0545154","line":461,"in_reply_to":"9a8ffd7b_3ff59c82","updated":"2015-12-01 14:47:09.000000000","message":"this is correct, this test for testing that only admin_project_name was specified","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb36fb310d7811cf849ba9e5b0ca779360392455","unresolved":false,"context_lines":[{"line_number":458,"context_line":"    def test_only_admin_project_set_acts_as_non_admin(self):"},{"line_number":459,"context_line":"        self.config_fixture.config("},{"line_number":460,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":461,"context_line":"            admin_project_name\u003dself.project[\u0027name\u0027])"},{"line_number":462,"context_line":"        r \u003d self.v3_create_token(self.build_authentication_request("},{"line_number":463,"context_line":"            user_id\u003dself.user[\u0027id\u0027],"},{"line_number":464,"context_line":"            password\u003dself.user[\u0027password\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_065de778","line":461,"in_reply_to":"9a8ffd7b_b0545154","updated":"2015-12-01 15:11:00.000000000","message":"True: only_admin_project_set, sorry","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"5edeec2ec912ea793b5c85ebd314b9e4a6f540cd","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":428,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def test_is_admin_token_by_names(self):"},{"line_number":431,"context_line":"        self.config_fixture.config("},{"line_number":432,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":433,"context_line":"            admin_project_domain_name\u003dself.domain[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_3af69c5d","line":430,"updated":"2015-12-02 22:58:53.000000000","message":"isn\u0027t this test redundant? All we care is the is_admin_project flag, we are not testing different ways to do the same scope.","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":427,"context_line":"        r \u003d self.get(\u0027/auth/tokens\u0027, headers\u003d{\u0027X-Subject-Token\u0027: v3_token})"},{"line_number":428,"context_line":"        self.assertValidProjectScopedTokenResponse(r, is_admin_project\u003dTrue)"},{"line_number":429,"context_line":""},{"line_number":430,"context_line":"    def test_is_admin_token_by_names(self):"},{"line_number":431,"context_line":"        self.config_fixture.config("},{"line_number":432,"context_line":"            group\u003d\u0027resource\u0027,"},{"line_number":433,"context_line":"            admin_project_domain_name\u003dself.domain[\u0027name\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e28075c2","line":430,"in_reply_to":"9a8ffd7b_3af69c5d","updated":"2015-12-07 20:36:37.000000000","message":"yeah, but meh","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"}],"keystone/token/providers/common.py":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"36955cdaa0566b1e6bf113196a60674aac12fa18","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if project_id:"},{"line_number":269,"context_line":"            token_data[\u0027project\u0027] \u003d self._get_filtered_project(project_id)"},{"line_number":270,"context_line":"            if _is_admin_project(token_data[\u0027project\u0027]):"},{"line_number":271,"context_line":"                token_data[\u0027is_admin_project\u0027] \u003d True"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _get_roles_for_user(self, user_id, domain_id, project_id):"},{"line_number":274,"context_line":"        roles \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_e39cf5c1","line":271,"updated":"2015-11-18 22:29:46.000000000","message":"I\u0027d like to see this moved to token_data[\u0027project\u0027][\u0027is_admin\u0027] so that all the project information is together.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"54bbaf54aa77dd0c6f9e72096b73ee4faf6e76fd","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if project_id:"},{"line_number":269,"context_line":"            token_data[\u0027project\u0027] \u003d self._get_filtered_project(project_id)"},{"line_number":270,"context_line":"            if _is_admin_project(token_data[\u0027project\u0027]):"},{"line_number":271,"context_line":"                token_data[\u0027is_admin_project\u0027] \u003d True"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _get_roles_for_user(self, user_id, domain_id, project_id):"},{"line_number":274,"context_line":"        roles \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_297061a3","line":271,"in_reply_to":"ba8a016a_e39cf5c1","updated":"2015-11-19 21:46:10.000000000","message":"I initially tried that.  However, aside from the difficullty in changing the internal objects used to create the token, there is the fact that this value is not an intrinsic property of the project itself, but rather an indicator at the token level how the token should be used.\n\nMoving back to practical considerations, adding it to the project means that we can\u0027t enforce policy on it without additional changes to the logic that pulls things out of the token;  this was a compromise.","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"b9a328f21e22d8c72e863d6ef34ae83785960b4c","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        if project_id:"},{"line_number":269,"context_line":"            token_data[\u0027project\u0027] \u003d self._get_filtered_project(project_id)"},{"line_number":270,"context_line":"            if _is_admin_project(token_data[\u0027project\u0027]):"},{"line_number":271,"context_line":"                token_data[\u0027is_admin_project\u0027] \u003d True"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":"    def _get_roles_for_user(self, user_id, domain_id, project_id):"},{"line_number":274,"context_line":"        roles \u003d []"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba8a016a_8184e80a","line":271,"in_reply_to":"ba8a016a_e39cf5c1","updated":"2015-11-19 11:56:53.000000000","message":"Makes sense to me. ++","commit_id":"0097564206670d2ee2c49c919a854d2b475a61fa"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"58557ff2848fb8b9f8bcb74899454aeebf540fd6","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        def _is_admin_project(project):"},{"line_number":258,"context_line":"            r \u003d CONF.resource"},{"line_number":259,"context_line":"            return (project[\u0027name\u0027] \u003d\u003d r.admin_project_name and"},{"line_number":260,"context_line":"                    project[\u0027domain\u0027][\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        if \u0027domain\u0027 in token_data or \u0027project\u0027 in token_data:"},{"line_number":263,"context_line":"            # scope already exist, no need to populate it again"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_e94e86c0","line":260,"updated":"2015-11-25 08:48:58.000000000","message":"The spec says that we should support the ability for a project acting as a domain to be the special project.  The proposed change is that this should also match if:\n\n(r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)\n\nWe should either include this check now, or put a TODO to come back and fix that when the rest of the code for projects acting as a domain lands.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"85494d363f8b98a23e2695b8972b97f72363e995","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        def _is_admin_project(project):"},{"line_number":258,"context_line":"            r \u003d CONF.resource"},{"line_number":259,"context_line":"            return (project[\u0027name\u0027] \u003d\u003d r.admin_project_name and"},{"line_number":260,"context_line":"                    project[\u0027domain\u0027][\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        if \u0027domain\u0027 in token_data or \u0027project\u0027 in token_data:"},{"line_number":263,"context_line":"            # scope already exist, no need to populate it again"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_94a60b52","line":260,"in_reply_to":"9a8ffd7b_e94e86c0","updated":"2015-12-01 02:49:12.000000000","message":"Will add the todo and the code in a comment:  can\u0027t really implement until we can confirm that domain-is-a-project.","commit_id":"a62780d8a531fd6fdec3428bacf89b057538df37"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cb1d6e6018664b4bc0ab400317cd5198afdbcedd","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        # to be the admin project once the rest of the code for domains"},{"line_number":258,"context_line":"        # acting as projects is merged.  Code will likely be:"},{"line_number":259,"context_line":"        # (r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True"},{"line_number":260,"context_line":"        #  and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":"        def _is_admin_project(project):"},{"line_number":262,"context_line":"            r \u003d CONF.resource"},{"line_number":263,"context_line":"            return (project[\u0027name\u0027] \u003d\u003d r.admin_project_name and"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_1fca1850","line":260,"updated":"2015-12-01 11:29:21.000000000","message":"Why should we care about is_domain flag at all ?\n\nI think the admin project is specified, and it shouldn\u0027t matter if it\u0027s is_domain or not, because it still is a project.","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"242515f4cca4fafac6af68bc9eac5d6d7fd31cc1","unresolved":false,"context_lines":[{"line_number":257,"context_line":"        # to be the admin project once the rest of the code for domains"},{"line_number":258,"context_line":"        # acting as projects is merged.  Code will likely be:"},{"line_number":259,"context_line":"        # (r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True"},{"line_number":260,"context_line":"        #  and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":"        def _is_admin_project(project):"},{"line_number":262,"context_line":"            r \u003d CONF.resource"},{"line_number":263,"context_line":"            return (project[\u0027name\u0027] \u003d\u003d r.admin_project_name and"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a8ffd7b_d60b127c","line":260,"in_reply_to":"9a8ffd7b_1fca1850","updated":"2015-12-01 14:01:56.000000000","message":"...because the the config settings (in this case) indicate that this is meant to only match a project acting as a domain....want to avoid confusion incase there is a project below the domain with the same name as the domain","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a87647fa714149fe008e2f93373ebdcedc1d6ebc","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def _populate_scope(self, token_data, domain_id, project_id):"},{"line_number":256,"context_line":"        # TODO(ayoung): Support the ability for a project acting as a domain"},{"line_number":257,"context_line":"        # to be the admin project once the rest of the code for domains"},{"line_number":258,"context_line":"        # acting as projects is merged.  Code will likely be:"},{"line_number":259,"context_line":"        # (r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True"},{"line_number":260,"context_line":"        #  and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":"        def _is_admin_project(project):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_54c5d68b","line":258,"updated":"2015-12-04 20:52:19.000000000","message":"project acting as domain?","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def _populate_scope(self, token_data, domain_id, project_id):"},{"line_number":256,"context_line":"        # TODO(ayoung): Support the ability for a project acting as a domain"},{"line_number":257,"context_line":"        # to be the admin project once the rest of the code for domains"},{"line_number":258,"context_line":"        # acting as projects is merged.  Code will likely be:"},{"line_number":259,"context_line":"        # (r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True"},{"line_number":260,"context_line":"        #  and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":"        def _is_admin_project(project):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_c2a3f9b0","line":258,"in_reply_to":"7a740942_54c5d68b","updated":"2015-12-07 20:36:37.000000000","message":"++","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c458699a847c413c8689e4ce12a155df526cc84","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    def _populate_scope(self, token_data, domain_id, project_id):"},{"line_number":256,"context_line":"        # TODO(ayoung): Support the ability for a project acting as a domain"},{"line_number":257,"context_line":"        # to be the admin project once the rest of the code for domains"},{"line_number":258,"context_line":"        # acting as projects is merged.  Code will likely be:"},{"line_number":259,"context_line":"        # (r.admin_project_name \u003d\u003d None and project[\u0027is_domain\u0027] \u003d\u003d True"},{"line_number":260,"context_line":"        #  and project[\u0027name\u0027] \u003d\u003d r.admin_project_domain_name)"},{"line_number":261,"context_line":"        def _is_admin_project(project):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_e2287235","line":258,"in_reply_to":"7a740942_c2a3f9b0","updated":"2015-12-07 21:32:21.000000000","message":"Done","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            token_data[\u0027domain\u0027] \u003d self._get_filtered_domain(domain_id)"},{"line_number":272,"context_line":"        if project_id:"},{"line_number":273,"context_line":"            token_data[\u0027project\u0027] \u003d self._get_filtered_project(project_id)"},{"line_number":274,"context_line":"            if _is_admin_project(token_data[\u0027project\u0027]):"},{"line_number":275,"context_line":"                token_data[\u0027is_admin_project\u0027] \u003d True"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_roles_for_user(self, user_id, domain_id, project_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_c2be9964","line":274,"updated":"2015-12-07 20:36:37.000000000","message":"this should have been it\u0027s own function:\n\n  _populate_is_admin_project(token_data, project_id)\n\nbecause now in \"populate scope\" you are setting the project xor domain and the admin_project field","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c458699a847c413c8689e4ce12a155df526cc84","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            token_data[\u0027domain\u0027] \u003d self._get_filtered_domain(domain_id)"},{"line_number":272,"context_line":"        if project_id:"},{"line_number":273,"context_line":"            token_data[\u0027project\u0027] \u003d self._get_filtered_project(project_id)"},{"line_number":274,"context_line":"            if _is_admin_project(token_data[\u0027project\u0027]):"},{"line_number":275,"context_line":"                token_data[\u0027is_admin_project\u0027] \u003d True"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def _get_roles_for_user(self, user_id, domain_id, project_id):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_4218661e","line":274,"in_reply_to":"7a740942_c2be9964","updated":"2015-12-07 21:32:21.000000000","message":"Done","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"}],"keystone/token/providers/fernet/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2873ad1c714bdb8f79077026de32f582b0bd878a","unresolved":false,"context_lines":[{"line_number":258,"context_line":"        trust_ref \u003d None"},{"line_number":259,"context_line":"        if trust_id:"},{"line_number":260,"context_line":"            trust_ref \u003d self.trust_api.get_trust(trust_id)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        return self.v3_token_data_helper.get_token_data("},{"line_number":263,"context_line":"            user_id,"},{"line_number":264,"context_line":"            method_names\u003dmethods,"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a26ad4f_5ba28e4c","side":"PARENT","line":261,"updated":"2015-11-01 23:44:58.000000000","message":"undo this change?","commit_id":"50a2fa5c17879feb76b38a3509dbb08a6860cc67"}],"releasenotes/notes/is-admin-24b34238c83b3a82.yaml":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e1d9d8b744d6f4dc843d9b83533c6703d1d29301","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 96869 \u003chttps://bugs.launchpad.net/keystone/+bug/968696\u003e`_]"},{"line_number":5,"context_line":"    A pair of configuration options have been added to the ``[resource]``"},{"line_number":6,"context_line":"    section to specify a special ``admin`` project."}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a8ffd7b_63172155","line":3,"updated":"2015-12-01 07:23:39.000000000","message":"release note does not render correctly, see: http://docs-draft.openstack.org/19/240719/7/check/gate-keystone-releasenotes/578d4b8//releasenotes/build/html/unreleased.html","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cb1d6e6018664b4bc0ab400317cd5198afdbcedd","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - \u003e"},{"line_number":4,"context_line":"    [`bug 96869 \u003chttps://bugs.launchpad.net/keystone/+bug/968696\u003e`_]"},{"line_number":5,"context_line":"    A pair of configuration options have been added to the ``[resource]``"},{"line_number":6,"context_line":"    section to specify a special ``admin`` project."},{"line_number":7,"context_line":"    ``admin_project_domain_name`` and ``admin_project_name``.  If these are"},{"line_number":8,"context_line":"    defined, any scoped token issued for that project will have an additional"},{"line_number":9,"context_line":"    identifier `is_admin_project` added to the token. This identifier can then"}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a8ffd7b_3f3efcb8","line":6,"updated":"2015-12-01 11:29:21.000000000","message":"(nit) perhaps a colon mark would look better: \"project:\" vs \"project.\"","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"cb1d6e6018664b4bc0ab400317cd5198afdbcedd","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    It does not yet support the ability for a project acting as a"},{"line_number":14,"context_line":"    domain to be the admin project.  That will be added once the rest"},{"line_number":15,"context_line":"    of the code for domains acting as projects is merged."},{"line_number":16,"context_line":"    "}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a8ffd7b_bf03cc0c","line":15,"updated":"2015-12-01 11:29:21.000000000","message":"Do we really need to put this in the release notes  ?\n\nHow did they get know about is_domain projects ? Perhaps they don\u0027t even know about it ? (there is nothing in the release notes so far about them)","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"e1d9d8b744d6f4dc843d9b83533c6703d1d29301","unresolved":false,"context_lines":[{"line_number":13,"context_line":"    It does not yet support the ability for a project acting as a"},{"line_number":14,"context_line":"    domain to be the admin project.  That will be added once the rest"},{"line_number":15,"context_line":"    of the code for domains acting as projects is merged."},{"line_number":16,"context_line":"    "}],"source_content_type":"text/x-yaml","patch_set":7,"id":"9a8ffd7b_a3fbc946","line":16,"updated":"2015-12-01 07:23:39.000000000","message":"nit: remove extra space here","commit_id":"37e5a220c70a4d04c57ed3df88c20b013c29e31f"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"ba1690816ee74f2ef8ac7556b57a11e76238ad0c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    section to specify a special ``admin`` project:"},{"line_number":7,"context_line":"    ``admin_project_domain_name`` and ``admin_project_name``.  If these are"},{"line_number":8,"context_line":"    defined, any scoped token issued for that project will have an additional"},{"line_number":9,"context_line":"    identifier ``is_admin_project`` added to the token. This identifier can then"},{"line_number":10,"context_line":"    be checked by the policy rules in the policy files of the services when"},{"line_number":11,"context_line":"    evaluating access control policy for an API. Keystone does not yet"},{"line_number":12,"context_line":"    support the ability for a project acting as a domain to be the"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a740942_071bb773","line":9,"updated":"2015-12-04 12:48:02.000000000","message":"I\u0027d suggest \"will have the key/pair ...\", as you did in the config option description.","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"a87647fa714149fe008e2f93373ebdcedc1d6ebc","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    evaluating access control policy for an API. Keystone does not yet"},{"line_number":12,"context_line":"    support the ability for a project acting as a domain to be the"},{"line_number":13,"context_line":"    admin project.  That will be added once the rest of the code for"},{"line_number":14,"context_line":"    domains acting as projects is merged."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a740942_f485e258","line":14,"updated":"2015-12-04 20:52:19.000000000","message":"... project acting as domain is merged.","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"4c458699a847c413c8689e4ce12a155df526cc84","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    evaluating access control policy for an API. Keystone does not yet"},{"line_number":12,"context_line":"    support the ability for a project acting as a domain to be the"},{"line_number":13,"context_line":"    admin project.  That will be added once the rest of the code for"},{"line_number":14,"context_line":"    domains acting as projects is merged."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a740942_621562e3","line":14,"in_reply_to":"7a740942_c22d39ff","updated":"2015-12-07 21:32:21.000000000","message":"Done","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"90d3e0584b5fbfa14b273455967dd4fe3a39c24f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    evaluating access control policy for an API. Keystone does not yet"},{"line_number":12,"context_line":"    support the ability for a project acting as a domain to be the"},{"line_number":13,"context_line":"    admin project.  That will be added once the rest of the code for"},{"line_number":14,"context_line":"    domains acting as projects is merged."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a740942_c22d39ff","line":14,"in_reply_to":"7a740942_f485e258","updated":"2015-12-07 20:36:37.000000000","message":"++","commit_id":"e7023697a884759716d0a01605825a3af90d4db6"}]}
