)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8119,"name":"Eric Brown","email":"eric_wade_brown@yahoo.com","username":"ericwb"},"change_message_id":"e3aa0f8714be9d52e3af0826a93c11ab4fb2fc4c","unresolved":false,"context_lines":[{"line_number":10,"context_line":"federation."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Doug Fish \u003cdrfish@us.ibm.com\u003e"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91d95e3e2a5079d27575a66177c132ef20e00d63"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7aaa499b_0f0c2793","line":13,"updated":"2015-04-11 18:28:41.000000000","message":"Is there a blueprint for this?","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"b448e247d769c2852fd451de72dec9679650bd07","unresolved":false,"context_lines":[{"line_number":10,"context_line":"federation."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Doug Fish \u003cdrfish@us.ibm.com\u003e"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I91d95e3e2a5079d27575a66177c132ef20e00d63"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7aaa499b_6cbcce6c","line":13,"in_reply_to":"7aaa499b_0f0c2793","updated":"2015-04-13 03:46:33.000000000","message":"not yet, will create one.","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"}],"keystoneclient/auth/identity/v3/federated.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4a03ecf5a69d1b3a12e08512b8da31b1cf5f0a0","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Fetch unscoped federated token.\"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class Keystone2KeystoneAuthPlugin(base.BaseAuth):"},{"line_number":116,"context_line":"    \"\"\"Plugin to authenticate in a keystone Service Provider."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_a71aef15","line":115,"updated":"2015-04-13 04:42:17.000000000","message":"why would this use BaseAuth rather than the FederatedBaseAuth above?","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0b9e07cf347ebb198915adc0cd324e73a134a2f2","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Fetch unscoped federated token.\"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class Keystone2KeystoneAuthPlugin(base.BaseAuth):"},{"line_number":116,"context_line":"    \"\"\"Plugin to authenticate in a keystone Service Provider."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_cc1d1468","line":115,"in_reply_to":"7aaa499b_a71aef15","updated":"2015-04-13 12:36:37.000000000","message":"FederatedBaseAuth was designed to authenticate in an IdP (since it receives both idp and protocol parameters). In K2K we authenticate against a sp, so we receive different parameters and do not use the idp and protocol ones.","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4a03ecf5a69d1b3a12e08512b8da31b1cf5f0a0","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    ECP_SP_SAML2_REQUEST_HEADERS \u003d {\u0027Content-Type\u0027: \u0027application/vnd.paos+xml\u0027}"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, sp_url, sp_auth_url, ecp_assertion, **kwargs):"},{"line_number":143,"context_line":"        super(Keystone2KeystoneAuthPlugin, self).__init__(auth_url\u003d\u0027\u0027,"},{"line_number":144,"context_line":"                                                          **kwargs)"},{"line_number":145,"context_line":"        self.sp_url \u003d sp_url"},{"line_number":146,"context_line":"        self.sp_auth_url \u003d sp_auth_url"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_270fffe2","line":143,"updated":"2015-04-13 04:42:17.000000000","message":"why set auth_url\u003d\u0027\u0027 - at some point you need to talk to local keystone right? wouldn\u0027t this be set? you will need this for example to list projects.","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0b9e07cf347ebb198915adc0cd324e73a134a2f2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"    ECP_SP_SAML2_REQUEST_HEADERS \u003d {\u0027Content-Type\u0027: \u0027application/vnd.paos+xml\u0027}"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    def __init__(self, sp_url, sp_auth_url, ecp_assertion, **kwargs):"},{"line_number":143,"context_line":"        super(Keystone2KeystoneAuthPlugin, self).__init__(auth_url\u003d\u0027\u0027,"},{"line_number":144,"context_line":"                                                          **kwargs)"},{"line_number":145,"context_line":"        self.sp_url \u003d sp_url"},{"line_number":146,"context_line":"        self.sp_auth_url \u003d sp_auth_url"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_ac31a8ee","line":143,"in_reply_to":"7aaa499b_270fffe2","updated":"2015-04-13 12:36:37.000000000","message":"hmm I was a bit confused on how we could use the auth_url. Can we access the client somehow inside the plugin? Ideally we\u0027d receive the sp id and would fetch the sp information and ecp assertion.","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4a03ecf5a69d1b3a12e08512b8da31b1cf5f0a0","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            cfg.StrOpt(\u0027sp-auth-url\u0027,"},{"line_number":157,"context_line":"                       help\u003d\"Service Provider\u0027s Authentication URL\"),"},{"line_number":158,"context_line":"            cfg.StrOpt(\u0027ecp-assertion\u0027,"},{"line_number":159,"context_line":"                       help\u003d\"ECP wrapped SAML assertion\"),"},{"line_number":160,"context_line":"        ])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        return options"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_672ce74a","line":159,"updated":"2015-04-13 04:42:17.000000000","message":"this is going to expose --os-ecp-assertion on the cmd line and config file (assuming you add the entrypoint). Do we really want that? It seems like we want to expose the options and have the plugin do the ecp work.","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0b9e07cf347ebb198915adc0cd324e73a134a2f2","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            cfg.StrOpt(\u0027sp-auth-url\u0027,"},{"line_number":157,"context_line":"                       help\u003d\"Service Provider\u0027s Authentication URL\"),"},{"line_number":158,"context_line":"            cfg.StrOpt(\u0027ecp-assertion\u0027,"},{"line_number":159,"context_line":"                       help\u003d\"ECP wrapped SAML assertion\"),"},{"line_number":160,"context_line":"        ])"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"        return options"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_6c528015","line":159,"in_reply_to":"7aaa499b_672ce74a","updated":"2015-04-13 12:36:37.000000000","message":"see the comment above","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a4a03ecf5a69d1b3a12e08512b8da31b1cf5f0a0","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            response \u003d session.request("},{"line_number":192,"context_line":"                self.sp_auth_url, \u0027GET\u0027, authenticated\u003dFalse,"},{"line_number":193,"context_line":"                headers\u003dself.ECP_SP_SAML2_REQUEST_HEADERS)"},{"line_number":194,"context_line":"        self.authenticated_response \u003d response"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _get_unscoped_token(self, session):"},{"line_number":197,"context_line":"        \"\"\"Get unscoped token after authenticate to the Service Provider."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_2726df68","line":194,"updated":"2015-04-13 04:42:17.000000000","message":"please return this value rather than save it on the plugin when you don\u0027t want to use it later - or you could just combine this all into _get_unscoped_token","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"0b9e07cf347ebb198915adc0cd324e73a134a2f2","unresolved":false,"context_lines":[{"line_number":191,"context_line":"            response \u003d session.request("},{"line_number":192,"context_line":"                self.sp_auth_url, \u0027GET\u0027, authenticated\u003dFalse,"},{"line_number":193,"context_line":"                headers\u003dself.ECP_SP_SAML2_REQUEST_HEADERS)"},{"line_number":194,"context_line":"        self.authenticated_response \u003d response"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    def _get_unscoped_token(self, session):"},{"line_number":197,"context_line":"        \"\"\"Get unscoped token after authenticate to the Service Provider."}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_0c42dc3e","line":194,"in_reply_to":"7aaa499b_2726df68","updated":"2015-04-13 12:36:37.000000000","message":"Done","commit_id":"2b697e7761579d35d26cd3d590fe5f2cc32bbd2b"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"59ce5dfb84fb54022aa428864188483bbbd0df3b","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        \"\"\"Fetch unscoped federated token.\"\"\""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"class Keystone2KeystoneAuthPlugin(base.BaseAuth):"},{"line_number":116,"context_line":"    \"\"\"Plugin to authenticate in a keystone Service Provider."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    In this plugin, an ECP wrapped SAML assertion provided by a keystone"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_9c85e5ae","line":115,"updated":"2015-04-14 01:43:49.000000000","message":"we will want to move this to its own file or somewhere else.","commit_id":"59d0a76ba550d8c30ca64a16b7daf434826417b2"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"e557301ee3f790a89ec3461ce1301f39880461c5","unresolved":false,"context_lines":[{"line_number":154,"context_line":"        options \u003d super(Keystone2KeystoneAuthPlugin, cls).get_options()"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        options.extend(["},{"line_number":157,"context_line":"            cfg.StrOpt(\u0027sp-url\u0027,"},{"line_number":158,"context_line":"                       help\u003d\"Service Provider\u0027s URL\"),"},{"line_number":159,"context_line":"            cfg.StrOpt(\u0027sp-auth-url\u0027,"},{"line_number":160,"context_line":"                       help\u003d\"Service Provider\u0027s Authentication URL\"),"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_7539e340","line":157,"updated":"2015-04-14 22:37:54.000000000","message":"I don\u0027t think we need \u0027sp-url\u0027 and \u0027sp-auth-url\u0027, we just need \u0027service_provider_id\u0027, both sp-url and sp-auth-url are part of the response headers when we request the SAML2 token.\n\nhttps://github.com/openstack/keystone/blob/master/keystone/contrib/federation/controllers.py#L340","commit_id":"59d0a76ba550d8c30ca64a16b7daf434826417b2"},{"author":{"_account_id":9981,"name":"Doug Fish","email":"drfish@us.ibm.com","username":"doug-fish"},"change_message_id":"5e48c727b64a84b2d907edb8d73ce1f9aca31478","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        # indication that SAML2 session is now active and protected resource"},{"line_number":192,"context_line":"        # can be accessed."},{"line_number":193,"context_line":"        if response.status_code \u003d\u003d self.HTTP_MOVED_TEMPORARILY:"},{"line_number":194,"context_line":"            response \u003d session.request("},{"line_number":195,"context_line":"                self.sp_auth_url, \u0027GET\u0027, authenticated\u003dFalse,"},{"line_number":196,"context_line":"                headers\u003dself.ECP_SP_SAML2_REQUEST_HEADERS)"},{"line_number":197,"context_line":"        return response"}],"source_content_type":"text/x-python","patch_set":3,"id":"1aca2d91_e4fa03bd","line":194,"updated":"2015-05-07 13:02:09.000000000","message":"I think the comment indicates we should not have this block at all - doesn\u0027t it? I wonder if this is causing the \"replay detected of message ID\" errors I am seeing","commit_id":"59d0a76ba550d8c30ca64a16b7daf434826417b2"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"59ce5dfb84fb54022aa428864188483bbbd0df3b","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        if response.status_code \u003d\u003d self.HTTP_MOVED_TEMPORARILY:"},{"line_number":194,"context_line":"            response \u003d session.request("},{"line_number":195,"context_line":"                self.sp_auth_url, \u0027GET\u0027, authenticated\u003dFalse,"},{"line_number":196,"context_line":"                headers\u003dself.ECP_SP_SAML2_REQUEST_HEADERS)"},{"line_number":197,"context_line":"        return response"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    def _get_unscoped_token(self, session):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7aaa499b_dcb92d7b","line":196,"updated":"2015-04-14 01:43:49.000000000","message":"this feels really similar to existing saml plugins.","commit_id":"59d0a76ba550d8c30ca64a16b7daf434826417b2"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    The parameters sp_auth_url and sp_url can be obtained from the token or"},{"line_number":123,"context_line":"    from the HTTP headers in the response with the ECP wrapped SAML assertion."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    :param auth_url: URL of the Identity Service"},{"line_number":126,"context_line":"    :type auth_url: string"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_b644341b","line":124,"updated":"2015-05-07 16:50:58.000000000","message":"Maybe we should give some realistic examples here?\n\n  auth_url: http://sp_keystone:5000/v3\n  sp_url: http://sp_keystone:5000/Shibboleth.sso/SAML2/ECP\n  sp_auth_url: http://sp_keystone:5000/v3/OS-FEDERATION/identity_providers/idp_id/protocols/protocol_id/auth","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    The parameters sp_auth_url and sp_url can be obtained from the token or"},{"line_number":123,"context_line":"    from the HTTP headers in the response with the ECP wrapped SAML assertion."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    :param auth_url: URL of the Identity Service"},{"line_number":126,"context_line":"    :type auth_url: string"},{"line_number":127,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_3837784e","line":124,"in_reply_to":"1aca2d91_b644341b","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    from the HTTP headers in the response with the ECP wrapped SAML assertion."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    :param auth_url: URL of the Identity Service"},{"line_number":126,"context_line":"    :type auth_url: string"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    :param sp_url: URL where the ECP wrapped SAML assertion will be presented"},{"line_number":129,"context_line":"                   to the keystone SP."}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_f6850c59","line":126,"updated":"2015-05-07 16:50:58.000000000","message":"this should be clarified to say it\u0027s the auth_url of the remote keystone (the SP)","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    from the HTTP headers in the response with the ECP wrapped SAML assertion."},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    :param auth_url: URL of the Identity Service"},{"line_number":126,"context_line":"    :type auth_url: string"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    :param sp_url: URL where the ECP wrapped SAML assertion will be presented"},{"line_number":129,"context_line":"                   to the keystone SP."}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_78c290ea","line":126,"in_reply_to":"1aca2d91_f6850c59","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                   to the keystone SP."},{"line_number":130,"context_line":"    :type sp_url: string"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    :param sp_auth_url: Authentication URL of the keystone SP."},{"line_number":133,"context_line":"    :type sp_auth_url: string"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    :param ecp_assertion: An ECP wrapped SAML assertion obtained from a"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_368ca47e","line":132,"updated":"2015-05-07 16:50:58.000000000","message":"this should be clarified to say it\u0027s the federated auth URL","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                   to the keystone SP."},{"line_number":130,"context_line":"    :type sp_url: string"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    :param sp_auth_url: Authentication URL of the keystone SP."},{"line_number":133,"context_line":"    :type sp_auth_url: string"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    :param ecp_assertion: An ECP wrapped SAML assertion obtained from a"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_18b4bc7d","line":132,"in_reply_to":"1aca2d91_368ca47e","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        The assertion is issued by the keystone IdP and it is targeted to the"},{"line_number":172,"context_line":"        keystone that will serve as Service Provider."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        The Service Provider contains two URLs that are used in this process::"},{"line_number":175,"context_line":"        * sp_url: the Shibboleth endpoint to send the ECP wrapped SAML"},{"line_number":176,"context_line":"                    assertion."},{"line_number":177,"context_line":"        * auth_url: the endpoint to retrieve the unscoped token after"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_7691fc51","line":174,"updated":"2015-05-07 16:50:58.000000000","message":"you can remove this block, in favor of explaining it in the class docstring. it\u0027s a bit weird since listing variables out like that made me think they are parameters","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":171,"context_line":"        The assertion is issued by the keystone IdP and it is targeted to the"},{"line_number":172,"context_line":"        keystone that will serve as Service Provider."},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        The Service Provider contains two URLs that are used in this process::"},{"line_number":175,"context_line":"        * sp_url: the Shibboleth endpoint to send the ECP wrapped SAML"},{"line_number":176,"context_line":"                    assertion."},{"line_number":177,"context_line":"        * auth_url: the endpoint to retrieve the unscoped token after"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_386f78fd","line":174,"in_reply_to":"1aca2d91_7691fc51","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return response"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _get_unscoped_token(self, session):"},{"line_number":201,"context_line":"        \"\"\"Get unscoped token after authenticate to the Service Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        Send the ECP wrapped SAML assertion to the keystone SP to get a"},{"line_number":204,"context_line":"        valid OpenStack unscoped token to be used against the keystone SP."}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_d6269067","line":201,"updated":"2015-05-07 16:50:58.000000000","message":"authenticating*","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        return response"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def _get_unscoped_token(self, session):"},{"line_number":201,"context_line":"        \"\"\"Get unscoped token after authenticate to the Service Provider."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        Send the ECP wrapped SAML assertion to the keystone SP to get a"},{"line_number":204,"context_line":"        valid OpenStack unscoped token to be used against the keystone SP."}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_d880648d","line":201,"in_reply_to":"1aca2d91_d6269067","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"1e46456a2ac20d8e0790f2e6e7b5a87b1a5bee4d","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        if not self.saml_response:"},{"line_number":210,"context_line":"            # store the saml_response to prevent re-posting the ECP a 2nd"},{"line_number":211,"context_line":"            # time"},{"line_number":212,"context_line":"            self.saml_response \u003d self. \\"},{"line_number":213,"context_line":"                _send_service_provider_ecp_authn_response(session)"},{"line_number":214,"context_line":"        return (self.saml_response.headers[\u0027X-Subject-Token\u0027],"},{"line_number":215,"context_line":"                self.saml_response.json()[\u0027token\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"1aca2d91_5604c0be","line":212,"updated":"2015-05-07 16:50:58.000000000","message":"avoid backslash\n\n  self.saml_response \u003d (\n    self._send_service_provider_ecp_authn_response(session))","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"26e7c60f1a543af57f0094fb5bc662a0a54c297f","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        if not self.saml_response:"},{"line_number":210,"context_line":"            # store the saml_response to prevent re-posting the ECP a 2nd"},{"line_number":211,"context_line":"            # time"},{"line_number":212,"context_line":"            self.saml_response \u003d self. \\"},{"line_number":213,"context_line":"                _send_service_provider_ecp_authn_response(session)"},{"line_number":214,"context_line":"        return (self.saml_response.headers[\u0027X-Subject-Token\u0027],"},{"line_number":215,"context_line":"                self.saml_response.json()[\u0027token\u0027])"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a016987_78505032","line":212,"in_reply_to":"1aca2d91_5604c0be","updated":"2015-05-22 18:18:12.000000000","message":"Done","commit_id":"258c2050af614c91e16cc5d543f5fb3d9dee05fd"}]}
