)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Auth plugin for X.509 tokenless authz"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An auth plugin that allows service clients to be authenticated"},{"line_number":10,"context_line":"with the X.509 tokenless authz. Typical configured options"},{"line_number":11,"context_line":"defined on the service client side should look like the following -"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"certfile\u003d/opt/service_client.crt"},{"line_number":14,"context_line":"keyfile\u003d/opt/service_client.key"},{"line_number":15,"context_line":"cafile\u003d/opt/ca.crt"},{"line_number":16,"context_line":"auth_url\u003dhttps://keystone:5000/"},{"line_number":17,"context_line":"auth_plugin\u003dtokenless_auth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3aaa91ec_2aaaf6d4","line":18,"range":{"start_line":10,"start_character":32,"end_line":18,"end_character":29},"updated":"2016-06-22 03:21:53.000000000","message":"document this instead? ideally here: https://github.com/openstack/keystoneauth/blob/master/doc/source/authentication-plugins.rst so others can use it :)","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"auth_plugin\u003dtokenless_auth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ie0298f0ef7f3891cfc81072ab9ef9e501773fe5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3aaa91ec_aa48a65c","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":64},"updated":"2016-06-22 03:21:53.000000000","message":"there\u0027s not BP named this for keystoneauth -- https://blueprints.launchpad.net/keystoneauth \n\nfile a bug instead?","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Auth plugin for X.509 tokenless authz"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An auth plugin that allows service clients to be authenticated"},{"line_number":10,"context_line":"with the X.509 tokenless authz. Typical configured options"},{"line_number":11,"context_line":"defined on the service client side should look like the following -"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"certfile\u003d/opt/service_client.crt"},{"line_number":14,"context_line":"keyfile\u003d/opt/service_client.key"},{"line_number":15,"context_line":"cafile\u003d/opt/ca.crt"},{"line_number":16,"context_line":"auth_url\u003dhttps://keystone:5000/v3"},{"line_number":17,"context_line":"auth_plugin\u003dv3x509tokenlessauth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_ead46e48","line":18,"range":{"start_line":10,"start_character":32,"end_line":18,"end_character":29},"updated":"2016-06-22 03:26:31.000000000","message":"document this instead? ideally here: https://github.com/openstack/keystoneauth/blob/master/doc/source/authentication-plugins.rst so others can use it :)","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Auth plugin for X.509 tokenless authz"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"An auth plugin that allows service clients to be authenticated"},{"line_number":10,"context_line":"with the X.509 tokenless authz. Typical configured options"},{"line_number":11,"context_line":"defined on the service client side should look like the following -"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"certfile\u003d/opt/service_client.crt"},{"line_number":14,"context_line":"keyfile\u003d/opt/service_client.key"},{"line_number":15,"context_line":"cafile\u003d/opt/ca.crt"},{"line_number":16,"context_line":"auth_url\u003dhttps://keystone:5000/v3"},{"line_number":17,"context_line":"auth_plugin\u003dv3x509tokenlessauth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_ff1b607e","line":18,"range":{"start_line":10,"start_character":32,"end_line":18,"end_character":29},"in_reply_to":"3aaa91ec_ead46e48","updated":"2016-06-22 20:22:28.000000000","message":"agree. That\u0027s the better place for this.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":17,"context_line":"auth_plugin\u003dv3x509tokenlessauth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ie0298f0ef7f3891cfc81072ab9ef9e501773fe5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_6ada3e7a","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":64},"updated":"2016-06-22 03:26:31.000000000","message":"there\u0027s not BP named this for keystoneauth -- https://blueprints.launchpad.net/keystoneauth \nfile a bug instead?","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":17,"context_line":"auth_plugin\u003dv3x509tokenlessauth"},{"line_number":18,"context_line":"domain_name\u003dmy_service_domain"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"implements bp keystone-tokenless-authz-with-x509-ssl-client-cert"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: Ie0298f0ef7f3891cfc81072ab9ef9e501773fe5f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3aaa91ec_39e861e2","line":20,"range":{"start_line":20,"start_character":0,"end_line":20,"end_character":64},"in_reply_to":"3aaa91ec_6ada3e7a","updated":"2016-06-22 20:22:28.000000000","message":"yep. will do it.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"}],"doc/source/authentication-plugins.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"The plugin requires the OAuth consumer\u0027s key and secret, as well as the OAuth"},{"line_number":158,"context_line":"access token\u0027s key and secret. For example::"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    \u003e\u003e\u003e from keystoneauth1.extras import oauth1"},{"line_number":161,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"},{"line_number":162,"context_line":"    \u003e\u003e\u003e a \u003d oauth1.V3OAuth1(\u0027http://my.keystone.com:5000/v3\u0027,"},{"line_number":163,"context_line":"    ...                     consumer_key\u003dconsumer_id,"},{"line_number":164,"context_line":"    ...                     consumer_secret\u003dconsumer_secret,"},{"line_number":165,"context_line":"    ...                     access_key\u003daccess_token_key,"},{"line_number":166,"context_line":"    ...                     access_secret\u003daccess_token_secret)"},{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"X.509 Tokenless"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_0f0ce539","line":167,"range":{"start_line":160,"start_character":4,"end_line":167,"end_character":35},"updated":"2016-06-24 04:54:36.000000000","message":"I think an example like this would be very helpful","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"The plugin requires the OAuth consumer\u0027s key and secret, as well as the OAuth"},{"line_number":158,"context_line":"access token\u0027s key and secret. For example::"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    \u003e\u003e\u003e from keystoneauth1.extras import oauth1"},{"line_number":161,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"},{"line_number":162,"context_line":"    \u003e\u003e\u003e a \u003d oauth1.V3OAuth1(\u0027http://my.keystone.com:5000/v3\u0027,"},{"line_number":163,"context_line":"    ...                     consumer_key\u003dconsumer_id,"},{"line_number":164,"context_line":"    ...                     consumer_secret\u003dconsumer_secret,"},{"line_number":165,"context_line":"    ...                     access_key\u003daccess_token_key,"},{"line_number":166,"context_line":"    ...                     access_secret\u003daccess_token_secret)"},{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"X.509 Tokenless"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_ec521934","line":167,"range":{"start_line":160,"start_character":4,"end_line":167,"end_character":35},"in_reply_to":"3aaa91ec_0f0ce539","updated":"2016-06-24 22:40:16.000000000","message":"absolutely","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_f44b2c85","line":170,"range":{"start_line":170,"start_character":0,"end_line":170,"end_character":15},"updated":"2016-06-24 04:54:36.000000000","message":"Tokeless Auth*","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_4c340dfb","line":170,"range":{"start_line":170,"start_character":0,"end_line":170,"end_character":15},"in_reply_to":"3aaa91ec_f44b2c85","updated":"2016-06-24 22:40:16.000000000","message":"done","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_f4196c89","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":57},"updated":"2016-06-24 04:54:36.000000000","message":"A plugin for tokenless authentication also exists. It provides a means to authorize client operations within Keystone by using an X.509 SSL client certificate without having to issue a token. We provide a helper\nauthentication plugin at:\n:py:class:`~keystoneauth1.identity.v3.X509TokenlessAuth`.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_b47fe4a9","line":173,"range":{"start_line":173,"start_character":51,"end_line":173,"end_character":56},"updated":"2016-06-24 04:54:36.000000000","message":"Auth*, no \"z\"","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_8c3a75e5","line":173,"range":{"start_line":173,"start_character":51,"end_line":173,"end_character":56},"in_reply_to":"3aaa91ec_b47fe4a9","updated":"2016-06-24 22:40:16.000000000","message":"done","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":170,"context_line":"X.509 Tokenless"},{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"V3 plugins are provided to support X.509 Tokenless Authz:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_ac23f1bb","line":173,"range":{"start_line":173,"start_character":0,"end_line":173,"end_character":57},"in_reply_to":"3aaa91ec_f4196c89","updated":"2016-06-24 22:40:16.000000000","message":"very nice description! thx!","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":178,"context_line":"parameters defined in the service config would be as the following."},{"line_number":179,"context_line":"For example::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    certfile\u003d/opt/service_client.crt"},{"line_number":182,"context_line":"    keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_cf05bd11","line":179,"range":{"start_line":177,"start_character":0,"end_line":179,"end_character":13},"updated":"2016-06-24 04:54:36.000000000","message":"How useful is this to someone trying to use keystoneauth to auth with tokenless auth?","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":178,"context_line":"parameters defined in the service config would be as the following."},{"line_number":179,"context_line":"For example::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    certfile\u003d/opt/service_client.crt"},{"line_number":182,"context_line":"    keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_d4c270e8","line":179,"range":{"start_line":178,"start_character":41,"end_line":179,"end_character":13},"updated":"2016-06-24 04:54:36.000000000","message":"would be the following::","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":178,"context_line":"parameters defined in the service config would be as the following."},{"line_number":179,"context_line":"For example::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    certfile\u003d/opt/service_client.crt"},{"line_number":182,"context_line":"    keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_ef5ccb1a","line":179,"range":{"start_line":177,"start_character":0,"end_line":179,"end_character":13},"in_reply_to":"3aaa91ec_cf05bd11","updated":"2016-06-24 22:40:16.000000000","message":"I would feel helpful for an example of required set of parameters for the plugin ;-)","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":175,"context_line":"- :class:`~keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":178,"context_line":"parameters defined in the service config would be as the following."},{"line_number":179,"context_line":"For example::"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"    certfile\u003d/opt/service_client.crt"},{"line_number":182,"context_line":"    keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":11,"id":"3aaa91ec_4c1b6d81","line":179,"range":{"start_line":178,"start_character":41,"end_line":179,"end_character":13},"in_reply_to":"3aaa91ec_d4c270e8","updated":"2016-06-24 22:40:16.000000000","message":"done.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"47e1c836759a27eafc3a926418cf9f223a86da77","unresolved":false,"context_lines":[{"line_number":157,"context_line":"The plugin requires the OAuth consumer\u0027s key and secret, as well as the OAuth"},{"line_number":158,"context_line":"access token\u0027s key and secret. For example::"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    \u003e\u003e\u003e from keystoneauth1.extras import oauth1"},{"line_number":161,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"},{"line_number":162,"context_line":"    \u003e\u003e\u003e a \u003d oauth1.V3OAuth1(\u0027http://my.keystone.com:5000/v3\u0027,"},{"line_number":163,"context_line":"    ...                     consumer_key\u003dconsumer_id,"},{"line_number":164,"context_line":"    ...                     consumer_secret\u003dconsumer_secret,"},{"line_number":165,"context_line":"    ...                     access_key\u003daccess_token_key,"},{"line_number":166,"context_line":"    ...                     access_secret\u003daccess_token_secret)"},{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Tokenless Auth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_5b22fda3","line":167,"range":{"start_line":160,"start_character":0,"end_line":167,"end_character":35},"updated":"2016-06-25 02:32:35.000000000","message":"i\u0027d still like to see an example of this plugin would be used in practice","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"2b8af3fcb864fa98e8368e35c2d0670d108b97ef","unresolved":false,"context_lines":[{"line_number":157,"context_line":"The plugin requires the OAuth consumer\u0027s key and secret, as well as the OAuth"},{"line_number":158,"context_line":"access token\u0027s key and secret. For example::"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    \u003e\u003e\u003e from keystoneauth1.extras import oauth1"},{"line_number":161,"context_line":"    \u003e\u003e\u003e from keystoneauth1 import session"},{"line_number":162,"context_line":"    \u003e\u003e\u003e a \u003d oauth1.V3OAuth1(\u0027http://my.keystone.com:5000/v3\u0027,"},{"line_number":163,"context_line":"    ...                     consumer_key\u003dconsumer_id,"},{"line_number":164,"context_line":"    ...                     consumer_secret\u003dconsumer_secret,"},{"line_number":165,"context_line":"    ...                     access_key\u003daccess_token_key,"},{"line_number":166,"context_line":"    ...                     access_secret\u003daccess_token_secret)"},{"line_number":167,"context_line":"    \u003e\u003e\u003e s \u003d session.Session(auth\u003da)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"Tokenless Auth"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_0a48d35a","line":167,"range":{"start_line":160,"start_character":0,"end_line":167,"end_character":35},"in_reply_to":"3aaa91ec_5b22fda3","updated":"2016-06-27 23:36:32.000000000","message":"sorry, misunderstood what you meant before ;-) have it included now.","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"47e1c836759a27eafc3a926418cf9f223a86da77","unresolved":false,"context_lines":[{"line_number":204,"context_line":"- v3token: :py:class:`keystoneauth1.identity.v3.Token`"},{"line_number":205,"context_line":"- v3totp: :py:class:`keystoneauth1.identity.v3.TOTP`"},{"line_number":206,"context_line":"- v3kerberos: :py:class:`keystoneauth1.extras.kerberos.Kerberos`"},{"line_number":207,"context_line":"- v3x509tokenlessauth: :py:class:`keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Creating Authentication Plugins"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_3b29f18a","line":207,"range":{"start_line":207,"start_character":0,"end_line":207,"end_character":78},"updated":"2016-06-25 02:32:35.000000000","message":"rm x509 from here","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"2b8af3fcb864fa98e8368e35c2d0670d108b97ef","unresolved":false,"context_lines":[{"line_number":204,"context_line":"- v3token: :py:class:`keystoneauth1.identity.v3.Token`"},{"line_number":205,"context_line":"- v3totp: :py:class:`keystoneauth1.identity.v3.TOTP`"},{"line_number":206,"context_line":"- v3kerberos: :py:class:`keystoneauth1.extras.kerberos.Kerberos`"},{"line_number":207,"context_line":"- v3x509tokenlessauth: :py:class:`keystoneauth1.identity.v3.X509TokenlessAuth`"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"Creating Authentication Plugins"},{"line_number":210,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":12,"id":"3aaa91ec_368c1c35","line":207,"range":{"start_line":207,"start_character":0,"end_line":207,"end_character":78},"in_reply_to":"3aaa91ec_3b29f18a","updated":"2016-06-27 23:36:32.000000000","message":"good catch! done.","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_005afaf1","line":174,"range":{"start_line":174,"start_character":35,"end_line":174,"end_character":43},"updated":"2016-06-29 22:33:29.000000000","message":"change Keystone to \"the Identity server\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_8066eab8","line":174,"range":{"start_line":174,"start_character":62,"end_line":174,"end_character":65},"updated":"2016-06-29 22:33:29.000000000","message":"change SSL to TLS","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_d891c9f2","line":174,"range":{"start_line":174,"start_character":35,"end_line":174,"end_character":43},"in_reply_to":"3aaa91ec_005afaf1","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":171,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_b88cbdd7","line":174,"range":{"start_line":174,"start_character":62,"end_line":174,"end_character":65},"in_reply_to":"3aaa91ec_8066eab8","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_60fadebe","line":175,"range":{"start_line":175,"start_character":58,"end_line":175,"end_character":64},"updated":"2016-06-29 22:33:29.000000000","message":"what does \"helper\" mean here?","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"A plugin for tokenless authentication also exists. It provides a means to"},{"line_number":174,"context_line":"authorize client operations within Keystone by using an X.509 SSL client"},{"line_number":175,"context_line":"certificate without having to issue a token. We provide a helper"},{"line_number":176,"context_line":"authentication plugin at:"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_98b2a192","line":175,"range":{"start_line":175,"start_character":58,"end_line":175,"end_character":64},"in_reply_to":"3aaa91ec_60fadebe","updated":"2016-07-01 00:36:00.000000000","message":"changed to \"tokenless\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_a0ee86ea","line":180,"range":{"start_line":180,"start_character":67,"end_line":180,"end_character":73},"updated":"2016-06-29 22:33:29.000000000","message":"change \"config\" to \"configuration\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":177,"context_line":""},{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_38456d6e","line":180,"range":{"start_line":180,"start_character":67,"end_line":180,"end_character":73},"in_reply_to":"3aaa91ec_a0ee86ea","updated":"2016-07-01 00:36:00.000000000","message":"done","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"},{"line_number":184,"context_line":"    \u003e\u003e\u003e keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_00b67af8","line":181,"range":{"start_line":181,"start_character":34,"end_line":181,"end_character":40},"updated":"2016-06-29 22:33:29.000000000","message":"change \"config\" to \"configuration\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":178,"context_line":"- :class:`~keystoneauth1.identity.v3.TokenlessAuth`"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"},{"line_number":184,"context_line":"    \u003e\u003e\u003e keyfile\u003d/opt/service_client.key"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_383c4de0","line":181,"range":{"start_line":181,"start_character":34,"end_line":181,"end_character":40},"in_reply_to":"3aaa91ec_00b67af8","updated":"2016-07-01 00:36:00.000000000","message":"done","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"},{"line_number":184,"context_line":"    \u003e\u003e\u003e keyfile\u003d/opt/service_client.key"},{"line_number":185,"context_line":"    \u003e\u003e\u003e cafile\u003d/opt/ca.crt"},{"line_number":186,"context_line":"    \u003e\u003e\u003e auth_url\u003dhttps://keystone:5000/v3/"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_a073264d","line":183,"updated":"2016-06-29 22:33:29.000000000","message":"the \u003e\u003e\u003e makes this look like it\u0027s sample python code, not an ini file. Remove the \u003e\u003e\u003e\n\nAlso, I\u0027d prefer it if the config options that aren\u0027t related to the plugin were not listed here, since the plugin config options can go in a different section.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":180,"context_line":"It is mostly used by service clients for token validation. Typical config"},{"line_number":181,"context_line":"parameters defined in the service config would be the following::"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    \u003e\u003e\u003e certfile\u003d/opt/service_client.crt"},{"line_number":184,"context_line":"    \u003e\u003e\u003e keyfile\u003d/opt/service_client.key"},{"line_number":185,"context_line":"    \u003e\u003e\u003e cafile\u003d/opt/ca.crt"},{"line_number":186,"context_line":"    \u003e\u003e\u003e auth_url\u003dhttps://keystone:5000/v3/"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_7b6fef91","line":183,"in_reply_to":"3aaa91ec_a073264d","updated":"2016-07-01 00:36:00.000000000","message":"agree. Steve actually had the same thought, but I just thought it was helpful. Anyway, I\u0027m going to remove it here.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    \u003e\u003e\u003e auth_plugin\u003dv3tokenlessauth"},{"line_number":188,"context_line":"    \u003e\u003e\u003e domain_name\u003dmy_service_domain"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Additionally, here is an example of this plugin would be used in practice::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    \u003e\u003e\u003e keystoneauth1 import session"},{"line_number":193,"context_line":"    \u003e\u003e\u003e keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_e0888e24","line":190,"range":{"start_line":190,"start_character":33,"end_line":190,"end_character":40},"updated":"2016-06-29 22:33:29.000000000","message":"change to \"of how this\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    \u003e\u003e\u003e auth_plugin\u003dv3tokenlessauth"},{"line_number":188,"context_line":"    \u003e\u003e\u003e domain_name\u003dmy_service_domain"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"Additionally, here is an example of this plugin would be used in practice::"},{"line_number":191,"context_line":""},{"line_number":192,"context_line":"    \u003e\u003e\u003e keystoneauth1 import session"},{"line_number":193,"context_line":"    \u003e\u003e\u003e keystoneauth1.identity import v3"}],"source_content_type":"text/x-rst","patch_set":13,"id":"3aaa91ec_3813ad66","line":190,"range":{"start_line":190,"start_character":33,"end_line":190,"end_character":40},"in_reply_to":"3aaa91ec_e0888e24","updated":"2016-07-01 00:36:00.000000000","message":"done","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"}],"keystoneauth1/identity/__init__.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":43,"context_line":"V3OidcAuthorizationCode \u003d oidc.OidcAuthorizationCode"},{"line_number":44,"context_line":"\"\"\"See :class:`keystoneauth1.identity.v3.oidc.OidcAuthorizationCode`\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3X509TokenlessAuth \u003d v3.X509TokenlessAuth"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"__all__ \u003d (\u0027BaseIdentityPlugin\u0027,"},{"line_number":49,"context_line":"           \u0027Password\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_fc92504a","line":46,"range":{"start_line":46,"start_character":25,"end_line":46,"end_character":42},"updated":"2016-05-09 05:20:49.000000000","message":"please add the doc string like the other classes.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":43,"context_line":"V3OidcAuthorizationCode \u003d oidc.OidcAuthorizationCode"},{"line_number":44,"context_line":"\"\"\"See :class:`keystoneauth1.identity.v3.oidc.OidcAuthorizationCode`\"\"\""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"V3X509TokenlessAuth \u003d v3.X509TokenlessAuth"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"__all__ \u003d (\u0027BaseIdentityPlugin\u0027,"},{"line_number":49,"context_line":"           \u0027Password\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_01d8a8ee","line":46,"range":{"start_line":46,"start_character":25,"end_line":46,"end_character":42},"in_reply_to":"dab17558_fc92504a","updated":"2016-06-17 00:24:06.000000000","message":"done.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"           \u0027V3OidcAuthorizationCode\u0027,"},{"line_number":64,"context_line":"           \u0027V3OidcAccessToken\u0027,"},{"line_number":65,"context_line":"           \u0027V3TOTP\u0027,"},{"line_number":66,"context_line":"           \u0027V3X509TokenlessAuth\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_6ac19e80","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":15},"updated":"2016-06-22 03:26:31.000000000","message":"nit: the X should be lower case, i think","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":63,"context_line":"           \u0027V3OidcAuthorizationCode\u0027,"},{"line_number":64,"context_line":"           \u0027V3OidcAccessToken\u0027,"},{"line_number":65,"context_line":"           \u0027V3TOTP\u0027,"},{"line_number":66,"context_line":"           \u0027V3X509TokenlessAuth\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_7f73f0e7","line":66,"range":{"start_line":66,"start_character":14,"end_line":66,"end_character":15},"in_reply_to":"3aaa91ec_6ac19e80","updated":"2016-06-22 20:22:28.000000000","message":"looking at the other examples, like V3OidcAccessToken, O is upper case there, so ... it seems like I should just keep it as lower case ;-)","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"}],"keystoneauth1/identity/v3/__init__.py":[{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"632ee8bd091b18e3bd575210d274766c2a6d2eea","unresolved":false,"context_lines":[{"line_number":32,"context_line":"           \u0027PasswordMethod\u0027,"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"           \u0027Token\u0027,"},{"line_number":35,"context_line":"           \u0027TokenMethod\u0027,"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"           \u0027OidcAuthorizationCode\u0027,"},{"line_number":38,"context_line":"           \u0027OidcPassword\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_1b0dcc37","line":35,"range":{"start_line":35,"start_character":24,"end_line":35,"end_character":25},"updated":"2016-02-24 20:46:57.000000000","message":"how. the. hell. it. worked. before.\n\nPlease move this fix to a separate patchset.","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"231b7597e9f84e88424e825bf5e01cb4430aca80","unresolved":false,"context_lines":[{"line_number":32,"context_line":"           \u0027PasswordMethod\u0027,"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"           \u0027Token\u0027,"},{"line_number":35,"context_line":"           \u0027TokenMethod\u0027,"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"           \u0027OidcAuthorizationCode\u0027,"},{"line_number":38,"context_line":"           \u0027OidcPassword\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"bae84128_f1612713","line":35,"range":{"start_line":35,"start_character":24,"end_line":35,"end_character":25},"in_reply_to":"bae84128_1b0dcc37","updated":"2016-02-24 21:48:35.000000000","message":"I was curious about that too :-). With or without the comma there does not seem to cause any impact. sure, let me remove it.","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":32,"context_line":"           \u0027PasswordMethod\u0027,"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"           \u0027Token\u0027,"},{"line_number":35,"context_line":"           \u0027TokenMethod\u0027,"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"           \u0027OidcAuthorizationCode\u0027,"},{"line_number":38,"context_line":"           \u0027OidcPassword\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_6a37dee3","line":35,"range":{"start_line":35,"start_character":24,"end_line":35,"end_character":25},"in_reply_to":"bae84128_f1612713","updated":"2016-06-22 03:21:53.000000000","message":"this was fixed a long time ago, rebase this patch https://github.com/openstack/keystoneauth/commit/f83cee1c6148bafa7f959f4420ef625775ea4a26","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"}],"keystoneauth1/identity/v3/tokenless_auth.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                 project_name\u003dNone,"},{"line_number":36,"context_line":"                 project_domain_id\u003dNone,"},{"line_number":37,"context_line":"                 project_domain_name\u003dNone,"},{"line_number":38,"context_line":"                 trust_id\u003dNone,"},{"line_number":39,"context_line":"                 reauthenticate\u003dTrue):"},{"line_number":40,"context_line":"        \"\"\"A init method for TokenlessAuth."},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_4f6dd403","line":38,"range":{"start_line":38,"start_character":17,"end_line":38,"end_character":30},"updated":"2016-06-22 03:21:53.000000000","message":"it takes a trust id? you don\u0027t use one anywhere below","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        :param string project_id: Project ID for project scoping."},{"line_number":49,"context_line":"        :param string project_name: Project name for project scoping."},{"line_number":50,"context_line":"        :param string project_domain_id: Project\u0027s domain ID for project."},{"line_number":51,"context_line":"        :param string project_domain_name: Project\u0027s domain name for project."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        self.auth_url \u003d auth_url"},{"line_number":54,"context_line":"        self.certfile \u003d certfile"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_8f77bcd3","line":51,"range":{"start_line":51,"start_character":0,"end_line":51,"end_character":77},"updated":"2016-06-22 03:21:53.000000000","message":"missing trust_id, assuming it takes one","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :param string project_domain_name: Project\u0027s domain name for project."},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        self.auth_url \u003d auth_url"},{"line_number":54,"context_line":"        self.certfile \u003d certfile"},{"line_number":55,"context_line":"        self.keyfile \u003d keyfile"},{"line_number":56,"context_line":"        self.cafile \u003d cafile"},{"line_number":57,"context_line":"        self.domain_id \u003d domain_id"},{"line_number":58,"context_line":"        self.domain_name \u003d domain_name"},{"line_number":59,"context_line":"        self.project_id \u003d project_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_0f18ec83","line":56,"range":{"start_line":54,"start_character":0,"end_line":56,"end_character":28},"updated":"2016-06-22 03:21:53.000000000","message":"are these needed? they are not used below","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        session."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        :param session: The session object that the auth_plugin belongs to."},{"line_number":74,"context_line":"        :type session: keystoneclient.session.Session"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        :returns: Headers that are set to authenticate a message or None for"},{"line_number":77,"context_line":"                  failure. Note that when checking this value that the empty"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_ef4e4095","line":74,"range":{"start_line":74,"start_character":23,"end_line":74,"end_character":37},"updated":"2016-06-22 03:21:53.000000000","message":"keystoneauth1* and use the :class: directive","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":105,"context_line":"            return None"},{"line_number":106,"context_line":"        return scope_headers"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def get_endpoint(self, session, interface\u003dNone, version\u003dNone, **kwargs):"},{"line_number":109,"context_line":"        \"\"\"Return an endpoint for the client."},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"        There are no required keyword arguments to ``get_endpoint`` as a plugin"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_8f25fcc3","line":108,"range":{"start_line":108,"start_character":36,"end_line":108,"end_character":45},"updated":"2016-06-22 03:21:53.000000000","message":"whats the point of passing in interface if it\u0027s not used, also it\u0027s not documented","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        determine the endpoint."},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param session: The session object that the auth_plugin belongs to."},{"line_number":116,"context_line":"        :type session: keystoneclient.session.Session"},{"line_number":117,"context_line":"        :param version: The version number required for this endpoint."},{"line_number":118,"context_line":"        :type version: tuple or str"},{"line_number":119,"context_line":"        :param str interface: what visibility the endpoint should have."}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_af55581e","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":53},"updated":"2016-06-22 03:21:53.000000000","message":"same comment as above","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        :param session: The session object that the auth_plugin belongs to."},{"line_number":116,"context_line":"        :type session: keystoneclient.session.Session"},{"line_number":117,"context_line":"        :param version: The version number required for this endpoint."},{"line_number":118,"context_line":"        :type version: tuple or str"},{"line_number":119,"context_line":"        :param str interface: what visibility the endpoint should have."},{"line_number":120,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_2f404856","line":117,"range":{"start_line":117,"start_character":15,"end_line":117,"end_character":22},"updated":"2016-06-22 03:21:53.000000000","message":"whats the point in passing in version if it\u0027s not used?","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"92b2b125131319a47baf886f85d089bbcef21800","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, auth_url,"},{"line_number":29,"context_line":"                 certfile\u003dNone,"},{"line_number":30,"context_line":"                 keyfile\u003dNone,"},{"line_number":31,"context_line":"                 cafile\u003dNone,"},{"line_number":32,"context_line":"                 domain_id\u003dNone,"},{"line_number":33,"context_line":"                 domain_name\u003dNone,"},{"line_number":34,"context_line":"                 project_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_384b48b2","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":29},"updated":"2016-02-25 14:16:11.000000000","message":"this may be passed as kwargs, if we want a general TokenlessAuth plugin. Or... This can be more a general abstract class that you can inherit from","commit_id":"4bf892c69b0a707ad8583e5715e0c6ad438d7419"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"e7f6a9347d096ce1b5e858d80d8b6612ec771f87","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def __init__(self, auth_url,"},{"line_number":29,"context_line":"                 certfile\u003dNone,"},{"line_number":30,"context_line":"                 keyfile\u003dNone,"},{"line_number":31,"context_line":"                 cafile\u003dNone,"},{"line_number":32,"context_line":"                 domain_id\u003dNone,"},{"line_number":33,"context_line":"                 domain_name\u003dNone,"},{"line_number":34,"context_line":"                 project_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_6896d295","line":31,"range":{"start_line":29,"start_character":0,"end_line":31,"end_character":29},"in_reply_to":"bae84128_384b48b2","updated":"2016-02-25 18:56:24.000000000","message":"yeah, you have a point here, let me give it more thoughts.","commit_id":"4bf892c69b0a707ad8583e5715e0c6ad438d7419"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"92b2b125131319a47baf886f85d089bbcef21800","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                 domain_name\u003dNone,"},{"line_number":34,"context_line":"                 project_id\u003dNone,"},{"line_number":35,"context_line":"                 project_name\u003dNone,"},{"line_number":36,"context_line":"                 project_domain_id\u003dNone,"},{"line_number":37,"context_line":"                 project_domain_name\u003dNone,"},{"line_number":38,"context_line":"                 trust_id\u003dNone,"},{"line_number":39,"context_line":"                 reauthenticate\u003dTrue):"},{"line_number":40,"context_line":"        \"\"\"A init method for TokenlessAuth."}],"source_content_type":"text/x-python","patch_set":3,"id":"bae84128_cb6d28ce","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":42},"updated":"2016-02-25 14:16:11.000000000","message":"don\u0027t we need to pass the user domain as well?","commit_id":"4bf892c69b0a707ad8583e5715e0c6ad438d7419"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"3e2f55a955bcbcc2600809c72fa3bd04a5df2755","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                 domain_name\u003dNone,"},{"line_number":34,"context_line":"                 project_id\u003dNone,"},{"line_number":35,"context_line":"                 project_name\u003dNone,"},{"line_number":36,"context_line":"                 project_domain_id\u003dNone,"},{"line_number":37,"context_line":"                 project_domain_name\u003dNone,"},{"line_number":38,"context_line":"                 trust_id\u003dNone,"},{"line_number":39,"context_line":"                 reauthenticate\u003dTrue):"},{"line_number":40,"context_line":"        \"\"\"A init method for TokenlessAuth."}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_7ee4c83a","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":42},"in_reply_to":"9aed3d3a_a8be1afd","updated":"2016-02-25 19:28:40.000000000","message":"I totally forgot that everything is done via mapping rules underneath","commit_id":"4bf892c69b0a707ad8583e5715e0c6ad438d7419"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"e7f6a9347d096ce1b5e858d80d8b6612ec771f87","unresolved":false,"context_lines":[{"line_number":33,"context_line":"                 domain_name\u003dNone,"},{"line_number":34,"context_line":"                 project_id\u003dNone,"},{"line_number":35,"context_line":"                 project_name\u003dNone,"},{"line_number":36,"context_line":"                 project_domain_id\u003dNone,"},{"line_number":37,"context_line":"                 project_domain_name\u003dNone,"},{"line_number":38,"context_line":"                 trust_id\u003dNone,"},{"line_number":39,"context_line":"                 reauthenticate\u003dTrue):"},{"line_number":40,"context_line":"        \"\"\"A init method for TokenlessAuth."}],"source_content_type":"text/x-python","patch_set":3,"id":"9aed3d3a_a8be1afd","line":37,"range":{"start_line":36,"start_character":0,"end_line":37,"end_character":42},"in_reply_to":"bae84128_cb6d28ce","updated":"2016-02-25 18:56:24.000000000","message":"no, user data is passed from the certificate\u0027s Subject name. like cn\u003d.., ou\u003d.., o\u003d..","commit_id":"4bf892c69b0a707ad8583e5715e0c6ad438d7419"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"eb8e4d09c31d62a9359a85c695e0c143567b028f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class BaseTokenlessAuth(plugin.BaseAuthPlugin):"},{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for X.509 Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_fc124e08","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":46},"updated":"2016-02-26 23:55:43.000000000","message":"mention this in the specific class","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45b68409ea391989d7ef94e24181ff0a592d1f77","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class BaseTokenlessAuth(plugin.BaseAuthPlugin):"},{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for X.509 Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_7cd75eed","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":46},"in_reply_to":"9aed3d3a_fc124e08","updated":"2016-02-27 00:14:11.000000000","message":"sure.","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"eb8e4d09c31d62a9359a85c695e0c143567b028f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, auth_url, **kwargs):"},{"line_number":143,"context_line":"        super(TokenlessAuth, self).__init__(auth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_9c04e2c0","line":143,"range":{"start_line":142,"start_character":0,"end_line":143,"end_character":63},"updated":"2016-02-26 23:55:43.000000000","message":"not doing much, right?","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"e61e305f5065a0bd6e236916b907a2af9d15e9b6","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, auth_url, **kwargs):"},{"line_number":143,"context_line":"        super(TokenlessAuth, self).__init__(auth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7af24918_08560f29","line":143,"range":{"start_line":142,"start_character":0,"end_line":143,"end_character":63},"in_reply_to":"9aed3d3a_50afd180","updated":"2016-03-01 18:27:45.000000000","message":"sorry, was at the RSA conference and did not get time to response;-)\nI was actually not sure what the generic parameters would be in the base class, it might even need the certs and key besides x509 as well. Therefore I did not create another abstract. But it might be a valid assumption to only pass certs and key in the x509 extended class and keep the others in the base class. Let me make the changes.","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d8156508eb655337642e67dccb9fadeedd5359a","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, auth_url, **kwargs):"},{"line_number":143,"context_line":"        super(TokenlessAuth, self).__init__(auth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_50afd180","line":143,"range":{"start_line":142,"start_character":0,"end_line":143,"end_character":63},"in_reply_to":"9aed3d3a_5c553a4e","updated":"2016-02-27 14:13:35.000000000","message":"ok... what I imagened was something like:\n\n  # Base abstract class that isn\u0027t aware about x509 details\n  class BaseTokenlessAuth(plugin.BaseAuthPlugin):\n        def __init__(self, auth_url,\n                 domain_id\u003dNone,\n                 domain_name\u003dNone,\n                 project_id\u003dNone,\n                 project_name\u003dNone,\n                 project_domain_id\u003dNone,\n                 project_domain_name\u003dNone,\n                 trust_id\u003dNone,\n                 reauthenticate\u003dTrue,\n                 **kwargs):\n\n  # x509 specific class\n  class X509TokenlessAuth(BaseTokenlessAuth):\n    def __init__(self, auth_url,\n                 certfile\u003dNone,\n                 keyfile\u003dNone,\n                 cafile\u003dNone,\n                 domain_id\u003dNone,\n                 domain_name\u003dNone,\n                 project_id\u003dNone,\n                 project_name\u003dNone,\n                 project_domain_id\u003dNone,\n                 project_domain_name\u003dNone,\n                 trust_id\u003dNone,\n                 reauthenticate\u003dTrue):\n     # Here I pass to BaseTokenlessAuth certfile, keyfile and cafile as kwargs","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45b68409ea391989d7ef94e24181ff0a592d1f77","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":140,"context_line":"    \"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, auth_url, **kwargs):"},{"line_number":143,"context_line":"        super(TokenlessAuth, self).__init__(auth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9aed3d3a_5c553a4e","line":143,"range":{"start_line":142,"start_character":0,"end_line":143,"end_character":63},"in_reply_to":"9aed3d3a_9c04e2c0","updated":"2016-02-27 00:14:11.000000000","message":"This basically just creates another abstract which is not much different from the earlier version but tries to use Kwargs as you suggested:-)\nThe tokenless auth here is simply enough. As you can see, all it needs is just to pass the scope info to the header and that\u0027s it;-)","commit_id":"d6d7088d7d969416d654014f740566ad47c17e83"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.project_domain_id \u003d project_domain_id"},{"line_number":63,"context_line":"        self.project_domain_name \u003d project_domain_name"},{"line_number":64,"context_line":"        self.trust_id \u003d trust_id"},{"line_number":65,"context_line":"        self.reauthenticate \u003d reauthenticate"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_headers(self, session, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Fetch authentication headers for message."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_3cce98b4","line":65,"range":{"start_line":65,"start_character":13,"end_line":65,"end_character":27},"updated":"2016-05-09 05:20:49.000000000","message":"reauthenticate is meaningless here. There is no token for you to re-fetch.\n\nsimilarly you don\u0027t seem to support trust-id","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.project_domain_id \u003d project_domain_id"},{"line_number":63,"context_line":"        self.project_domain_name \u003d project_domain_name"},{"line_number":64,"context_line":"        self.trust_id \u003d trust_id"},{"line_number":65,"context_line":"        self.reauthenticate \u003d reauthenticate"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def get_headers(self, session, **kwargs):"},{"line_number":68,"context_line":"        \"\"\"Fetch authentication headers for message."}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_d412ae61","line":65,"range":{"start_line":65,"start_character":13,"end_line":65,"end_character":27},"in_reply_to":"dab17558_3cce98b4","updated":"2016-06-17 00:24:06.000000000","message":"yep, that\u0027s right. They are both meaningless here. However, we will need to keep trust_id here in order to maintain the interface to the caller or it will causes an unexpected keyword argument \u0027trust_id\u0027","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if self.auth_url:"},{"line_number":128,"context_line":"            return \u0027%s/v3\u0027 % self.auth_url"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_7c6e6097","line":128,"range":{"start_line":128,"start_character":25,"end_line":128,"end_character":26},"updated":"2016-05-09 05:20:49.000000000","message":"I don\u0027t like this. You are explicitly writing a v3 plugin so you can expect that the auth_url already contains the v3 url. Only the generic plugins should try and figure out what url to use. \n\nWhat\u0027s the case where auth_url would not be defined?\n\nAlso do you want to do a check that it\u0027s asking for an identity url or something? If someone screws up and asks for the compute URL i\u0027d like it to fail.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":125,"context_line":"        \"\"\""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"        if self.auth_url:"},{"line_number":128,"context_line":"            return \u0027%s/v3\u0027 % self.auth_url"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_1f19a588","line":128,"range":{"start_line":128,"start_character":25,"end_line":128,"end_character":26},"in_reply_to":"dab17558_7c6e6097","updated":"2016-06-17 00:24:06.000000000","message":"I reuse most your get_endpoint code here from identity.base.BaseIdentityPlugin.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"class X509TokenlessAuth(BaseTokenlessAuth):"},{"line_number":134,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    This is for X.509 Tokenless Authentication. Scoped information"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_5cdefc3f","line":133,"range":{"start_line":133,"start_character":6,"end_line":133,"end_character":23},"updated":"2016-05-09 05:20:49.000000000","message":"I\u0027m not sure i agree with the split - I can see a use case for the base class but i would have said do it when you actually have something that wants to share the base class so you know what is going to be shareable. I see it was a comment that suggested this - can you make the base class private for now and we can make it public when we need it?","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        return None"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"class X509TokenlessAuth(BaseTokenlessAuth):"},{"line_number":134,"context_line":"    \"\"\"\"A plugin for authenticating with a client\u0027s X.509 certificate."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    This is for X.509 Tokenless Authentication. Scoped information"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_3f14614b","line":133,"range":{"start_line":133,"start_character":6,"end_line":133,"end_character":23},"in_reply_to":"dab17558_5cdefc3f","updated":"2016-06-17 00:24:06.000000000","message":"done.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.certfile \u003d certfile"},{"line_number":158,"context_line":"        self.keyfile \u003d keyfile"},{"line_number":159,"context_line":"        self.cafile \u003d cafile"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_bc68c888","line":159,"range":{"start_line":159,"start_character":13,"end_line":159,"end_character":19},"updated":"2016-05-09 05:20:49.000000000","message":"where are these consumed?\n\nsurely you want to do get_connection_params here? this is the usecase that method was designed for.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.certfile \u003d certfile"},{"line_number":158,"context_line":"        self.keyfile \u003d keyfile"},{"line_number":159,"context_line":"        self.cafile \u003d cafile"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_27198423","line":159,"range":{"start_line":159,"start_character":13,"end_line":159,"end_character":19},"in_reply_to":"dab17558_bc68c888","updated":"2016-06-17 00:24:06.000000000","message":"Done. get_connnecton_params is overridden in this class.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a8ef7de8bb10881f16e0f8976dbf289a80303fcf","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :param string project_domain_id: Project\u0027s domain ID for project."},{"line_number":52,"context_line":"        :param string project_domain_name: Project\u0027s domain name for project."},{"line_number":53,"context_line":"        :param string trust_id: It\u0027s not used by this authentication but used"},{"line_number":54,"context_line":"                                to maintain the interface to the caller."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        self.auth_url \u003d auth_url"},{"line_number":57,"context_line":"        self.domain_id \u003d domain_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_aac43640","line":54,"range":{"start_line":54,"start_character":35,"end_line":54,"end_character":43},"updated":"2016-06-20 01:55:01.000000000","message":"you\u0027re into your own realm of plugins here, there\u0027s no need to maintain the interface. If you don\u0027t use it don\u0027t have it.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        :param string project_domain_id: Project\u0027s domain ID for project."},{"line_number":52,"context_line":"        :param string project_domain_name: Project\u0027s domain name for project."},{"line_number":53,"context_line":"        :param string trust_id: It\u0027s not used by this authentication but used"},{"line_number":54,"context_line":"                                to maintain the interface to the caller."},{"line_number":55,"context_line":"        \"\"\""},{"line_number":56,"context_line":"        self.auth_url \u003d auth_url"},{"line_number":57,"context_line":"        self.domain_id \u003d domain_id"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_48f2d0d3","line":54,"range":{"start_line":54,"start_character":35,"end_line":54,"end_character":43},"in_reply_to":"5a9d85d2_aac43640","updated":"2016-06-22 00:33:37.000000000","message":"done. By inheriting from loading.BaseLoader, it can be removed.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a8ef7de8bb10881f16e0f8976dbf289a80303fcf","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                LOG.warning(\u0027Plugin cannot return an endpoint without \u0027"},{"line_number":143,"context_line":"                            \u0027knowing the service type that is required. Add \u0027"},{"line_number":144,"context_line":"                            \u0027service_type to endpoint filtering data.\u0027)"},{"line_number":145,"context_line":"                return None"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if not self.auth_url:"},{"line_number":148,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_6a3fee25","line":145,"updated":"2016-06-20 01:55:01.000000000","message":"maybe here we do \n\nif not (interface is plugin.AUTH_INTERFACE or interface.lower() \u003d\u003d \u0027identity\u0027): \n    return None \n\nbecause we won\u0027t ever support looking up like nova urls with this plugin.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                LOG.warning(\u0027Plugin cannot return an endpoint without \u0027"},{"line_number":143,"context_line":"                            \u0027knowing the service type that is required. Add \u0027"},{"line_number":144,"context_line":"                            \u0027service_type to endpoint filtering data.\u0027)"},{"line_number":145,"context_line":"                return None"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if not self.auth_url:"},{"line_number":148,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_659f1704","line":145,"in_reply_to":"5a9d85d2_6a3fee25","updated":"2016-06-22 00:33:37.000000000","message":"This condition can never be valid in my case and I thought interface should either be \u0027admin\u0027, \u0027internal\u0027 or \u0027public\u0027. I\u0027m not sure how interface would be set to identity.\n\nFor now, I only have a simple validation to make sure auth_url is passed.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4488d909d8c9e5d9365fe81a04c9a711bfadcf43","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                LOG.warning(\u0027Plugin cannot return an endpoint without \u0027"},{"line_number":143,"context_line":"                            \u0027knowing the service type that is required. Add \u0027"},{"line_number":144,"context_line":"                            \u0027service_type to endpoint filtering data.\u0027)"},{"line_number":145,"context_line":"                return None"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        if not self.auth_url:"},{"line_number":148,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_1d365a03","line":145,"in_reply_to":"5a9d85d2_6a3fee25","updated":"2016-06-20 16:08:03.000000000","message":"Yes for now. But certificate-based auth can be extended to support service-to-service auth in the future.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a8ef7de8bb10881f16e0f8976dbf289a80303fcf","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                        \u0027Fallback to using that endpoint as the base url.\u0027,"},{"line_number":172,"context_line":"                        url)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            url \u003d disc.url_for(version)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return url"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_4ace725b","line":174,"range":{"start_line":174,"start_character":22,"end_line":174,"end_character":23},"updated":"2016-06-20 01:55:01.000000000","message":"we\u0027ll have to figure out how we can abstract this so you don\u0027t need to copy it.\n\nSo i looked at my comments from the last review and said i didn\u0027t like returning auth_url + \u0027/v3/\u0027. I *think* for this plugin what we really want is to just return self.auth_url for get_endpoint and auth_url should already have a v3 suffix. There\u0027s no service catalog or anything here we can lookup so it\u0027s reasonable to just have the URL passed through as config.\n\nSorry i didn\u0027t make that clear.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                        \u0027Fallback to using that endpoint as the base url.\u0027,"},{"line_number":172,"context_line":"                        url)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            url \u003d disc.url_for(version)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return url"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_855b2354","line":174,"range":{"start_line":174,"start_character":22,"end_line":174,"end_character":23},"in_reply_to":"5a9d85d2_3026ddba","updated":"2016-06-22 00:33:37.000000000","message":"So we just assume the versioned auth_url is passed from the config.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4488d909d8c9e5d9365fe81a04c9a711bfadcf43","unresolved":false,"context_lines":[{"line_number":171,"context_line":"                        \u0027Fallback to using that endpoint as the base url.\u0027,"},{"line_number":172,"context_line":"                        url)"},{"line_number":173,"context_line":"        else:"},{"line_number":174,"context_line":"            url \u003d disc.url_for(version)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"        return url"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_3026ddba","line":174,"range":{"start_line":174,"start_character":22,"end_line":174,"end_character":23},"in_reply_to":"5a9d85d2_4ace725b","updated":"2016-06-20 16:08:03.000000000","message":"I thought we are going with versionless auth url right? The effective url is built based on version discovery correct? If we are expecting a versioned auth url then I agree we don\u0027t need to massage it.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"        self.certfile \u003d certfile"},{"line_number":251,"context_line":"        self.keyfile \u003d keyfile"},{"line_number":252,"context_line":"        self.cafile \u003d cafile"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_connection_params(self, session, **kwargs):"},{"line_number":255,"context_line":"        \"\"\"Return any additional connection parameters required for the plugin."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_a50c5f43","line":252,"range":{"start_line":252,"start_character":22,"end_line":252,"end_character":28},"updated":"2016-06-22 00:33:37.000000000","message":"All the cert and key files here are actually not needed for the plugin as they are only used in the request authenticaton.\n\nSo they will be removed from here.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.keyfile \u003d keyfile"},{"line_number":252,"context_line":"        self.cafile \u003d cafile"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"    def get_connection_params(self, session, **kwargs):"},{"line_number":255,"context_line":"        \"\"\"Return any additional connection parameters required for the plugin."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        :param session: The session object that the auth_plugin belongs to."}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_a813965b","line":254,"range":{"start_line":254,"start_character":53,"end_line":254,"end_character":55},"updated":"2016-06-22 00:33:37.000000000","message":"We have no additional connection parameters to return, so this method does not need to be overridden.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: The session object that the auth_plugin belongs to."},{"line_number":67,"context_line":"        :type session: keystoneclient.session.Session"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"},{"line_number":70,"context_line":"                  failure. Note that when checking this value that the empty"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_aabb860d","line":67,"range":{"start_line":67,"start_character":23,"end_line":67,"end_character":53},"updated":"2016-06-22 03:26:31.000000000","message":"keystoneauth1* and use the :class: directive","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: The session object that the auth_plugin belongs to."},{"line_number":67,"context_line":"        :type session: keystoneclient.session.Session"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"},{"line_number":70,"context_line":"                  failure. Note that when checking this value that the empty"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_350d0738","line":67,"range":{"start_line":67,"start_character":23,"end_line":67,"end_character":53},"in_reply_to":"3aaa91ec_aabb860d","updated":"2016-06-22 20:22:28.000000000","message":"good catch. done.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            return None"},{"line_number":98,"context_line":"        return scope_headers"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_endpoint(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":101,"context_line":"                     region_name\u003dNone, service_name\u003dNone, version\u003dNone,"},{"line_number":102,"context_line":"                     **kwargs):"},{"line_number":103,"context_line":"        \"\"\"Return a valid endpoint for a service."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        If a valid token is not present then a new one will be fetched using"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_aa5266db","line":102,"range":{"start_line":100,"start_character":27,"end_line":102,"end_character":29},"updated":"2016-06-22 03:26:31.000000000","message":"none of these arguments are used","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            return None"},{"line_number":98,"context_line":"        return scope_headers"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def get_endpoint(self, session, service_type\u003dNone, interface\u003dNone,"},{"line_number":101,"context_line":"                     region_name\u003dNone, service_name\u003dNone, version\u003dNone,"},{"line_number":102,"context_line":"                     **kwargs):"},{"line_number":103,"context_line":"        \"\"\"Return a valid endpoint for a service."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"        If a valid token is not present then a new one will be fetched using"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_15056b79","line":102,"range":{"start_line":100,"start_character":27,"end_line":102,"end_character":29},"in_reply_to":"3aaa91ec_aa5266db","updated":"2016-06-22 20:22:28.000000000","message":"yep, removed all the unused ones.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"7aeabfdd95f8f2afd7f301e56841f13e8533a6f2","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        the session and kwargs."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :param session: A session object that can be used for communication."},{"line_number":109,"context_line":"        :type session: keystoneauth1.session.Session"},{"line_number":110,"context_line":"        :param string service_type: The type of service to lookup the endpoint"},{"line_number":111,"context_line":"                                    for. This plugin will return None (failure)"},{"line_number":112,"context_line":"                                    if service_type is not provided."}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_2a467623","line":109,"range":{"start_line":109,"start_character":23,"end_line":109,"end_character":52},"updated":"2016-06-22 03:26:31.000000000","message":"use the :class: directive","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        the session and kwargs."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :param session: A session object that can be used for communication."},{"line_number":109,"context_line":"        :type session: keystoneauth1.session.Session"},{"line_number":110,"context_line":"        :param string service_type: The type of service to lookup the endpoint"},{"line_number":111,"context_line":"                                    for. This plugin will return None (failure)"},{"line_number":112,"context_line":"                                    if service_type is not provided."}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_55fff366","line":109,"range":{"start_line":109,"start_character":23,"end_line":109,"end_character":52},"in_reply_to":"3aaa91ec_2a467623","updated":"2016-06-22 20:22:28.000000000","message":"done.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7ea4312a1e83d420b51d9e33324265c4da6ad01a","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        :return: A valid endpoint URL or None if not available."},{"line_number":129,"context_line":"        :rtype: string or None"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        if not self.auth_url:"},{"line_number":132,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"},{"line_number":133,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_bec58c5c","line":130,"updated":"2016-06-22 03:22:37.000000000","message":"I\u0027m interested here why you would in future want this plugin to support services other than identity? My understanding of the use of this plugin was for auth_token middleware to validate user tokens?\n\nIf you want more than that you will need to figure out some way of doing a service catalog, not just doing version discovery.\n\n\n-- edit: \n\ntalked to gyee on IRC. I\u0027m not sure how this will work yet, but for now i think you should check that service_type is either identity or AUTH_INTERFACE and only return auth_url there. If we figure out some way of doing catalog for other things later we can fix it then.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"5d606e68445452da7c457be69155a7aee3935d68","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        :return: A valid endpoint URL or None if not available."},{"line_number":129,"context_line":"        :rtype: string or None"},{"line_number":130,"context_line":"        \"\"\""},{"line_number":131,"context_line":"        if not self.auth_url:"},{"line_number":132,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"},{"line_number":133,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_b09bc571","line":130,"in_reply_to":"3aaa91ec_bec58c5c","updated":"2016-06-22 20:22:28.000000000","message":"Thanks Guang for the clarification! Added the checker.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7ea4312a1e83d420b51d9e33324265c4da6ad01a","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"},{"line_number":133,"context_line":"            return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        return self.auth_url"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_dec85877","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":14},"updated":"2016-06-22 03:22:37.000000000","message":"returning none here will already raise an error so no need for the warning.\n\nSo to continue the discussion from last patch. The convention we\u0027ve gone by is that if a plugin starts with either v2 or v3 then it expects the v2 or v3 url to be passed. If you pass it the \"password\" plugin or other \u0027generic\u0027 plugin then it works on the unversioned url and does discovery to figure out the correct versioned url and the creates the real plugin (like v3password) with that versioned url. \n\nSo because you are claiming v3x509tokenlessauth it\u0027s fine for you to expect a v3 url. \n\nI had a play with the generic plugins and they make a number of assumptions about how you fetch tokens that don\u0027t work here so it might be hard to create an equivalent generic plugin if you want that.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"be270a3daa3623a4f5dca7a7dd4c8a1d13e6870c","unresolved":false,"context_lines":[{"line_number":132,"context_line":"            LOG.warning(\u0027auth_url is not defined.\u0027)"},{"line_number":133,"context_line":"            return None"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        return self.auth_url"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_3fc4765d","line":135,"range":{"start_line":135,"start_character":8,"end_line":135,"end_character":14},"in_reply_to":"3aaa91ec_dec85877","updated":"2016-06-24 00:45:33.000000000","message":"Are you creating a different plugin interface? If so, can you please let me know the patch #?","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"7ea4312a1e83d420b51d9e33324265c4da6ad01a","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":152,"context_line":"                                And it has to be a versioned URL."},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        super(X509TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_feba74bf","line":154,"updated":"2016-06-22 03:22:37.000000000","message":"wait - what happened to actually returning the certificates to establish the client cert connection?","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8eed14a78913cf52bdacb411e46dbfec5399b9c9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":152,"context_line":"                                And it has to be a versioned URL."},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        super(X509TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_60cc9e6a","line":154,"in_reply_to":"3aaa91ec_5f198221","updated":"2016-06-24 02:17:51.000000000","message":"It depends - it can be done both ways. As a session parameter or an auth parameter. If you\u0027re going to call it X509 tokenless auth though it should really take certificates - otherwise you should just expose the base class as v3tokenless auth because the subclass isn\u0027t doing anything.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"be270a3daa3623a4f5dca7a7dd4c8a1d13e6870c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":152,"context_line":"                                And it has to be a versioned URL."},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        super(X509TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3aaa91ec_5f198221","line":154,"in_reply_to":"3aaa91ec_feba74bf","updated":"2016-06-24 00:45:33.000000000","message":"We don\u0027t need to actually. The SSL session is establish by the Session. This plugin is merely conveying the scope information via the headers. It doesn\u0027t actually handle any certificates.","commit_id":"524810ded32e6af60688f724c7a699978bfbe748"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b06101abfc6a24236cf59130b7cc6d6936444aa8","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if not self.auth_url:"},{"line_number":116,"context_line":"            return None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return self.auth_url"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_e006cecc","line":118,"updated":"2016-06-24 02:21:33.000000000","message":"nit: these 3 lines are the same thing. actually the whole thing is just: \n\nif (service_type is plugin.AUTH_INTERFACE or service_type.lower() \u003d\u003d \u0027identity\u0027): \n    return self.auth_url","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"ba91f911afd29421b70939fcc18e4f6b711d7cbb","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if not self.auth_url:"},{"line_number":116,"context_line":"            return None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return self.auth_url"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_ef27d9b3","line":118,"in_reply_to":"3aaa91ec_e006cecc","updated":"2016-06-24 04:54:36.000000000","message":"what do you return if it\u0027s not that case?","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if not self.auth_url:"},{"line_number":116,"context_line":"            return None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return self.auth_url"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_4edb6f1b","line":118,"in_reply_to":"3aaa91ec_e006cecc","updated":"2016-06-24 22:40:16.000000000","message":"yep, this would be cleaner. done.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        if not self.auth_url:"},{"line_number":116,"context_line":"            return None"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        return self.auth_url"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"class X509TokenlessAuth(_BaseTokenlessAuth):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_cefd9f6f","line":118,"in_reply_to":"3aaa91ec_ef27d9b3","updated":"2016-06-24 22:40:16.000000000","message":"will be None.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b06101abfc6a24236cf59130b7cc6d6936444aa8","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":135,"context_line":"                                And it has to be a versioned URL."},{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        super(X509TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_a0c68665","line":137,"range":{"start_line":137,"start_character":14,"end_line":137,"end_character":31},"updated":"2016-06-24 02:21:33.000000000","message":"I added a comment to the previous version. Either we need to handle x509 in this plugin or we just call it tokenless auth and assume that something else is handling the authentication.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"a8b13b1a8be6cfb70bddc57d95e83c19f6f9c87e","unresolved":false,"context_lines":[{"line_number":134,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":135,"context_line":"                                And it has to be a versioned URL."},{"line_number":136,"context_line":"        \"\"\""},{"line_number":137,"context_line":"        super(X509TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3aaa91ec_6ef46b5a","line":137,"range":{"start_line":137,"start_character":14,"end_line":137,"end_character":31},"in_reply_to":"3aaa91ec_a0c68665","updated":"2016-06-24 22:40:16.000000000","message":"Done. We just call it TokenlessAuth here.","commit_id":"a4ab3fabdec512d4a04ce0ae2681b6c75a9af807"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d utils.get_logger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"__all__ \u003d (\u0027TokenlessAuth\u0027, \u0027_BaseTokenlessAuth\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_c363dcaf","line":21,"range":{"start_line":21,"start_character":28,"end_line":21,"end_character":48},"updated":"2016-06-29 22:33:29.000000000","message":"why exporting an internal symbol?","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"84510786db4f4721247ddefe8cdd7a8a67dc7921","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d utils.get_logger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"__all__ \u003d (\u0027TokenlessAuth\u0027, \u0027_BaseTokenlessAuth\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_eff01d00","line":21,"range":{"start_line":21,"start_character":28,"end_line":21,"end_character":48},"in_reply_to":"3aaa91ec_81cb53a3","updated":"2016-07-01 13:20:55.000000000","message":"Let\u0027s worry about the future when we actually need it rather than making the code more complicated now.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d utils.get_logger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"__all__ \u003d (\u0027TokenlessAuth\u0027, \u0027_BaseTokenlessAuth\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_81cb53a3","line":21,"range":{"start_line":21,"start_character":28,"end_line":21,"end_character":48},"in_reply_to":"3aaa91ec_c363dcaf","updated":"2016-07-01 00:36:00.000000000","message":"So ... here are some earlier discussions to come up with this approach -\n\nwith Rodrigo, we agreed on having a base class can be a good abstract for other tokenless classes to extend from in the future.\n\nwith Jamie, he did not like base class abstraction but agreed on renaming the base class as private and change it to public when we really it.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"f0f873c77a902059bda94d5738f640f48f92e8e3","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d utils.get_logger(__name__)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"__all__ \u003d (\u0027TokenlessAuth\u0027, \u0027_BaseTokenlessAuth\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":13,"id":"1aa78d24_51ef54b0","line":21,"range":{"start_line":21,"start_character":28,"end_line":21,"end_character":48},"in_reply_to":"3aaa91ec_eff01d00","updated":"2016-07-01 23:45:47.000000000","message":"sure. done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":25,"context_line":"class _BaseTokenlessAuth(plugin.BaseAuthPlugin):"},{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with Tokenless Auth."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_a35210dc","line":25,"updated":"2016-06-29 22:33:29.000000000","message":"why is this extra class needed? Seems like it\u0027s just making things more complicated.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":25,"context_line":"class _BaseTokenlessAuth(plugin.BaseAuthPlugin):"},{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with Tokenless Auth."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_21541fc8","line":25,"in_reply_to":"3aaa91ec_a35210dc","updated":"2016-07-01 00:36:00.000000000","message":"it\u0027s in the earlier comments.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with Tokenless Auth."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_03dfa43a","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":21},"updated":"2016-06-29 22:33:29.000000000","message":"change \",\" to \" and\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with Tokenless Auth."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_43e52c07","line":29,"range":{"start_line":29,"start_character":30,"end_line":29,"end_character":32},"updated":"2016-06-29 22:33:29.000000000","message":"change \"Id\" to \"ID\"","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    \"\"\"A base plugin for authenticating with Tokenless Auth."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."},{"line_number":32,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_815993ff","line":29,"range":{"start_line":29,"start_character":20,"end_line":29,"end_character":21},"in_reply_to":"3aaa91ec_03dfa43a","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_03b684f8","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":6},"updated":"2016-06-29 22:33:29.000000000","message":"what is \"it\" referring to?","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    This is for generic Tokenless Authentication. Scoped information"},{"line_number":29,"context_line":"    like domain name, project Id will be passed in the headers and"},{"line_number":30,"context_line":"    it will be authenticated based on the provided HTTPS certificate"},{"line_number":31,"context_line":"    along with the scope information."},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_3730dd55","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":6},"in_reply_to":"3aaa91ec_03b684f8","updated":"2016-07-01 00:36:00.000000000","message":"token validation request.\n\nIt\u0027s added.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_233e208b","line":66,"updated":"2016-06-29 22:33:29.000000000","message":"The type of the parameter should be documented using\n\n :type session: keystoneauth1.session.Session\n\nThis applies to all these docs.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_927a7f75","line":66,"in_reply_to":"3aaa91ec_233e208b","updated":"2016-07-01 00:36:00.000000000","message":"there are most of the docs using :type, but there are some using :class and per Steve\u0027s earlier comment, :class should be used. \n\nso .. I am going to keep it here unless you think I should really change it.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"87bb63afa738bb93c524a16bc4ad66f3ed3340e0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_952d2600","line":66,"in_reply_to":"3aaa91ec_35db927f","updated":"2016-07-01 14:04:57.000000000","message":"In that case we needed to use :class: with :type: because it\u0027s not just a single class being referenced. It\u0027s got \"str or keystoneclient.v3.domains.Domain\". If it was just \"keystoneclient.v3.domains.Domain\" then no :class: would be needed.\n\nThe sphinx docs don\u0027t really say what you\u0027re supposed to work when two types can be returned but this is what works.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9f962a47c4a21dea3fc227a1889e79deb07813d3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_35db927f","line":66,"in_reply_to":"3aaa91ec_6f18ad1f","updated":"2016-07-01 13:55:28.000000000","message":"my bad about the extra :py: stuff, i was going off of:\n\nhttps://github.com/openstack/python-keystoneclient/blob/d97d92b4539263cbf6b6a3130211ad35cda47e0d/keystoneclient/v3/projects.py#L71-L82\n\nwhich uses :class:`\u003cclassPathAndName\u003e` and the docs are generated just fine, but i\u0027d trust Brant, he knows this stuff much more than i do.\n\nFWIW, you can look at the generated docs offline with: tox -e docs, they are also published, and currently don\u0027t look so great :( \n\nhttp://docs-draft.openstack.org/05/283905/14/check/gate-keystoneauth-docs/3ff4962//doc/build/html/api/keystoneauth1.identity.v3.html#module-keystoneauth1.identity.v3.tokenless_auth","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"a618e7414d0596f713969b9bf194e8d194af429e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_6f18ad1f","line":66,"in_reply_to":"3aaa91ec_927a7f75","updated":"2016-07-01 13:22:40.000000000","message":"I don\u0027t know where steve is getting that from. Use\n\n :type session: keystoneauth1.session.Session\n\nThe docs show how to do it: http://www.sphinx-doc.org/en/stable/domains.html#info-field-lists","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"f0f873c77a902059bda94d5738f640f48f92e8e3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        tokenless auth scope headers if token is not provided in the"},{"line_number":64,"context_line":"        session."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        :param session: :py:class: `keystoneauth1.session.Session`"},{"line_number":67,"context_line":"                The session object that the auth_plugin belongs to."},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        :returns: Headers that are set to authenticate a message or None for"}],"source_content_type":"text/x-python","patch_set":13,"id":"1aa78d24_7149b0d0","line":66,"in_reply_to":"3aaa91ec_952d2600","updated":"2016-07-01 23:45:47.000000000","message":"makes sense. so changed back to just use :type in this case.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \"\"\"A init method for TokenlessAuth."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":132,"context_line":"                                And it has to be a versioned URL."},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        super(TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_239c600d","line":132,"updated":"2016-06-29 22:33:29.000000000","message":"The documentation should say what happens if it\u0027s not a versioned URL.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \"\"\"A init method for TokenlessAuth."},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":132,"context_line":"                                And it has to be a versioned URL."},{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        super(TokenlessAuth, self).__init__(auth_url\u003dauth_url, **kwargs)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_72839303","line":132,"in_reply_to":"3aaa91ec_239c600d","updated":"2016-07-01 00:36:00.000000000","message":"\u0027resource not found 404\u0027 is added there.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"e56b4b9e5ce3f6ae64701dafed924458754fc97b","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\"A init method for TokenlessAuth."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":42,"context_line":"                                And it has to be a versioned URL or it will"},{"line_number":43,"context_line":"                                cause \u0027resource not found 404\u0027."},{"line_number":44,"context_line":"        :param string domain_id: Domain ID for domain scoping."},{"line_number":45,"context_line":"        :param string domain_name: Domain name for domain scoping."},{"line_number":46,"context_line":"        :param string project_id: Project ID for project scoping."}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_ba2bed32","line":43,"range":{"start_line":42,"start_character":32,"end_line":43,"end_character":63},"updated":"2016-07-02 02:56:14.000000000","message":"suggested rewrite: The URL must include a version or any request will result in a 404 NotFound error.","commit_id":"7aca3b5349d8f4aa678f0cf5441aa5cc0ebaed8f"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"441907d4a719cba2c33d9e18ea690911a9299710","unresolved":false,"context_lines":[{"line_number":39,"context_line":"        \"\"\"A init method for TokenlessAuth."},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        :param string auth_url: Identity service endpoint for authentication."},{"line_number":42,"context_line":"                                And it has to be a versioned URL or it will"},{"line_number":43,"context_line":"                                cause \u0027resource not found 404\u0027."},{"line_number":44,"context_line":"        :param string domain_id: Domain ID for domain scoping."},{"line_number":45,"context_line":"        :param string domain_name: Domain name for domain scoping."},{"line_number":46,"context_line":"        :param string project_id: Project ID for project scoping."}],"source_content_type":"text/x-python","patch_set":15,"id":"1aa78d24_04f18c95","line":43,"range":{"start_line":42,"start_character":32,"end_line":43,"end_character":63},"in_reply_to":"1aa78d24_ba2bed32","updated":"2016-07-06 00:10:32.000000000","message":"This is a better one!! thanks. Got it changed.","commit_id":"7aca3b5349d8f4aa678f0cf5441aa5cc0ebaed8f"}],"keystoneauth1/loading/_plugins/identity/v3.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @property"},{"line_number":132,"context_line":"    def plugin_class(self):"},{"line_number":133,"context_line":"        return identity.V3X509TokenlessAuth"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_dc778c38","line":133,"range":{"start_line":133,"start_character":15,"end_line":133,"end_character":23},"updated":"2016-05-09 05:20:49.000000000","message":"Didn\u0027t we already land support for tokenless auth in auth_token middleware? If so there\u0027s no reason to make this loadable as we can just load the class from there.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    @property"},{"line_number":132,"context_line":"    def plugin_class(self):"},{"line_number":133,"context_line":"        return identity.V3X509TokenlessAuth"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_07e1e89a","line":133,"range":{"start_line":133,"start_character":15,"end_line":133,"end_character":23},"in_reply_to":"dab17558_dc778c38","updated":"2016-06-17 00:24:06.000000000","message":"no, we have not landed anything for auth_token middleware yet.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a8ef7de8bb10881f16e0f8976dbf289a80303fcf","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class X509TokenlessAuth(loading.BaseV3Loader):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @property"},{"line_number":179,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_0a88eae6","line":176,"range":{"start_line":176,"start_character":32,"end_line":176,"end_character":44},"updated":"2016-06-20 01:55:01.000000000","message":"ah, now i understand the trust_id in __init__. \n\nSo this is largely safe but i just don\u0027t think i\u0027d bother. In the same way you don\u0027t inherit from V3BaseAuth don\u0027t inherit from BaseV3Loader. Those two classes are really intended to be used in conjunction. \n\nI would inherit from loading.BaseLoader and define/copy all the options you actually need into your own get_options().","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"4488d909d8c9e5d9365fe81a04c9a711bfadcf43","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class X509TokenlessAuth(loading.BaseV3Loader):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @property"},{"line_number":179,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_10d5a142","line":176,"range":{"start_line":176,"start_character":32,"end_line":176,"end_character":44},"in_reply_to":"5a9d85d2_0a88eae6","updated":"2016-06-20 16:08:03.000000000","message":"Make sense. I think Sam was going by this\n\nhttps://github.com/openstack/keystoneauth/blob/master/doc/source/authentication-plugins.rst#creating-a-custom-plugin\n\nMaybe we need to update our doc to advice on special conditions?","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class X509TokenlessAuth(loading.BaseV3Loader):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @property"},{"line_number":179,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"5a9d85d2_93e9921d","line":176,"range":{"start_line":176,"start_character":32,"end_line":176,"end_character":44},"in_reply_to":"5a9d85d2_10d5a142","updated":"2016-06-22 00:33:37.000000000","message":"totally makes sense. I have my class inherited from loading.BaseLoader directly now.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"47e1c836759a27eafc3a926418cf9f223a86da77","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class TokenlessAuth(loading.BaseLoader):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @property"},{"line_number":179,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_c00f1c35","line":176,"range":{"start_line":176,"start_character":20,"end_line":176,"end_character":38},"updated":"2016-06-25 02:32:35.000000000","message":"I just realized this is the same arguments as BaseV3Loader, without the trust ID - can we not reuse it and remove the trust option? I forgot that the user bits are not included in baseV3loader: https://github.com/openstack/keystoneauth/blob/master/keystoneauth1/loading/identity.py#L65-L88","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"ef985a73bb97517c52c0969f6d2844a1d6078a67","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"class TokenlessAuth(loading.BaseLoader):"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    @property"},{"line_number":179,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_8a451944","line":176,"range":{"start_line":176,"start_character":20,"end_line":176,"end_character":38},"in_reply_to":"3aaa91ec_c00f1c35","updated":"2016-06-27 06:07:06.000000000","message":"I got this changed. Because at this point tokenless auth is not really a v3 plugin - it\u0027s just happens to use the v3 url i figured it was better to define just the options that make sense here.\n\nThere\u0027s other stuff like audit ids that might eventualyl need to be added here that are not v3 base.","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class TokenlessAuth(loading.BaseLoader):"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @property"},{"line_number":180,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_80438aae","line":177,"range":{"start_line":177,"start_character":28,"end_line":177,"end_character":38},"updated":"2016-06-29 22:33:29.000000000","message":"shouldn\u0027t this be BaseV3Loader ?","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        return super(TOTP, self).load_from_options(**kwargs)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"class TokenlessAuth(loading.BaseLoader):"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @property"},{"line_number":180,"context_line":"    def plugin_class(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_32090b96","line":177,"range":{"start_line":177,"start_character":28,"end_line":177,"end_character":38},"in_reply_to":"3aaa91ec_80438aae","updated":"2016-07-01 00:36:00.000000000","message":"The difference is that BaseV3Loader requires one extra option \u0027trust_id\" but TokelessAuth does not need it.\n\nper discussions with Jamie, we just extend directly from BaseLoader and add all the options we need here.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                (kwargs.get(\u0027project_name\u0027) and"},{"line_number":207,"context_line":"                    not (kwargs.get(\u0027project_domain_name\u0027) or"},{"line_number":208,"context_line":"                         kwargs.get(\u0027project_domain_id\u0027)))):"},{"line_number":209,"context_line":"            m \u003d \"You need to provide either a domain name, domain id, \" \\"},{"line_number":210,"context_line":"                \"project_id or project name.\"  \\"},{"line_number":211,"context_line":"                \"If you have provided a project_name. In the V3 identity API a \" \\"},{"line_number":212,"context_line":"                \"project_name is only unique within a domain so you must \" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_00467a7a","line":209,"range":{"start_line":209,"start_character":71,"end_line":209,"end_character":73},"updated":"2016-06-29 22:33:29.000000000","message":"prefer using () to \\ to continue lines.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                (kwargs.get(\u0027project_name\u0027) and"},{"line_number":207,"context_line":"                    not (kwargs.get(\u0027project_domain_name\u0027) or"},{"line_number":208,"context_line":"                         kwargs.get(\u0027project_domain_id\u0027)))):"},{"line_number":209,"context_line":"            m \u003d \"You need to provide either a domain name, domain id, \" \\"},{"line_number":210,"context_line":"                \"project_id or project name.\"  \\"},{"line_number":211,"context_line":"                \"If you have provided a project_name. In the V3 identity API a \" \\"},{"line_number":212,"context_line":"                \"project_name is only unique within a domain so you must \" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_d256c75a","line":209,"range":{"start_line":209,"start_character":71,"end_line":209,"end_character":73},"in_reply_to":"3aaa91ec_00467a7a","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                    not (kwargs.get(\u0027project_domain_name\u0027) or"},{"line_number":208,"context_line":"                         kwargs.get(\u0027project_domain_id\u0027)))):"},{"line_number":209,"context_line":"            m \u003d \"You need to provide either a domain name, domain id, \" \\"},{"line_number":210,"context_line":"                \"project_id or project name.\"  \\"},{"line_number":211,"context_line":"                \"If you have provided a project_name. In the V3 identity API a \" \\"},{"line_number":212,"context_line":"                \"project_name is only unique within a domain so you must \" \\"},{"line_number":213,"context_line":"                \"also provide either a project_domain_id or \" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_003ddadc","line":210,"range":{"start_line":210,"start_character":24,"end_line":210,"end_character":25},"updated":"2016-06-29 22:33:29.000000000","message":"the message should use _ or space consistently.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                    not (kwargs.get(\u0027project_domain_name\u0027) or"},{"line_number":208,"context_line":"                         kwargs.get(\u0027project_domain_id\u0027)))):"},{"line_number":209,"context_line":"            m \u003d \"You need to provide either a domain name, domain id, \" \\"},{"line_number":210,"context_line":"                \"project_id or project name.\"  \\"},{"line_number":211,"context_line":"                \"If you have provided a project_name. In the V3 identity API a \" \\"},{"line_number":212,"context_line":"                \"project_name is only unique within a domain so you must \" \\"},{"line_number":213,"context_line":"                \"also provide either a project_domain_id or \" \\"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_52f01767","line":210,"range":{"start_line":210,"start_character":24,"end_line":210,"end_character":25},"in_reply_to":"3aaa91ec_003ddadc","updated":"2016-07-01 00:36:00.000000000","message":"good catch. done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"}],"keystoneauth1/tests/unit/identity/test_tokenless_auth.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                    project_name\u003dproject_name)"},{"line_number":95,"context_line":"        self.assertIsNone(auth.get_headers(session))"},{"line_number":96,"context_line":"        self.assertRaises(exceptions.AuthorizationFailure,"},{"line_number":97,"context_line":"                          session.get, self.TEST_URL, authenticated\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"dab17558_da294b39","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":26},"updated":"2016-05-09 05:20:49.000000000","message":"There\u0027s no test to make sure the certificate is actually passed. \n\nI just pushed a requests-mock 1.0 that will allow you to test that without having to mock the requests interface directly. I haven\u0027t done a requirements bump yet.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                    project_name\u003dproject_name)"},{"line_number":95,"context_line":"        self.assertIsNone(auth.get_headers(session))"},{"line_number":96,"context_line":"        self.assertRaises(exceptions.AuthorizationFailure,"},{"line_number":97,"context_line":"                          session.get, self.TEST_URL, authenticated\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":6,"id":"7aa08908_d4978238","line":97,"range":{"start_line":97,"start_character":0,"end_line":97,"end_character":26},"in_reply_to":"dab17558_da294b39","updated":"2016-06-17 00:24:06.000000000","message":"done. test case is added but it\u0027s just using the existing API.","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"9f7f4a6ed64244f111b9394a896b1f8dd050d3e2","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.assertRaises(exceptions.AuthorizationFailure,"},{"line_number":103,"context_line":"                          session.get, self.TEST_URL, authenticated\u003dTrue)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def test_cert_key_expected_pass(self):"},{"line_number":106,"context_line":"        project_id \u003d uuid.uuid4().hex"},{"line_number":107,"context_line":"        certfile \u003d uuid.uuid4().hex"},{"line_number":108,"context_line":"        keyfile \u003d uuid.uuid4().hex"}],"source_content_type":"text/x-python","patch_set":8,"id":"3aaa91ec_28820653","line":105,"range":{"start_line":105,"start_character":40,"end_line":105,"end_character":42},"updated":"2016-06-22 00:33:37.000000000","message":"These cert and key files are not needed for this plugin; therefore this test case is not relevance anymore.\n\nIt will be removed.","commit_id":"69c9c54e14f6b5bb86194ee3382c877c2e0fcd16"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def test_no_scope_header_fail(self):"},{"line_number":86,"context_line":"        auth, session \u003d self.create(auth_url\u003dself.TEST_URL)"},{"line_number":87,"context_line":"        self.assertIsNone(auth.get_headers(session))"},{"line_number":88,"context_line":"        self.assertRaises(exceptions.AuthorizationFailure,"},{"line_number":89,"context_line":"                          session.get, self.TEST_URL, authenticated\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_project_name_scope_only_header_fail(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_83455444","line":88,"updated":"2016-06-29 22:33:29.000000000","message":"This should check something in the message to make sure the expected exception is being raised. (same at line 97)","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    def test_no_scope_header_fail(self):"},{"line_number":86,"context_line":"        auth, session \u003d self.create(auth_url\u003dself.TEST_URL)"},{"line_number":87,"context_line":"        self.assertIsNone(auth.get_headers(session))"},{"line_number":88,"context_line":"        self.assertRaises(exceptions.AuthorizationFailure,"},{"line_number":89,"context_line":"                          session.get, self.TEST_URL, authenticated\u003dTrue)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    def test_project_name_scope_only_header_fail(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_78925558","line":88,"in_reply_to":"3aaa91ec_83455444","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"}],"keystoneauth1/tests/unit/loading/test_v3.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"47e1c836759a27eafc3a926418cf9f223a86da77","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def test_without_project_domain(self):"},{"line_number":155,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":156,"context_line":"                          self.create,"},{"line_number":157,"context_line":"                          project_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_404dec98","line":157,"range":{"start_line":157,"start_character":26,"end_line":157,"end_character":55},"updated":"2016-06-25 02:32:35.000000000","message":"want to add the other missing parameters here?","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"2b8af3fcb864fa98e8368e35c2d0670d108b97ef","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    def test_without_project_domain(self):"},{"line_number":155,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":156,"context_line":"                          self.create,"},{"line_number":157,"context_line":"                          project_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3aaa91ec_d6cdd887","line":157,"range":{"start_line":157,"start_character":26,"end_line":157,"end_character":55},"in_reply_to":"3aaa91ec_404dec98","updated":"2016-06-27 23:36:32.000000000","message":"Good idea. done.","commit_id":"b258c008a539bc311382c596cba5e3e43a9c45f7"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5a04fd6c0d5e22014505876263a0001bed8830bc","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                          project_domain_name\u003dNone)"},{"line_number":309,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":310,"context_line":"                          self.create,"},{"line_number":311,"context_line":"                          project_domain_id\u003duuid.uuid4().hex)"},{"line_number":312,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":313,"context_line":"                          self.create,"},{"line_number":314,"context_line":"                          project_domain_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_e3825851","line":311,"updated":"2016-06-29 22:33:29.000000000","message":"why is this an error? Add a comment.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"45e53e194dcfdc5aaf33c92d133d37ec77e15374","unresolved":false,"context_lines":[{"line_number":308,"context_line":"                          project_domain_name\u003dNone)"},{"line_number":309,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":310,"context_line":"                          self.create,"},{"line_number":311,"context_line":"                          project_domain_id\u003duuid.uuid4().hex)"},{"line_number":312,"context_line":"        self.assertRaises(exceptions.OptionError,"},{"line_number":313,"context_line":"                          self.create,"},{"line_number":314,"context_line":"                          project_domain_name\u003duuid.uuid4().hex)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3aaa91ec_58cf9928","line":311,"in_reply_to":"3aaa91ec_e3825851","updated":"2016-07-01 00:36:00.000000000","message":"done.","commit_id":"3bbea8364801fec84de90d552b7c7d32031bd461"}],"setup.cfg":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"fae860061b02972a94658e1361158d0d8505cbc6","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    v3token \u003d keystoneauth1.loading._plugins.identity.v3:Token"},{"line_number":45,"context_line":"    v3oidcpassword \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword"},{"line_number":46,"context_line":"    v3oidcauthcode \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode"},{"line_number":47,"context_line":"    tokenless_auth \u003d keystoneauth1.loading._plugins.identity.v3:TokenlessAuth"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[build_sphinx]"},{"line_number":50,"context_line":"source-dir \u003d doc/source"}],"source_content_type":"text/x-ttcn-cfg","patch_set":2,"id":"3aaa91ec_be558c1e","line":47,"range":{"start_line":47,"start_character":4,"end_line":47,"end_character":18},"updated":"2016-06-22 03:21:53.000000000","message":"probably want to prefix this with v3","commit_id":"467f83606238370706b3098b0fd7dd9b648479fa"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"b24be3813f28f1329941c35282aa65ff424e3f30","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    v3token \u003d keystoneauth1.loading._plugins.identity.v3:Token"},{"line_number":45,"context_line":"    v3oidcpassword \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword"},{"line_number":46,"context_line":"    v3oidcauthcode \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode"},{"line_number":47,"context_line":"    x509tokenlessauth \u003d keystoneauth1.loading._plugins.identity.v3:X509TokenlessAuth"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[build_sphinx]"},{"line_number":50,"context_line":"source-dir \u003d doc/source"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"dab17558_3a21774e","line":47,"range":{"start_line":47,"start_character":4,"end_line":47,"end_character":21},"updated":"2016-05-09 05:20:49.000000000","message":"should be v3 prefixed","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"},{"author":{"_account_id":11387,"name":"Sam Leong","email":"chio-fai-sam.leong@hpe.com","username":"Chioleong"},"change_message_id":"91681fbc3cae6c457aa625475dc6310f05108251","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    v3token \u003d keystoneauth1.loading._plugins.identity.v3:Token"},{"line_number":45,"context_line":"    v3oidcpassword \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword"},{"line_number":46,"context_line":"    v3oidcauthcode \u003d keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode"},{"line_number":47,"context_line":"    x509tokenlessauth \u003d keystoneauth1.loading._plugins.identity.v3:X509TokenlessAuth"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"[build_sphinx]"},{"line_number":50,"context_line":"source-dir \u003d doc/source"}],"source_content_type":"text/x-ttcn-cfg","patch_set":6,"id":"7aa08908_67938c01","line":47,"range":{"start_line":47,"start_character":4,"end_line":47,"end_character":21},"in_reply_to":"dab17558_3a21774e","updated":"2016-06-17 00:24:06.000000000","message":"done","commit_id":"bf6cc79d326a449d8e2ede6748c98a099141d6c8"}]}
