)]}'
{"keystoneclient/access.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    def service_providers(self):"},{"line_number":453,"context_line":"        \"\"\"Return a object representing the list of trusted service providers."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        Used for Keystone2Keystone federating-out."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        :returns: :py:class:`keystoneauth1.service_providers.ServiceProviders`"},{"line_number":458,"context_line":"                  or None"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_7bd1e5cc","line":455,"updated":"2015-09-15 08:24:22.000000000","message":"federating-out?","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"96d37ebed2bad81cc81773537ba4017eba6094ac","unresolved":false,"context_lines":[{"line_number":452,"context_line":"    def service_providers(self):"},{"line_number":453,"context_line":"        \"\"\"Return a object representing the list of trusted service providers."},{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        Used for Keystone2Keystone federating-out."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        :returns: :py:class:`keystoneauth1.service_providers.ServiceProviders`"},{"line_number":458,"context_line":"                  or None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_fdd0a0cb","line":455,"in_reply_to":"ba15a1d1_7bd1e5cc","updated":"2015-10-28 02:46:58.000000000","message":"Some ppl uses this term for the entity that wants access to another entity via federation.","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"}],"keystoneclient/auth/base.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def get_sp_auth_url(self, session, sp_id, **kwargs):"},{"line_number":231,"context_line":"        \"\"\"Return auth_url from the Service Provider object"},{"line_number":232,"context_line":"        This url is used for obtaining unscoped federated token from remote"},{"line_number":233,"context_line":"        cloud."},{"line_number":234,"context_line":"        :param sp_id: ID of the Service Provider to be queried."},{"line_number":235,"context_line":"        :type sp_id: string"},{"line_number":236,"context_line":"        :returns: A Service Provider auth_url or None if one is not available."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_703856d5","line":233,"updated":"2015-08-13 18:21:51.000000000","message":"remote cloud or Service Provider Keystone of the remote cloud?","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":230,"context_line":"    def get_sp_auth_url(self, session, sp_id, **kwargs):"},{"line_number":231,"context_line":"        \"\"\"Return auth_url from the Service Provider object"},{"line_number":232,"context_line":"        This url is used for obtaining unscoped federated token from remote"},{"line_number":233,"context_line":"        cloud."},{"line_number":234,"context_line":"        :param sp_id: ID of the Service Provider to be queried."},{"line_number":235,"context_line":"        :type sp_id: string"},{"line_number":236,"context_line":"        :returns: A Service Provider auth_url or None if one is not available."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_3607eeca","line":233,"in_reply_to":"1a4dcd0f_703856d5","updated":"2015-08-14 20:22:26.000000000","message":"Done","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def get_sp_url(self, session, sp_id, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return sp_url from the Service Provider object"},{"line_number":243,"context_line":"        This url is used for passing SAML2 assertion to the remote cloud."},{"line_number":244,"context_line":"        :param sp_id: ID of the Service Provider to be queried."},{"line_number":245,"context_line":"        :type sp_id: str"},{"line_number":246,"context_line":"        :returns: A Service Provider sp_url or None if one is not available."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_f04a265b","line":243,"updated":"2015-08-13 18:21:51.000000000","message":"same comment here","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def get_sp_url(self, session, sp_id, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return sp_url from the Service Provider object"},{"line_number":243,"context_line":"        This url is used for passing SAML2 assertion to the remote cloud."},{"line_number":244,"context_line":"        :param sp_id: ID of the Service Provider to be queried."},{"line_number":245,"context_line":"        :type sp_id: str"},{"line_number":246,"context_line":"        :returns: A Service Provider sp_url or None if one is not available."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_160432c4","line":243,"in_reply_to":"1a4dcd0f_f04a265b","updated":"2015-08-14 20:22:26.000000000","message":"Done","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6be29135404b8ab6a4f54e0204e99cbcc2114eae","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        return None"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_sp_auth_url(self, session, sp_id, **kwargs):"},{"line_number":231,"context_line":"        \"\"\"Return auth_url from the Service Provider object"},{"line_number":232,"context_line":"        This url is used for obtaining unscoped federated token from the"},{"line_number":233,"context_line":"        Service Provider Keystone of the remote cloud."},{"line_number":234,"context_line":"        :param sp_id: ID of the Service Provider to be queried."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_b759ff90","line":231,"updated":"2015-08-17 14:03:37.000000000","message":"add a period in the end of the first line and add blank lines to separate the sections:","commit_id":"5032214d3a36a1016bcb2e3a8a5c968355f38b6f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"de115eafee0c3898d9c36fe50464d47f58e90356","unresolved":false,"context_lines":[{"line_number":228,"context_line":"        return None"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def get_sp_auth_url(self, session, sp_id, **kwargs):"},{"line_number":231,"context_line":"        \"\"\"Return auth_url from the Service Provider object"},{"line_number":232,"context_line":"        This url is used for obtaining unscoped federated token from the"},{"line_number":233,"context_line":"        Service Provider Keystone of the remote cloud."},{"line_number":234,"context_line":"        :param sp_id: ID of the Service Provider to be queried."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_4e948536","line":231,"in_reply_to":"fa1b9901_b759ff90","updated":"2015-08-17 16:28:15.000000000","message":"Done","commit_id":"5032214d3a36a1016bcb2e3a8a5c968355f38b6f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6be29135404b8ab6a4f54e0204e99cbcc2114eae","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return None"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def get_sp_url(self, session, sp_id, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return sp_url from the Service Provider object"},{"line_number":243,"context_line":"        This url is used for passing SAML2 assertion to the Service Provider"},{"line_number":244,"context_line":"        Keystone of the remote cloud."},{"line_number":245,"context_line":"        :param sp_id: ID of the Service Provider to be queried."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_57e2e3a0","line":242,"updated":"2015-08-17 14:03:37.000000000","message":"same as above, this should look like:\t        \n\n  \"\"\"Return sp_url from the Service Provider object.\n\n  This url is used for passing SAML2 assertion to the Service Provider\t\n  Keystone of the remote cloud.\t\n\n  :param sp_id: ID of the Service Provider to be queried.\t\n  :type sp_id: str\t\n  :returns: A Service Provider sp_url or None if one is not available.\t\n  :rtype: str\t\n  \"\"\"","commit_id":"5032214d3a36a1016bcb2e3a8a5c968355f38b6f"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"de115eafee0c3898d9c36fe50464d47f58e90356","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        return None"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    def get_sp_url(self, session, sp_id, **kwargs):"},{"line_number":242,"context_line":"        \"\"\"Return sp_url from the Service Provider object"},{"line_number":243,"context_line":"        This url is used for passing SAML2 assertion to the Service Provider"},{"line_number":244,"context_line":"        Keystone of the remote cloud."},{"line_number":245,"context_line":"        :param sp_id: ID of the Service Provider to be queried."}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_0e9e8d56","line":242,"in_reply_to":"fa1b9901_57e2e3a0","updated":"2015-08-17 16:28:15.000000000","message":"Done","commit_id":"5032214d3a36a1016bcb2e3a8a5c968355f38b6f"}],"keystoneclient/auth/identity/v3/k2k.py":[{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"ef97b5af233c240729c147c33e582796169f6b65","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                        IdP."},{"line_number":32,"context_line":"    :type base_plugin: ``keystoneclient.auth.v3.base.BaseAuth``"},{"line_number":33,"context_line":"    :param service_provider: The Service Provider ID."},{"line_number":34,"context_line":"    :type service_provider: string"},{"line_number":35,"context_line":"    :param sp_url: URL where the ECP wrapped SAML assertion will be"},{"line_number":36,"context_line":"                   presented to the keystone SP. Usually, something like:"},{"line_number":37,"context_line":"                   https://sp.com/Shibboleth.sso/SAML2/ECP"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5d0dac8d","line":34,"updated":"2015-08-03 06:29:50.000000000","message":"It might be worth mentioning that the service_provider must be one in the service_provider database table, otherwise it\u0027s not clear enough exactly what it refers to.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                        IdP."},{"line_number":32,"context_line":"    :type base_plugin: ``keystoneclient.auth.v3.base.BaseAuth``"},{"line_number":33,"context_line":"    :param service_provider: The Service Provider ID."},{"line_number":34,"context_line":"    :type service_provider: string"},{"line_number":35,"context_line":"    :param sp_url: URL where the ECP wrapped SAML assertion will be"},{"line_number":36,"context_line":"                   presented to the keystone SP. Usually, something like:"},{"line_number":37,"context_line":"                   https://sp.com/Shibboleth.sso/SAML2/ECP"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9739caa6","line":34,"in_reply_to":"3a50d1a3_5d0dac8d","updated":"2015-08-05 20:39:18.000000000","message":"Agreed - although I described it in terms of the client code which seems more appropriate to me in context.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"ef97b5af233c240729c147c33e582796169f6b65","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    :param sp_auth_url: Federated authentication URL of the keystone SP."},{"line_number":40,"context_line":"                        It is specified by IdP, for example:"},{"line_number":41,"context_line":"                        https://sp.com/v3/OS-FEDERATION/identity_providers/"},{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5d84ccd1","line":42,"updated":"2015-08-03 06:29:50.000000000","message":"Given we have sp_url and sp_auth_url in the database entry that service_provider refers to, it seems a bit weird to have to re-specify here, and probably prone to error. Perhaps it would be better to make this info available in the catalog?","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    :param sp_auth_url: Federated authentication URL of the keystone SP."},{"line_number":40,"context_line":"                        It is specified by IdP, for example:"},{"line_number":41,"context_line":"                        https://sp.com/v3/OS-FEDERATION/identity_providers/"},{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_f7504ed6","line":42,"in_reply_to":"3a50d1a3_5d84ccd1","updated":"2015-08-05 20:39:18.000000000","message":"Agreed - I think that was the key to Marek\u0027s concern as well. I\u0027ve removed these.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"62e9faa4339b1e133068571160c4fd433eb93fd9","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"},{"line_number":46,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    rescoping_plugin \u003d token.Token"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_f907257f","line":45,"updated":"2015-08-04 19:14:29.000000000","message":"All the public symbols in this class must have a docstring. Public members are any that don\u0027t start with _","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"ef97b5af233c240729c147c33e582796169f6b65","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"},{"line_number":46,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    rescoping_plugin \u003d token.Token"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_5dd28cd2","line":45,"updated":"2015-08-03 06:29:50.000000000","message":"Why not use httplib.FOUND? (Well, six.http_client.FOUND)","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"},{"line_number":46,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    rescoping_plugin \u003d token.Token"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9291d849","line":45,"in_reply_to":"1a4dcd0f_f907257f","updated":"2015-08-05 20:39:18.000000000","message":"Done","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                        idp_id/protocols/protocol_id/auth"},{"line_number":43,"context_line":"    \"\"\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    HTTP_MOVED_TEMPORARILY \u003d 302"},{"line_number":46,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    rescoping_plugin \u003d token.Token"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9760eaa6","line":45,"in_reply_to":"3a50d1a3_5dd28cd2","updated":"2015-08-05 20:39:18.000000000","message":"Done","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"cde3f1bc257e2af5375aca3971973f8d94bd1868","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":51,"context_line":"        self._sp_url \u003d kwargs.pop(\"sp_url\")"},{"line_number":52,"context_line":"        self._sp_auth_url \u003d kwargs.pop(\"sp_auth_url\")"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._local_cloud_plugin \u003d base_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_21143a42","line":52,"updated":"2015-08-03 07:23:08.000000000","message":"what is this for?","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":51,"context_line":"        self._sp_url \u003d kwargs.pop(\"sp_url\")"},{"line_number":52,"context_line":"        self._sp_auth_url \u003d kwargs.pop(\"sp_auth_url\")"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._local_cloud_plugin \u003d base_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_729c4c5d","line":52,"in_reply_to":"1a4dcd0f_345b26f8","updated":"2015-08-05 20:39:18.000000000","message":"Done","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"23ae2487dfc21d8a2197222e1b9e85cc191631f5","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":51,"context_line":"        self._sp_url \u003d kwargs.pop(\"sp_url\")"},{"line_number":52,"context_line":"        self._sp_auth_url \u003d kwargs.pop(\"sp_auth_url\")"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._local_cloud_plugin \u003d base_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_345b26f8","line":52,"in_reply_to":"1a4dcd0f_396a561b","updated":"2015-08-05 14:13:38.000000000","message":"Yes that\u0027s right - I\u0027ll study what minimum additional code would be needed to support this and propose it as well.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"9d7afb25454f2afb41e852efbee78be9c242518c","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":51,"context_line":"        self._sp_url \u003d kwargs.pop(\"sp_url\")"},{"line_number":52,"context_line":"        self._sp_auth_url \u003d kwargs.pop(\"sp_auth_url\")"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._local_cloud_plugin \u003d base_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_396a561b","line":52,"in_reply_to":"1a4dcd0f_f99e45b7","updated":"2015-08-05 07:13:00.000000000","message":"The problem is with access objects not having new features Rodrigo added, right? \nIf so, I think they should be proposed here too. I don\u0027t really think we should have two \u0027similar\u0027 plugins, but with different signatures and as a result different ways of using it.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"d50c2b1639416f805a58976c9add570683b6bc6a","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":51,"context_line":"        self._sp_url \u003d kwargs.pop(\"sp_url\")"},{"line_number":52,"context_line":"        self._sp_auth_url \u003d kwargs.pop(\"sp_auth_url\")"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        self._local_cloud_plugin \u003d base_plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_f99e45b7","line":52,"in_reply_to":"3a50d1a3_21143a42","updated":"2015-08-04 19:03:13.000000000","message":"I\u0027m requiring the urls to be passed in here, which does differ from the ksa implementation.\n\nIf you take a look at https://github.com/openstack/keystoneauth/blob/master/keystoneauth1/auth/identity/v3/k2k.py#L181 you can see that in ksa the k2k plugin finds these urls by asking the local plugin for them. Unfortunately these methods don\u0027t exist on the ksc version of the existing plugins (in my case I care about the Token plugin, but maybe others are valid too?).\n\nRather than let this implementation spill out into the other plugins, I chose to just require the urls to be passed in. I\u0027m open to suggestions, but at some point I expect the ksa/ksc code to differ because the other plugins aren\u0027t the same.\n\nThoughts?","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":15750,"name":"Julian Edwards","email":"bigjools@gmail.com","username":"bigjools"},"change_message_id":"ef97b5af233c240729c147c33e582796169f6b65","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        if not resp.text:"},{"line_number":138,"context_line":"            raise exceptions.InvalidResponse(resp)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        return str(resp.text)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _send_service_provider_ecp_authn_response(self, session, sp_url,"},{"line_number":143,"context_line":"                                                  sp_auth_url):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a50d1a3_782c364a","line":140,"updated":"2015-08-03 06:29:50.000000000","message":"Why the str()? If it\u0027s ever a unicode string and there are unicode chars in it, str() will blow up.","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"86202c1bd768fb10f2cccef17483f369655bdddf","unresolved":false,"context_lines":[{"line_number":137,"context_line":"        if not resp.text:"},{"line_number":138,"context_line":"            raise exceptions.InvalidResponse(resp)"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        return str(resp.text)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def _send_service_provider_ecp_authn_response(self, session, sp_url,"},{"line_number":143,"context_line":"                                                  sp_auth_url):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_12a628ae","line":140,"in_reply_to":"3a50d1a3_782c364a","updated":"2015-08-05 20:39:18.000000000","message":"agreed!","commit_id":"8091e00083642548ab7b014f83c22094aa224de4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Keystone2Keystone(base.BaseAuth):"},{"line_number":28,"context_line":"    \"\"\"Plugin to execute the keystone to keyestone authentication flow."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"},{"line_number":31,"context_line":"    Identity Provider (IdP) is used to request an OpenStack unscoped token"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_706616f0","line":28,"updated":"2015-08-13 18:21:51.000000000","message":"Keystone to Keystone","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Keystone2Keystone(base.BaseAuth):"},{"line_number":28,"context_line":"    \"\"\"Plugin to execute the keystone to keyestone authentication flow."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"},{"line_number":31,"context_line":"    Identity Provider (IdP) is used to request an OpenStack unscoped token"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_96e60215","line":28,"in_reply_to":"1a4dcd0f_706616f0","updated":"2015-08-14 20:22:26.000000000","message":"Done","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":45,"context_line":"    \"\"\"Path where the ECP wrapped SAML assertion should be presented to"},{"line_number":46,"context_line":"    the Keystone Service Provider."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_b0c7be97","line":45,"updated":"2015-08-13 18:21:51.000000000","message":"suggest just moving this above like 44: \n\n     # NOTE(doug-fish): Path where the ECP wrapped SAML assertion should be presented to\n     # the Keystone Service Provider.\n     REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    \"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    REQUEST_ECP_URL \u003d \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":45,"context_line":"    \"\"\"Path where the ECP wrapped SAML assertion should be presented to"},{"line_number":46,"context_line":"    the Keystone Service Provider."},{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_0722bea3","line":45,"in_reply_to":"1a4dcd0f_b0c7be97","updated":"2015-08-14 20:22:26.000000000","message":"I added this docstring is response to a review comment by Brant - I think it\u0027s a different kind of thing than you are suggesting. I think it needs to be consistent with\n\nhttps://www.python.org/dev/peps/pep-0258/#attribute-docstrings\n\nLet me know if you disagree, or otherwise still think it\u0027s wrong","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    rescoping_plugin \u003d token.Token"},{"line_number":50,"context_line":"    \"\"\"Auth plugin class to use when scoping a new token \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_70c29688","line":50,"updated":"2015-08-13 18:21:51.000000000","message":"same comment here, it just tends to follow the commenting convention established in the existing Keystone code (unless I\u0027m unaware of a new convention?)","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    \"\"\""},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    rescoping_plugin \u003d token.Token"},{"line_number":50,"context_line":"    \"\"\"Auth plugin class to use when scoping a new token \"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def __init__(self, base_plugin, service_provider, **kwargs):"},{"line_number":53,"context_line":"        super(Keystone2Keystone, self).__init__(auth_url\u003dNone, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_274c9a75","line":50,"in_reply_to":"1a4dcd0f_70c29688","updated":"2015-08-14 20:22:26.000000000","message":"same - in full disclosure I haven\u0027t done this before either - was just following what seemed the relevant standard.","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def _remote_auth_url(cls, auth_url):"},{"line_number":60,"context_line":"        \"\"\"Return auth_url of the remote OpenStack cloud."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":63,"context_line":"        token, typically that would be"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_d05a8af2","line":60,"updated":"2015-08-13 18:21:51.000000000","message":"does remote mean Service Provider or Identity Provider in this case?","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"},{"line_number":59,"context_line":"    def _remote_auth_url(cls, auth_url):"},{"line_number":60,"context_line":"        \"\"\"Return auth_url of the remote OpenStack cloud."},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":63,"context_line":"        token, typically that would be"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_07ccfeb9","line":60,"in_reply_to":"1a4dcd0f_d05a8af2","updated":"2015-08-14 20:22:26.000000000","message":"it means Service Provider - I\u0027ve clarified.","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":63,"context_line":"        token, typically that would be"},{"line_number":64,"context_line":"        ``https://remote.example.com:5000/v3/OS-FEDERATION/identity_providers/"},{"line_number":65,"context_line":"        \u003cidp\u003e/protocols/\u003cproto\u003e/auth``. However we need to generate a real"},{"line_number":66,"context_line":"        auth_url, used for token scoping.  This function assumes there are"},{"line_number":67,"context_line":"        static values today in the remote auth_url stored in the Service"},{"line_number":68,"context_line":"        Provider attribute and those can be used as a delimiter. If the"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_906de29b","line":65,"updated":"2015-08-13 18:21:51.000000000","message":"\u003cproto\u003e \u003d\u003d \u003cprotocol_id\u003e in this case, right?","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":63,"context_line":"        token, typically that would be"},{"line_number":64,"context_line":"        ``https://remote.example.com:5000/v3/OS-FEDERATION/identity_providers/"},{"line_number":65,"context_line":"        \u003cidp\u003e/protocols/\u003cproto\u003e/auth``. However we need to generate a real"},{"line_number":66,"context_line":"        auth_url, used for token scoping.  This function assumes there are"},{"line_number":67,"context_line":"        static values today in the remote auth_url stored in the Service"},{"line_number":68,"context_line":"        Provider attribute and those can be used as a delimiter. If the"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_2736dab4","line":65,"in_reply_to":"1a4dcd0f_906de29b","updated":"2015-08-14 20:22:26.000000000","message":"I think so - I\u0027ll trust you are right in this and have updated","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        resp \u003d session.post(url\u003durl + self.REQUEST_ECP_URL, json\u003dbody,"},{"line_number":129,"context_line":"                            raise_exc\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # NOTE(marek-denis): I am not sure whether disablig exceptions in the"},{"line_number":132,"context_line":"        # Session object and testing if resp.ok is sufficient. An alternative"},{"line_number":133,"context_line":"        # would be catching locally all exceptions and reraising with custom"},{"line_number":134,"context_line":"        # warning."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_90f402d0","line":131,"updated":"2015-08-13 18:21:51.000000000","message":"disabling*","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":128,"context_line":"        resp \u003d session.post(url\u003durl + self.REQUEST_ECP_URL, json\u003dbody,"},{"line_number":129,"context_line":"                            raise_exc\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # NOTE(marek-denis): I am not sure whether disablig exceptions in the"},{"line_number":132,"context_line":"        # Session object and testing if resp.ok is sufficient. An alternative"},{"line_number":133,"context_line":"        # would be catching locally all exceptions and reraising with custom"},{"line_number":134,"context_line":"        # warning."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_8766ceb9","line":131,"in_reply_to":"1a4dcd0f_90f402d0","updated":"2015-08-14 20:22:26.000000000","message":"Done","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":17026,"name":"Sean Perry","email":"sean.perry@hpe.com","username":"sean_perry"},"change_message_id":"40178740a924922ae84cb1cf7ef2e45faf63d6e6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            session, interface\u003dauth_base.AUTH_INTERFACE)"},{"line_number":126,"context_line":"        body \u003d self._ecp_assertion_request(session)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        resp \u003d session.post(url\u003durl + self.REQUEST_ECP_URL, json\u003dbody,"},{"line_number":129,"context_line":"                            raise_exc\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # NOTE(marek-denis): I am not sure whether disabling exceptions in the"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa1b9901_24c4903e","line":128,"updated":"2015-08-24 18:13:54.000000000","message":"I needed to add \"auth\u003dself._local_cloud_plugin,\" here or code like this:\n\nlocal_auth \u003d v3.Password(auth_url\u003dauth_url,\n                         user_id\u003duser_id,\n                         password\u003dpassword,\n                         project_id\u003didp_project_id)\n\nauth \u003d v3.Keystone2Keystone(base_plugin\u003dlocal_auth,\n                            service_provider\u003dsp.id)\n\nsess \u003d session.Session(auth\u003dauth, verify\u003dFalse)\n\nkeystone \u003d client.Client(session\u003dsess)\n\nkeystone.\u003cdo_something\u003e\n\nwould fail with an infinite recursion","commit_id":"d850d5ed772c7e9598365482170f7acee844ea17"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"21b0aa6bdcb4b4283fd86a0903698615d27165e5","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            session, interface\u003dauth_base.AUTH_INTERFACE)"},{"line_number":126,"context_line":"        body \u003d self._ecp_assertion_request(session)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        resp \u003d session.post(url\u003durl + self.REQUEST_ECP_URL, json\u003dbody,"},{"line_number":129,"context_line":"                            raise_exc\u003dFalse)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        # NOTE(marek-denis): I am not sure whether disabling exceptions in the"}],"source_content_type":"text/x-python","patch_set":9,"id":"da20952f_93a9a626","line":128,"in_reply_to":"fa1b9901_24c4903e","updated":"2015-08-31 18:52:37.000000000","message":"Sean, I don\u0027t quite follow either the code that is failing or what you are proposing for a solution. Can you make code that actually fails with the infinite recursion problem available publicly somehow? Bonus points if you can provide a unit that that fails and demonstrates the problem!","commit_id":"d850d5ed772c7e9598365482170f7acee844ea17"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e48bab572c7291810fe7e9e0488ee0b62fa3ac8d","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import requests"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_config import cfg"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystoneclient import access"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_f3f7b8d0","line":15,"updated":"2015-10-22 14:34:52.000000000","message":"(nit) requests, six and oslo_config are all thirdparty so they should be in the same import grouping","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Keystone2Keystone(base.BaseAuth):"},{"line_number":28,"context_line":"    \"\"\"Plugin to execute the Keystone to Keyestone authentication flow."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"},{"line_number":31,"context_line":"    Identity Provider (IdP) is used to request an OpenStack unscoped token"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_8f5109db","line":28,"updated":"2015-09-15 08:24:22.000000000","message":"spelling","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e48bab572c7291810fe7e9e0488ee0b62fa3ac8d","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    def _remote_auth_url(cls, auth_url):"},{"line_number":59,"context_line":"        \"\"\"Return auth_url of the remote Keystone Service Provider"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":62,"context_line":"        token, typically that would be"},{"line_number":63,"context_line":"        ``https://remote.example.com:5000/v3/OS-FEDERATION/identity_providers/"},{"line_number":64,"context_line":"        \u003cidp\u003e/protocols/\u003cprotocol_id\u003e/auth``. However we need to generate a"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_93c76463","line":61,"updated":"2015-10-22 14:34:52.000000000","message":"s/getting/getting a/","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e48bab572c7291810fe7e9e0488ee0b62fa3ac8d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        Remote cloud\u0027s auth_url is an endpoint for getting federated unscoped"},{"line_number":62,"context_line":"        token, typically that would be"},{"line_number":63,"context_line":"        ``https://remote.example.com:5000/v3/OS-FEDERATION/identity_providers/"},{"line_number":64,"context_line":"        \u003cidp\u003e/protocols/\u003cprotocol_id\u003e/auth``. However we need to generate a"},{"line_number":65,"context_line":"        real auth_url, used for token scoping.  This function assumes there are"},{"line_number":66,"context_line":"        static values today in the remote auth_url stored in the Service"},{"line_number":67,"context_line":"        Provider attribute and those can be used as a delimiter. If the"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_538b0c1f","line":64,"updated":"2015-10-22 14:34:52.000000000","message":"comma after however?","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        real auth_url, used for token scoping.  This function assumes there are"},{"line_number":66,"context_line":"        static values today in the remote auth_url stored in the Service"},{"line_number":67,"context_line":"        Provider attribute and those can be used as a delimiter. If the"},{"line_number":68,"context_line":"        sp_auth_url doesn\u0027t comply with standard federation auth url the"},{"line_number":69,"context_line":"        function will simply return whole string."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        :param auth_url: auth_url of the remote cloud"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_af216d4f","line":68,"updated":"2015-09-15 08:24:22.000000000","message":"Missing a comma:\n\n  auth url, the","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        options \u003d super(Keystone2Keystone, cls).get_options()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        options.extend(["},{"line_number":97,"context_line":"            cfg.StrOpt(\"service-provider\", help\u003d\"Service Provider\u0027s ID\")"},{"line_number":98,"context_line":"        ])"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        return options"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_4fbe91d5","line":97,"updated":"2015-09-15 08:24:22.000000000","message":"Avoid ambiguity:\n\n  service-provider-id","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e48bab572c7291810fe7e9e0488ee0b62fa3ac8d","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        # would be catching locally all exceptions and reraising with custom"},{"line_number":133,"context_line":"        # warning."},{"line_number":134,"context_line":"        if not resp.ok:"},{"line_number":135,"context_line":"            msg \u003d (\"Error while requesting ECP wrapped assertion: response \""},{"line_number":136,"context_line":"                   \"exit code: %(status_code)d, reason: %(err)s\")"},{"line_number":137,"context_line":"            msg \u003d msg % {\u0027status_code\u0027: resp.status_code, \u0027err\u0027: resp.reason}"},{"line_number":138,"context_line":"            raise exceptions.AuthorizationFailure(msg)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_9380c48c","line":135,"updated":"2015-10-22 14:34:52.000000000","message":"Is there any reason why this isn\u0027t i18n?","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":171,"context_line":"            authenticated\u003dFalse,"},{"line_number":172,"context_line":"            redirect\u003dFalse)"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        # Don\u0027t follow HTTP specs - after the HTTP 302 response don\u0027t repeat"},{"line_number":175,"context_line":"        # the call directed to the Location URL. In this case, this is an"},{"line_number":176,"context_line":"        # indication that SAML2 session is now active and protected resource"},{"line_number":177,"context_line":"        # can be accessed."}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_6fdcb512","line":174,"updated":"2015-09-15 08:24:22.000000000","message":"The meat of this comment is useful, but the prefix about \"not following HTTP\" is entirely wrong. What the HTTP spec A*actually* says:\n\n  If the 302 status code is received in response to a request other\n  than GET or HEAD, the user agent MUST NOT automatically\n  redirect the request unless it can be confirmed by the user, since\n  this might change the conditions under which the request was\n  issued.\n\nhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"}],"keystoneclient/exceptions.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"70060d22b7cc0a937abcb3a04bba9579bd0d815c","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def __init__(self, sp_id):"},{"line_number":129,"context_line":"        self.sp_id \u003d sp_id"},{"line_number":130,"context_line":"        msg \u003d \u0027The Service Provider %(sp)s could not be found\u0027 % {\u0027sp\u0027: sp_id}"},{"line_number":131,"context_line":"        super(ServiceProviderNotFound, self).__init__(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_701e160f","line":130,"updated":"2015-08-13 18:21:51.000000000","message":"doesn\u0027t this need to be translated, like line 113?","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"7587932e3093076a9eb4ef2a07d7d6c051775f81","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def __init__(self, sp_id):"},{"line_number":129,"context_line":"        self.sp_id \u003d sp_id"},{"line_number":130,"context_line":"        msg \u003d \u0027The Service Provider %(sp)s could not be found\u0027 % {\u0027sp\u0027: sp_id}"},{"line_number":131,"context_line":"        super(ServiceProviderNotFound, self).__init__(msg)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_c71a9618","line":130,"in_reply_to":"1a4dcd0f_701e160f","updated":"2015-08-14 20:22:26.000000000","message":"yep!","commit_id":"007a7a13ca0fc0471e05dd45980dfbe6d1def292"}],"keystoneclient/tests/unit/auth/test_identity_v3.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    TEST_SERVICE_PROVIDERS \u003d ["},{"line_number":118,"context_line":"        {"},{"line_number":119,"context_line":"            \"auth_url\": \"https://sp1.com/v3/OS-FEDERATION/\""},{"line_number":120,"context_line":"                        \"identity_providers/acme/protocols/saml2/auth\","},{"line_number":121,"context_line":"            \"id\": \"sp1\","},{"line_number":122,"context_line":"            \"sp_url\": \"https://sp1.com/Shibboleth.sso/SAML2/ECP\""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_4f99b11e","line":119,"updated":"2015-09-15 08:24:22.000000000","message":"Use example.com for things like this. That\u0027s what it\u0027s for.\n\n  sp1.example.com\n\nhttp://www.iana.org/domains/reserved","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":119,"context_line":"            \"auth_url\": \"https://sp1.com/v3/OS-FEDERATION/\""},{"line_number":120,"context_line":"                        \"identity_providers/acme/protocols/saml2/auth\","},{"line_number":121,"context_line":"            \"id\": \"sp1\","},{"line_number":122,"context_line":"            \"sp_url\": \"https://sp1.com/Shibboleth.sso/SAML2/ECP\""},{"line_number":123,"context_line":"        }, {"},{"line_number":124,"context_line":"            \"auth_url\": \"https://sp2.com/v3/OS-FEDERATION/\""},{"line_number":125,"context_line":"                        \"identity_providers/acme/protocols/saml2/auth\","}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_ef9f6501","line":122,"updated":"2015-09-15 08:24:22.000000000","message":"same","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":121,"context_line":"            \"id\": \"sp1\","},{"line_number":122,"context_line":"            \"sp_url\": \"https://sp1.com/Shibboleth.sso/SAML2/ECP\""},{"line_number":123,"context_line":"        }, {"},{"line_number":124,"context_line":"            \"auth_url\": \"https://sp2.com/v3/OS-FEDERATION/\""},{"line_number":125,"context_line":"                        \"identity_providers/acme/protocols/saml2/auth\","},{"line_number":126,"context_line":"            \"id\": \"sp2\","},{"line_number":127,"context_line":"            \"sp_url\": \"https://sp2.com/Shibboleth.sso/SAML2/ECP\""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_0fa3b950","line":124,"updated":"2015-09-15 08:24:22.000000000","message":"same","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            \"auth_url\": \"https://sp2.com/v3/OS-FEDERATION/\""},{"line_number":125,"context_line":"                        \"identity_providers/acme/protocols/saml2/auth\","},{"line_number":126,"context_line":"            \"id\": \"sp2\","},{"line_number":127,"context_line":"            \"sp_url\": \"https://sp2.com/Shibboleth.sso/SAML2/ECP\""},{"line_number":128,"context_line":"        }"},{"line_number":129,"context_line":"    ]"},{"line_number":130,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_cf85c1ad","line":127,"updated":"2015-09-15 08:24:22.000000000","message":"same","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        auth_ref \u003d a.get_auth_ref(s)"},{"line_number":449,"context_line":""},{"line_number":450,"context_line":"        service_providers \u003d auth_ref.service_providers"},{"line_number":451,"context_line":"        self.assertEqual(\u0027https://sp1.com/v3/OS-FEDERATION/\u0027"},{"line_number":452,"context_line":"                         \u0027identity_providers/acme/protocols/saml2/auth\u0027,"},{"line_number":453,"context_line":"                         service_providers.get_auth_url(\u0027sp1\u0027))"},{"line_number":454,"context_line":"        self.assertEqual(\u0027https://sp1.com/Shibboleth.sso/SAML2/ECP\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_cface137","line":451,"updated":"2015-09-15 08:24:22.000000000","message":"same as above","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"}],"keystoneclient/tests/unit/auth/test_identity_v3_federated.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"e48bab572c7291810fe7e9e0488ee0b62fa3ac8d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"import copy"},{"line_number":14,"context_line":"import six"},{"line_number":15,"context_line":"import uuid"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from keystoneclient import access"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a29b11f_a5057711","line":14,"updated":"2015-10-22 14:34:52.000000000","message":"This is third party so it should be in it\u0027s own grouping after the Python builtins.","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    REQUEST_ECP_URL \u003d TEST_URL + \u0027/auth/OS-FEDERATION/saml2/ecp\u0027"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    SP_ROOT_URL \u003d \u0027https://sp1.com/v3\u0027"},{"line_number":111,"context_line":"    SP_ID \u003d \u0027sp1\u0027"},{"line_number":112,"context_line":"    SP_URL \u003d \u0027https://sp1.com/Shibboleth.sso/SAML2/ECP\u0027"},{"line_number":113,"context_line":"    SP_AUTH_URL \u003d (SP_ROOT_URL +"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_ef120562","line":110,"updated":"2015-09-15 08:24:22.000000000","message":"sp1.example.com","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"29c55b4ea8da3c7504e5942654ea84922eb6c424","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.k2kplugin \u003d self.get_plugin()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _get_base_plugin(self):"},{"line_number":133,"context_line":"        self.stub_url(\u0027POST\u0027, [\u0027auth\u0027, \u0027tokens\u0027],"},{"line_number":134,"context_line":"                      headers\u003d{\u0027X-Subject-Token\u0027: uuid.uuid4().hex},"},{"line_number":135,"context_line":"                      json\u003dself.token_v3)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba15a1d1_ba144944","line":132,"updated":"2015-09-15 08:24:22.000000000","message":"is this worth having as a separate method? it only appears to be used once","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"96d37ebed2bad81cc81773537ba4017eba6094ac","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        self.k2kplugin \u003d self.get_plugin()"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def _get_base_plugin(self):"},{"line_number":133,"context_line":"        self.stub_url(\u0027POST\u0027, [\u0027auth\u0027, \u0027tokens\u0027],"},{"line_number":134,"context_line":"                      headers\u003d{\u0027X-Subject-Token\u0027: uuid.uuid4().hex},"},{"line_number":135,"context_line":"                      json\u003dself.token_v3)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a26ad4f_fdb5007e","line":132,"in_reply_to":"ba15a1d1_ba144944","updated":"2015-10-28 02:46:58.000000000","message":"maybe it is worth so we can separate this logic, like, if in the future the way to get the base plugin changes.","commit_id":"4f4663e5a899a61b50f3285498fe42b555870496"}]}
