)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Convert auth_token to use session"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch should emulate the same behaviour of the existing auth token"},{"line_number":10,"context_line":"middleware but using the new session object for requesting and token"},{"line_number":11,"context_line":"management."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2FkM4%3D","line":10,"updated":"2014-04-12 15:20:40.000000000","message":"change \"requesting\" to \"request\"","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Convert auth_token to use session"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch should emulate the same behaviour of the existing auth token"},{"line_number":10,"context_line":"middleware but using the new session object for requesting and token"},{"line_number":11,"context_line":"management."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2FhXo%3D","line":10,"in_reply_to":"AAAAW3%2F%2FkM4%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"},{"line_number":14,"context_line":"auth token refreshed if it was stale. This is no longer handled by the"},{"line_number":15,"context_line":"middleware but expected to be managed by the auth plugin."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Blueprint: keystoneclient-auth-token"},{"line_number":18,"context_line":"Change-Id: I1e7a4a63fd52ace92a1000d3f9330961c42e411f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2FkM0%3D","line":15,"updated":"2014-04-12 15:20:40.000000000","message":"should be able to validate it happens via a mock?","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"},{"line_number":14,"context_line":"auth token refreshed if it was stale. This is no longer handled by the"},{"line_number":15,"context_line":"middleware but expected to be managed by the auth plugin."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Blueprint: keystoneclient-auth-token"},{"line_number":18,"context_line":"Change-Id: I1e7a4a63fd52ace92a1000d3f9330961c42e411f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"AAAAW3%2F%2FhXs%3D","line":15,"in_reply_to":"AAAAW3%2F%2FkM0%3D","updated":"2014-04-14 00:55:28.000000000","message":"Umm, not really because auth token would retry getting a token with any auth scheme. \n\nBesides what we would be testing here is a feature of the session/auth plugin to be able to reauthenticate when it is expired rather than a feature of the middleware.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5223ffe458dcbc28cb00eaa4bee5897498179079","unresolved":false,"context_lines":[{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"},{"line_number":14,"context_line":"auth token refreshed if it was stale. This is no longer handled by the"},{"line_number":15,"context_line":"middleware but expected to be managed by the auth plugin."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Blueprint: keystoneclient-auth-token"},{"line_number":18,"context_line":"Change-Id: I1e7a4a63fd52ace92a1000d3f9330961c42e411f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAW3%2F%2FYcc%3D","line":16,"updated":"2014-04-15 01:12:24.000000000","message":"the commit message should say that this is going to break any system that was relying on the questionable behavior where the auth_token middleware will switch to the admin user/password if the admin_token is rejected with a 401. -- I opened a bug for it, so could put\n\n Closes-Bug: #1307252","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8704eb09227078459f82e477b7c0ee4b3a971a4c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"There is one test removed in this patch which was to do with having the"},{"line_number":14,"context_line":"auth token refreshed if it was stale. This is no longer handled by the"},{"line_number":15,"context_line":"middleware but expected to be managed by the auth plugin."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Blueprint: keystoneclient-auth-token"},{"line_number":18,"context_line":"Change-Id: I1e7a4a63fd52ace92a1000d3f9330961c42e411f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"7adec928_6fd2eb35","line":16,"in_reply_to":"AAAAW3%2F%2FYcc%3D","updated":"2014-05-21 04:47:29.000000000","message":"Done","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"}],"keystoneclient/middleware/auth_token.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3ca1a736c863dcfbd8222e2f2f641dfadfeb8063","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            self.request_uri \u003d \"%s/%s\" % (self.request_uri,"},{"line_number":438,"context_line":"                                          auth_admin_prefix.strip(\u0027/\u0027))"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":441,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":442,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":443,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FGP4%3D","line":440,"updated":"2014-03-09 21:24:13.000000000","message":"Why are we using construct here when it\u0027s deprecated?","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"74d37435551b5bfd630f909b7c58bd21ae85aaf9","unresolved":false,"context_lines":[{"line_number":437,"context_line":"            self.request_uri \u003d \"%s/%s\" % (self.request_uri,"},{"line_number":438,"context_line":"                                          auth_admin_prefix.strip(\u0027/\u0027))"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":441,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":442,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":443,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FGNs%3D","line":440,"in_reply_to":"AAAAVn%2F%2FGP4%3D","updated":"2014-03-09 21:40:05.000000000","message":"It\u0027s deprecated in the sense that you should be using the new parameter names that reflect the requests names. The construct function takes the old parameter names and converts it to the new form, and what we have here are the old parameter names.\n\nIt\u0027s deprecated because you should use the new params rather than this function.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"3ca1a736c863dcfbd8222e2f2f641dfadfeb8063","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # NOTE(jamielennox): The below could probably rely on v2.Auth.factory"},{"line_number":448,"context_line":"        # however there are a lot of tests that don\u0027t set username/password"},{"line_number":449,"context_line":"        token \u003d self._conf_get(\u0027admin_token\u0027)"},{"line_number":450,"context_line":"        auth_url \u003d \u0027%s/v2.0\u0027 % self.request_uri"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if token:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FGPk%3D","line":449,"updated":"2014-03-09 21:24:13.000000000","message":"suggest put this right before line 452 since that\u0027s the only place it\u0027s used.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"74d37435551b5bfd630f909b7c58bd21ae85aaf9","unresolved":false,"context_lines":[{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # NOTE(jamielennox): The below could probably rely on v2.Auth.factory"},{"line_number":448,"context_line":"        # however there are a lot of tests that don\u0027t set username/password"},{"line_number":449,"context_line":"        token \u003d self._conf_get(\u0027admin_token\u0027)"},{"line_number":450,"context_line":"        auth_url \u003d \u0027%s/v2.0\u0027 % self.request_uri"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        if token:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2FGM8%3D","line":449,"in_reply_to":"AAAAVn%2F%2FGPk%3D","updated":"2014-03-09 21:40:05.000000000","message":"auth_url is only used in the next block as well. It also relates to the comment.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20a59c196bee6e115b536e47bdd55c1e037bcf38","unresolved":false,"context_lines":[{"line_number":693,"context_line":"        resp \u003d MiniResp(\u0027Authentication required\u0027, env, headers)"},{"line_number":694,"context_line":"        start_response(\u0027401 Unauthorized\u0027, resp.headers)"},{"line_number":695,"context_line":"        return resp.body"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"    def _http_request(self, method, path, **kwargs):"},{"line_number":698,"context_line":"        \"\"\"HTTP request helper used to make unspecified content type requests."},{"line_number":699,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2FwXE%3D","line":696,"updated":"2014-02-28 14:37:42.000000000","message":"Note to other reviewers: session handles getting tokens.   Removing custom code like this is one of the additional benefits.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20a59c196bee6e115b536e47bdd55c1e037bcf38","unresolved":false,"context_lines":[{"line_number":704,"context_line":""},{"line_number":705,"context_line":"        \"\"\""},{"line_number":706,"context_line":"        url \u003d \"%s/%s\" % (self.request_uri, path.lstrip(\u0027/\u0027))"},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        RETRIES \u003d self.http_request_max_retries"},{"line_number":709,"context_line":"        retry \u003d 0"},{"line_number":710,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2FwWA%3D","line":707,"updated":"2014-02-28 14:37:42.000000000","message":"Note to other reviewers: Client has much better SSL handling than this file had previously.  SSL work is no longer required.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"20a59c196bee6e115b536e47bdd55c1e037bcf38","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        return response"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def _json_request(self, method, path, **kwargs):"},{"line_number":728,"context_line":"        \"\"\"HTTP request helper used to make json requests."},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        :param method: http method"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVX%2F%2FwVU%3D","line":727,"updated":"2014-02-28 14:37:42.000000000","message":"Can we replace calls to this function with direct client calls completely?  Is the logging and header setup really required?  Still, this  an improvement.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"fce4aaf4d43269f32e12b49045998ada7b361212","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"        return response"},{"line_number":726,"context_line":""},{"line_number":727,"context_line":"    def _json_request(self, method, path, **kwargs):"},{"line_number":728,"context_line":"        \"\"\"HTTP request helper used to make json requests."},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"        :param method: http method"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2F%2Bp8%3D","line":727,"in_reply_to":"AAAAVX%2F%2FwVU%3D","updated":"2014-03-03 01:38:18.000000000","message":"We could but i don\u0027t think it would be that much nicer. Session doesn\u0027t set a default \u0027Accept\u0027, i don\u0027t think that\u0027s its job to make decisions like that and this centralizes the JSON decode failure. \n\nWhat i could/would like to do is change _json_request to just return the data and not the request object. It shouldn\u0027t need that - but it\u0027s mostly aesthetics.","commit_id":"e0819144a36ce7c5c90751ea56c44d3c18ffc30d"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0827761df6851757b42187faa6e702078ac01bba","unresolved":false,"context_lines":[{"line_number":458,"context_line":"        # Credentials used to verify this component with the Auth service since"},{"line_number":459,"context_line":"        # validating tokens is a privileged call"},{"line_number":460,"context_line":"        self.admin_token \u003d self._conf_get(\u0027admin_token\u0027)"},{"line_number":461,"context_line":"        self.admin_token_expiry \u003d None"},{"line_number":462,"context_line":"        self.admin_user \u003d self._conf_get(\u0027admin_user\u0027)"},{"line_number":463,"context_line":"        self.admin_password \u003d self._conf_get(\u0027admin_password\u0027)"},{"line_number":464,"context_line":"        self.admin_tenant_name \u003d self._conf_get(\u0027admin_tenant_name\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B%2FTY%3D","side":"PARENT","line":461,"updated":"2014-03-10 20:55:48.000000000","message":"what happen to the \u0027admin_token_expiry\u0027 option?","commit_id":"8246e65c02e6c89e549add4680d9ce0fad4daba7"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"efcad78b4fde496f0794ba4753ffd8f3af080ca2","unresolved":false,"context_lines":[{"line_number":154,"context_line":"import six"},{"line_number":155,"context_line":"from six.moves import urllib"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"from keystoneclient.auth.identity import v2"},{"line_number":158,"context_line":"from keystoneclient.common import cms"},{"line_number":159,"context_line":"from keystoneclient import exceptions"},{"line_number":160,"context_line":"from keystoneclient.middleware import memcache_crypt"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B%2F0I%3D","line":157,"updated":"2014-03-10 19:51:33.000000000","message":"Note to other reviewers: this is a good first step to moving to V3.  It will facilitate V3 being used in a later patch.","commit_id":"b2d1b4e23f4bdcdc55c14006d0b0b301b09a6f54"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0827761df6851757b42187faa6e702078ac01bba","unresolved":false,"context_lines":[{"line_number":451,"context_line":"            self.session.auth \u003d v2.Token("},{"line_number":452,"context_line":"                auth_url,"},{"line_number":453,"context_line":"                token,"},{"line_number":454,"context_line":"                tenant_name\u003dself._conf_get(\u0027admin_tenant_name\u0027))"},{"line_number":455,"context_line":"        else:"},{"line_number":456,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":457,"context_line":"                auth_url,"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B%2FV4%3D","line":454,"updated":"2014-03-10 20:55:48.000000000","message":"I don\u0027t think that\u0027s how the \u0027admin_token\u0027 is intended for. See\n\nhttps://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/middleware/auth_token.py#L238\n\nI am not a fan of the static admin token myself. But I am afraid this will break backward compatibility.","commit_id":"b2d1b4e23f4bdcdc55c14006d0b0b301b09a6f54"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0827761df6851757b42187faa6e702078ac01bba","unresolved":false,"context_lines":[{"line_number":456,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":457,"context_line":"                auth_url,"},{"line_number":458,"context_line":"                username\u003dself._conf_get(\u0027admin_user\u0027),"},{"line_number":459,"context_line":"                password\u003dself._conf_get(\u0027admin_password\u0027),"},{"line_number":460,"context_line":"                tenant_name\u003dself._conf_get(\u0027admin_tenant_name\u0027))"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # signing"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B%2FT8%3D","line":459,"updated":"2014-03-10 20:55:48.000000000","message":"what happen to the \u0027admin_token_expiry\u0027 option?","commit_id":"b2d1b4e23f4bdcdc55c14006d0b0b301b09a6f54"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"0827761df6851757b42187faa6e702078ac01bba","unresolved":false,"context_lines":[{"line_number":457,"context_line":"                auth_url,"},{"line_number":458,"context_line":"                username\u003dself._conf_get(\u0027admin_user\u0027),"},{"line_number":459,"context_line":"                password\u003dself._conf_get(\u0027admin_password\u0027),"},{"line_number":460,"context_line":"                tenant_name\u003dself._conf_get(\u0027admin_tenant_name\u0027))"},{"line_number":461,"context_line":""},{"line_number":462,"context_line":"        # signing"},{"line_number":463,"context_line":"        self.signing_dirname \u003d self._conf_get(\u0027signing_dir\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B%2FVo%3D","line":460,"updated":"2014-03-10 20:55:48.000000000","message":"Should be hardcoding auth to use V2. Are we going to fix this in a separate patch?","commit_id":"b2d1b4e23f4bdcdc55c14006d0b0b301b09a6f54"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.auth_uri \u003d urllib.parse.urljoin(self.identity_uri, \u0027/\u0027)"},{"line_number":458,"context_line":"            self.auth_uri \u003d self.auth_uri.rstrip(\u0027/\u0027)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":461,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":462,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":463,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkMM%3D","line":460,"updated":"2014-04-12 15:20:40.000000000","message":"Session.construct is deprecated. The docstring for construct don\u0027t say what the replacement is, otherwise I\u0027d suggest to use that instead.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.auth_uri \u003d urllib.parse.urljoin(self.identity_uri, \u0027/\u0027)"},{"line_number":458,"context_line":"            self.auth_uri \u003d self.auth_uri.rstrip(\u0027/\u0027)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":461,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":462,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":463,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhhs%3D","line":460,"in_reply_to":"AAAAW3%2F%2FkMM%3D","updated":"2014-04-14 00:55:28.000000000","message":"i think i worded that badly but deprecated was something people could understand.\n\nThe point there was that if you are using the old style of config options (like we are with insecure and cacert) then you can use construct() to make the session. However if you are looking to use the client for a new project then you should just create the session object normally (ie __init__). \n\nIn this case this matches what construct is there for.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        token \u003d self._conf_get(\u0027admin_token\u0027)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if token:"},{"line_number":471,"context_line":"            self.session.auth \u003d token_endpoint.Token(auth_url, token)"},{"line_number":472,"context_line":"        else:"},{"line_number":473,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":474,"context_line":"                auth_url,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkL8%3D","line":471,"updated":"2014-04-12 15:20:40.000000000","message":"the docstring for Token says it\u0027s only useful for testing and CLI cases... seems like we shouldn\u0027t be using it in the auth_token middleware. (or the docstring is inaccurate)","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":468,"context_line":"        token \u003d self._conf_get(\u0027admin_token\u0027)"},{"line_number":469,"context_line":""},{"line_number":470,"context_line":"        if token:"},{"line_number":471,"context_line":"            self.session.auth \u003d token_endpoint.Token(auth_url, token)"},{"line_number":472,"context_line":"        else:"},{"line_number":473,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":474,"context_line":"                auth_url,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhhc%3D","line":471,"in_reply_to":"AAAAW3%2F%2FkL8%3D","updated":"2014-04-14 00:55:28.000000000","message":"I would agree - and i think that using an admin token in auth_token middleware constitutes testing because it\u0027s something you should never do in production.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":474,"context_line":"                auth_url,"},{"line_number":475,"context_line":"                username\u003dself._conf_get(\u0027admin_user\u0027),"},{"line_number":476,"context_line":"                password\u003dself._conf_get(\u0027admin_password\u0027),"},{"line_number":477,"context_line":"                tenant_name\u003dself._conf_get(\u0027admin_tenant_name\u0027))"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        # signing"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkLk%3D","line":476,"updated":"2014-04-12 15:20:40.000000000","message":"suggest remove \"username\u003d\" and \"password\u003d\" since these are positional params.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            self.session.auth \u003d v2.Password("},{"line_number":474,"context_line":"                auth_url,"},{"line_number":475,"context_line":"                username\u003dself._conf_get(\u0027admin_user\u0027),"},{"line_number":476,"context_line":"                password\u003dself._conf_get(\u0027admin_password\u0027),"},{"line_number":477,"context_line":"                tenant_name\u003dself._conf_get(\u0027admin_tenant_name\u0027))"},{"line_number":478,"context_line":""},{"line_number":479,"context_line":"        # signing"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhXA%3D","line":476,"in_reply_to":"AAAAW3%2F%2FkLk%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        self.signing_ca_file_name \u003d val"},{"line_number":491,"context_line":"        val \u003d \u0027%s/revoked.pem\u0027 % self.signing_dirname"},{"line_number":492,"context_line":"        self.revoked_file_name \u003d val"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        # Token caching"},{"line_number":495,"context_line":"        self._cache_pool \u003d None"},{"line_number":496,"context_line":"        self._cache_initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkLQ%3D","line":493,"updated":"2014-04-12 15:20:40.000000000","message":"The comment \"Credentials used to verify...\" was useful and should be preserved in this change.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":490,"context_line":"        self.signing_ca_file_name \u003d val"},{"line_number":491,"context_line":"        val \u003d \u0027%s/revoked.pem\u0027 % self.signing_dirname"},{"line_number":492,"context_line":"        self.revoked_file_name \u003d val"},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        # Token caching"},{"line_number":495,"context_line":"        self._cache_pool \u003d None"},{"line_number":496,"context_line":"        self._cache_initialized \u003d False"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhhI%3D","line":493,"in_reply_to":"AAAAW3%2F%2FkLQ%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        try:"},{"line_number":578,"context_line":"            response, data \u003d self._json_request(\u0027GET\u0027, \u0027/\u0027,"},{"line_number":579,"context_line":"                                                authenticated\u003dFalse)"},{"line_number":580,"context_line":"        except exceptions.HTTPNotImplemented:"},{"line_number":581,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":582,"context_line":"            versions.append(\"v2.0\")"},{"line_number":583,"context_line":"        except exceptions.HttpError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkLI%3D","line":580,"updated":"2014-04-12 15:20:40.000000000","message":"This is the deprecated name. It\u0027s HttpNotImplemented now.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        try:"},{"line_number":578,"context_line":"            response, data \u003d self._json_request(\u0027GET\u0027, \u0027/\u0027,"},{"line_number":579,"context_line":"                                                authenticated\u003dFalse)"},{"line_number":580,"context_line":"        except exceptions.HTTPNotImplemented:"},{"line_number":581,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":582,"context_line":"            versions.append(\"v2.0\")"},{"line_number":583,"context_line":"        except exceptions.HttpError:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhg8%3D","line":580,"in_reply_to":"AAAAW3%2F%2FkLI%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":581,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":582,"context_line":"            versions.append(\"v2.0\")"},{"line_number":583,"context_line":"        except exceptions.HttpError:"},{"line_number":584,"context_line":"            raise ServiceError(\u0027Unable to get version info from keystone\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if response.status_code !\u003d 300:"},{"line_number":587,"context_line":"            self.LOG.error(\u0027Unable to get version info from keystone: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkK4%3D","line":584,"updated":"2014-04-12 15:20:40.000000000","message":"change \"keystone\" to \"Identity API server\"","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":581,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":582,"context_line":"            versions.append(\"v2.0\")"},{"line_number":583,"context_line":"        except exceptions.HttpError:"},{"line_number":584,"context_line":"            raise ServiceError(\u0027Unable to get version info from keystone\u0027)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        if response.status_code !\u003d 300:"},{"line_number":587,"context_line":"            self.LOG.error(\u0027Unable to get version info from keystone: %s\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhg4%3D","line":584,"in_reply_to":"AAAAW3%2F%2FkK4%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        start_response(\u0027401 Unauthorized\u0027, resp.headers)"},{"line_number":703,"context_line":"        return resp.body"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    def _http_request(self, method, path, **kwargs):"},{"line_number":706,"context_line":"        \"\"\"HTTP request helper used to make unspecified content type requests."},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        :param method: http method"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkKo%3D","line":705,"updated":"2014-04-12 15:20:40.000000000","message":"What this used to do, when we had get_admin_token, is that if you set both the token and the admin_user, it would switch from the token to the admin_user when there was an error from the server. I\u0027m guessing this change breaks that.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":702,"context_line":"        start_response(\u0027401 Unauthorized\u0027, resp.headers)"},{"line_number":703,"context_line":"        return resp.body"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"    def _http_request(self, method, path, **kwargs):"},{"line_number":706,"context_line":"        \"\"\"HTTP request helper used to make unspecified content type requests."},{"line_number":707,"context_line":""},{"line_number":708,"context_line":"        :param method: http method"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhgg%3D","line":705,"in_reply_to":"AAAAW3%2F%2FkKo%3D","updated":"2014-04-14 00:55:28.000000000","message":"Yes, and this was a bit of an issue in getting through the gate.\n\nHowever (and talking to dolph) i think this is a reasonable break. If you specify an admin token and that doesn\u0027t work then you should fail. You should know what your middleware is doing when connecting to your server.\n\nIn general using admin tokens should go away.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            try:"},{"line_number":720,"context_line":"                response \u003d self.session.request(url, method, **kwargs)"},{"line_number":721,"context_line":"                break"},{"line_number":722,"context_line":"            except exceptions.HttpError:"},{"line_number":723,"context_line":"                raise"},{"line_number":724,"context_line":"            except Exception as e:"},{"line_number":725,"context_line":"                if retry \u003e\u003d RETRIES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkKg%3D","line":722,"updated":"2014-04-12 15:20:40.000000000","message":"why can\u0027t we retry in this case? add a comment.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":719,"context_line":"            try:"},{"line_number":720,"context_line":"                response \u003d self.session.request(url, method, **kwargs)"},{"line_number":721,"context_line":"                break"},{"line_number":722,"context_line":"            except exceptions.HttpError:"},{"line_number":723,"context_line":"                raise"},{"line_number":724,"context_line":"            except Exception as e:"},{"line_number":725,"context_line":"                if retry \u003e\u003d RETRIES:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhYM%3D","line":722,"in_reply_to":"AAAAW3%2F%2FkKg%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        \"\"\""},{"line_number":745,"context_line":"        headers \u003d kwargs.setdefault(\u0027headers\u0027, {})"},{"line_number":746,"context_line":"        headers.setdefault(\u0027Accept\u0027, \u0027application/json\u0027)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        response \u003d self._http_request(method, path, **kwargs)"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkKc%3D","line":746,"updated":"2014-04-12 15:20:40.000000000","message":"I don\u0027t think we want a json request to set anything other than Accept: application/json. Change from setdefault to [].","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":743,"context_line":""},{"line_number":744,"context_line":"        \"\"\""},{"line_number":745,"context_line":"        headers \u003d kwargs.setdefault(\u0027headers\u0027, {})"},{"line_number":746,"context_line":"        headers.setdefault(\u0027Accept\u0027, \u0027application/json\u0027)"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"        response \u003d self._http_request(method, path, **kwargs)"},{"line_number":749,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2Fhgc%3D","line":746,"in_reply_to":"AAAAW3%2F%2FkKc%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"                                                authenticated\u003dTrue,"},{"line_number":1083,"context_line":"                                                headers\u003dheaders)"},{"line_number":1084,"context_line":"        except exceptions.NotFound:"},{"line_number":1085,"context_line":"            self.LOG.warn(\u0027Authorization failed for token\u0027)"},{"line_number":1086,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1087,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1088,"context_line":"            self.LOG.info(\u0027Keystone rejected admin token, resetting\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkJ4%3D","line":1085,"updated":"2014-04-12 15:20:40.000000000","message":"the logs should have more info so that we can debug problems. Could just say \u0027 - Token Not Found\u0027","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":1082,"context_line":"                                                authenticated\u003dTrue,"},{"line_number":1083,"context_line":"                                                headers\u003dheaders)"},{"line_number":1084,"context_line":"        except exceptions.NotFound:"},{"line_number":1085,"context_line":"            self.LOG.warn(\u0027Authorization failed for token\u0027)"},{"line_number":1086,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1087,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1088,"context_line":"            self.LOG.info(\u0027Keystone rejected admin token, resetting\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FheY%3D","line":1085,"in_reply_to":"AAAAW3%2F%2FkJ4%3D","updated":"2014-04-14 00:55:28.000000000","message":"These messages should be exactly the same as the existing.\n\nIs it ok to keep improving debug logging as a seperate review?","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"            self.LOG.warn(\u0027Authorization failed for token\u0027)"},{"line_number":1086,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1087,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1088,"context_line":"            self.LOG.info(\u0027Keystone rejected admin token, resetting\u0027)"},{"line_number":1089,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1090,"context_line":"            self.LOG.error(\u0027Bad response code while validating token: %s\u0027,"},{"line_number":1091,"context_line":"                           e.http_status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkJw%3D","line":1088,"updated":"2014-04-12 15:20:40.000000000","message":"How does this reset the admin token? It would have to switch to the password plugin.\n\nSee line 1173 in the original -- it set self.admin_token \u003d None.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":1085,"context_line":"            self.LOG.warn(\u0027Authorization failed for token\u0027)"},{"line_number":1086,"context_line":"            raise InvalidUserToken(\u0027Token authorization failed\u0027)"},{"line_number":1087,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1088,"context_line":"            self.LOG.info(\u0027Keystone rejected admin token, resetting\u0027)"},{"line_number":1089,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1090,"context_line":"            self.LOG.error(\u0027Bad response code while validating token: %s\u0027,"},{"line_number":1091,"context_line":"                           e.http_status)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhZE%3D","line":1088,"in_reply_to":"AAAAW3%2F%2FkJw%3D","updated":"2014-04-14 00:55:28.000000000","message":"In reality this is not always the case though anyway.\n\nWhen you use a username/password to authenticate it is also saved to the admin_token variable so resetting can also mean to reauthenticate. \n\nChanged the message to just say auth failed.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"            return data"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        self.LOG.warn(\"Invalid user token: %s. Keystone response: %s.\","},{"line_number":1097,"context_line":"                      user_token, data)"},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"        raise InvalidUserToken()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkJg%3D","line":1097,"updated":"2014-04-12 15:20:40.000000000","message":"don\u0027t print the token. this is a potential denial of service.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":1094,"context_line":"            return data"},{"line_number":1095,"context_line":""},{"line_number":1096,"context_line":"        self.LOG.warn(\"Invalid user token: %s. Keystone response: %s.\","},{"line_number":1097,"context_line":"                      user_token, data)"},{"line_number":1098,"context_line":""},{"line_number":1099,"context_line":"        raise InvalidUserToken()"},{"line_number":1100,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhdE%3D","line":1097,"in_reply_to":"AAAAW3%2F%2FkJg%3D","updated":"2014-04-14 00:55:28.000000000","message":"Done","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5aa4e6993a667a31b176e388908de4b7cad0e881","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"                                                authenticated\u003dTrue)"},{"line_number":1235,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1236,"context_line":"            raise ServiceError(\u0027Failed to fetch token revocation list: %d\u0027 %"},{"line_number":1237,"context_line":"                               e.http_status)"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":1240,"context_line":"            raise ServiceError(\u0027Unable to fetch token revocation list.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FkJc%3D","line":1237,"updated":"2014-04-12 15:20:40.000000000","message":"we should be able to print out more info here. The full response would be great.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"33a8ec866a05139de99050b745a31a8bb365fe50","unresolved":false,"context_lines":[{"line_number":1234,"context_line":"                                                authenticated\u003dTrue)"},{"line_number":1235,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1236,"context_line":"            raise ServiceError(\u0027Failed to fetch token revocation list: %d\u0027 %"},{"line_number":1237,"context_line":"                               e.http_status)"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"        if response.status_code !\u003d 200:"},{"line_number":1240,"context_line":"            raise ServiceError(\u0027Unable to fetch token revocation list.\u0027)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAW3%2F%2FhYQ%3D","line":1237,"in_reply_to":"AAAAW3%2F%2FkJc%3D","updated":"2014-04-14 00:55:28.000000000","message":"Let\u0027s put better auth_token logging down as a seperate bluerprint.\n\nIn reality there needs to be some consolidation and rework of this code so that (for example) the full response should be logged EVERY time you get a failure.","commit_id":"c94d949f93b6d89031fccbd751c2befea3132891"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5223ffe458dcbc28cb00eaa4bee5897498179079","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.auth_uri \u003d urllib.parse.urljoin(self.identity_uri, \u0027/\u0027)"},{"line_number":458,"context_line":"            self.auth_uri \u003d self.auth_uri.rstrip(\u0027/\u0027)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":461,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":462,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":463,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2FYaI%3D","line":460,"updated":"2014-04-15 01:12:24.000000000","message":"as mentioned before, this function is deprecated so we shouldn\u0027t be using it. I can\u0027t read the documentation for the method any other way. If the documentation is wrong and it\u0027s not deprecated then the documentation should be fixed. Not only is is deprecated, it\u0027s *DEPRECATED*.\n\nAlternatively, add a comment here that says why it\u0027s ok to use the deprecated method --\n\n # Using the deprecated construct method to bridging the gap between older\n # client arguments and the session arguments","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8704eb09227078459f82e477b7c0ee4b3a971a4c","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            self.auth_uri \u003d urllib.parse.urljoin(self.identity_uri, \u0027/\u0027)"},{"line_number":458,"context_line":"            self.auth_uri \u003d self.auth_uri.rstrip(\u0027/\u0027)"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        self.session \u003d session.Session.construct(dict("},{"line_number":461,"context_line":"            cert\u003dself._conf_get(\u0027certfile\u0027),"},{"line_number":462,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":463,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_2fc70366","line":460,"in_reply_to":"AAAAW3%2F%2FYaI%3D","updated":"2014-05-21 04:47:29.000000000","message":"DEPRECATED was being used as this is old behaviour that you shouldn\u0027t use in new code - which seemed reasonable. \n\nGiven that we are in a position of still dealing with a lot of old code that we cannot break compatibility with it seemed fair to use a function marked as deprecated. I\u0027ve removed the DEPRECATED marker from construct and simply added some more details there about \"you should not use this function for new code\"\n\nThat should give a fair indication that it is a helper function only - don\u0027t default to using that.","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"92efefc2229e3a34c46201324dd202d1cb4c8399","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":584,"context_line":"            versions.append(\"v2.0\")"},{"line_number":585,"context_line":"        except exceptions.HttpError:"},{"line_number":586,"context_line":"            msg \u003d \u0027Unable to get version info from Identity API Server\u0027"},{"line_number":587,"context_line":"            raise ServiceError(msg)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        if response.status_code !\u003d 300:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2Fg%2BU%3D","line":586,"updated":"2014-04-14 03:24:18.000000000","message":"(NIT): We should use the same error message here as on like 590, my preference would be to update line 592. Possibly the same for line 590.","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8704eb09227078459f82e477b7c0ee4b3a971a4c","unresolved":false,"context_lines":[{"line_number":583,"context_line":"            self.LOG.warning(\"Old keystone installation found...assuming v2.0\")"},{"line_number":584,"context_line":"            versions.append(\"v2.0\")"},{"line_number":585,"context_line":"        except exceptions.HttpError:"},{"line_number":586,"context_line":"            msg \u003d \u0027Unable to get version info from Identity API Server\u0027"},{"line_number":587,"context_line":"            raise ServiceError(msg)"},{"line_number":588,"context_line":""},{"line_number":589,"context_line":"        if response.status_code !\u003d 300:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_cf9dbf5b","line":586,"in_reply_to":"AAAAW3%2F%2Fg%2BU%3D","updated":"2014-05-21 04:47:29.000000000","message":"Done","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5223ffe458dcbc28cb00eaa4bee5897498179079","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                break"},{"line_number":725,"context_line":"            except exceptions.HttpError:"},{"line_number":726,"context_line":"                # there\u0027s no point retrying an HTTP error (eg 404) the new"},{"line_number":727,"context_line":"                # request should give the exact same response."},{"line_number":728,"context_line":"                raise"},{"line_number":729,"context_line":"            except Exception as e:"},{"line_number":730,"context_line":"                if retry \u003e\u003d RETRIES:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2FYd8%3D","line":727,"updated":"2014-04-15 01:12:24.000000000","message":"there are several HTTP responses that would indicate that the operation could be retried -- 408 Request Timeout, 503 Service Unavailable, 504 Gateway Timeout, or a failure to connect to the server because it hasn\u0027t started up enough yet to accept connections.","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8704eb09227078459f82e477b7c0ee4b3a971a4c","unresolved":false,"context_lines":[{"line_number":724,"context_line":"                break"},{"line_number":725,"context_line":"            except exceptions.HttpError:"},{"line_number":726,"context_line":"                # there\u0027s no point retrying an HTTP error (eg 404) the new"},{"line_number":727,"context_line":"                # request should give the exact same response."},{"line_number":728,"context_line":"                raise"},{"line_number":729,"context_line":"            except Exception as e:"},{"line_number":730,"context_line":"                if retry \u003e\u003d RETRIES:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_8fbad7be","line":727,"in_reply_to":"AAAAW3%2F%2FYd8%3D","updated":"2014-05-21 04:47:29.000000000","message":"This would constitute a change in behaviour from the current. \n\nHttpErrors are only errors because of the session object, before now they would have been returned as a standard response with a status_code \u003e 400.","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5223ffe458dcbc28cb00eaa4bee5897498179079","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"    def cert_file_missing(self, proc_output, file_name):"},{"line_number":1058,"context_line":"        return (file_name in proc_output and not os.path.exists(file_name))"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"    def verify_uuid_token(self, user_token):"},{"line_number":1061,"context_line":"        \"\"\"Authenticate user token with keystone."},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        :param user_token: user\u0027s token id"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2FYYk%3D","line":1060,"updated":"2014-04-15 01:12:24.000000000","message":"why doesn\u0027t auth_token retry the verify anymore?","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"8704eb09227078459f82e477b7c0ee4b3a971a4c","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"    def cert_file_missing(self, proc_output, file_name):"},{"line_number":1058,"context_line":"        return (file_name in proc_output and not os.path.exists(file_name))"},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"    def verify_uuid_token(self, user_token):"},{"line_number":1061,"context_line":"        \"\"\"Authenticate user token with keystone."},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        :param user_token: user\u0027s token id"}],"source_content_type":"text/x-python","patch_set":8,"id":"7adec928_efc8bb58","line":1060,"in_reply_to":"AAAAW3%2F%2FYYk%3D","updated":"2014-05-21 04:47:29.000000000","message":"retry was used if the admin token was wrong. This will be handled by the plugin now.","commit_id":"e9d917e42641eae597b6f1e341970cfb0afb56f5"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":506,"context_line":"            key\u003dself._conf_get(\u0027keyfile\u0027),"},{"line_number":507,"context_line":"            cacert\u003dself._conf_get(\u0027cafile\u0027),"},{"line_number":508,"context_line":"            insecure\u003dself._conf_get(\u0027insecure\u0027),"},{"line_number":509,"context_line":"            timeout\u003dself._conf_get(\u0027http_connect_timeout\u0027)))"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        auth_url \u003d \u0027%s/v2.0\u0027 % self.identity_uri"},{"line_number":512,"context_line":"        token \u003d self._conf_get(\u0027admin_token\u0027)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_d2ae0d98","line":509,"updated":"2014-06-10 00:53:22.000000000","message":"does this need to int(http_connect_timeout_cfg) as was done originally?","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":794,"context_line":"        \"\"\"HTTP request helper used to make json requests."},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"        :param method: http method"},{"line_number":797,"context_line":"        :param path: relative request url"},{"line_number":798,"context_line":""},{"line_number":799,"context_line":"        :return (http response object, response body parsed as json)"},{"line_number":800,"context_line":"        :raise ServerError when unable to communicate with keystone"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_12f315a0","line":797,"updated":"2014-06-10 00:53:22.000000000","message":"the docstring should say what kwargs are used for.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":814,"context_line":"        return response, data"},{"line_number":815,"context_line":""},{"line_number":816,"context_line":"    def _validate_user_token(self, user_token, env):"},{"line_number":817,"context_line":"        \"\"\"Authenticate user using PKI"},{"line_number":818,"context_line":""},{"line_number":819,"context_line":"        :param user_token: user\u0027s token id"},{"line_number":820,"context_line":"        :return uncrypted body of the token if the token is valid"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_b2d181cf","line":817,"updated":"2014-06-10 00:53:22.000000000","message":"the comment here changed, keep it as it was:\n\n Authenticate user token","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":1123,"context_line":"        self.LOG.debug(\u0027Marking token as unauthorized in cache\u0027)"},{"line_number":1124,"context_line":"        self._cache_store(token_id, \u0027invalid\u0027)"},{"line_number":1125,"context_line":""},{"line_number":1126,"context_line":"    def cert_file_missing(self, proc_output, file_name):"},{"line_number":1127,"context_line":"        return (file_name in proc_output and not os.path.exists(file_name))"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"    def verify_uuid_token(self, user_token):"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_b2e8a17d","line":1126,"updated":"2014-06-10 00:53:22.000000000","message":"what\u0027s this change for? I don\u0027t see that it\u0027s called.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":1157,"context_line":"                                                headers\u003dheaders)"},{"line_number":1158,"context_line":"        except exceptions.NotFound as e:"},{"line_number":1159,"context_line":"            self.LOG.warn(\u0027Authorization failed for token\u0027)"},{"line_number":1160,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"},{"line_number":1161,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1162,"context_line":"            self.LOG.info(\u0027Keystone rejected authorization\u0027)"},{"line_number":1163,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_527cbdb5","line":1160,"updated":"2014-06-10 00:53:22.000000000","message":"We need to be careful here because somebody might just send in a bunch of random strings to try to fill up the log file, and the server response might be larger than we\u0027d like. I think it\u0027d be safer to log this at debug.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":1160,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"},{"line_number":1161,"context_line":"        except exceptions.Unauthorized:"},{"line_number":1162,"context_line":"            self.LOG.info(\u0027Keystone rejected authorization\u0027)"},{"line_number":1163,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"},{"line_number":1164,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1165,"context_line":"            self.LOG.error(\u0027Bad response code while validating token: %s\u0027,"},{"line_number":1166,"context_line":"                           e.http_status)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_924d659c","line":1163,"updated":"2014-06-10 00:53:22.000000000","message":"same here as at line 1160. And in this case, the identity response is at a higher level than the intro message.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1165,"context_line":"            self.LOG.error(\u0027Bad response code while validating token: %s\u0027,"},{"line_number":1166,"context_line":"                           e.http_status)"},{"line_number":1167,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"},{"line_number":1168,"context_line":"        else:"},{"line_number":1169,"context_line":"            if response.status_code \u003d\u003d 200:"},{"line_number":1170,"context_line":"                return data"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_b2442175","line":1167,"updated":"2014-06-10 00:53:22.000000000","message":"and here (debug)","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"            self.LOG.warn(\u0027Identity response: %s\u0027 % e.response.text)"},{"line_number":1168,"context_line":"        else:"},{"line_number":1169,"context_line":"            if response.status_code \u003d\u003d 200:"},{"line_number":1170,"context_line":"                return data"},{"line_number":1171,"context_line":""},{"line_number":1172,"context_line":"        raise InvalidUserToken()"},{"line_number":1173,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_153cdfbe","line":1170,"updated":"2014-06-10 00:53:22.000000000","message":"I think the status code should be logged in an else here, otherwise we don\u0027t know what the status code was if it wasn\u0027t 200.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"27ef58b5f2f54b3ea0e3777967b89d8ab56ef6cd","unresolved":false,"context_lines":[{"line_number":1206,"context_line":"            response, data \u003d self._json_request(\u0027GET\u0027, \u0027/v2.0/tokens/revoked\u0027,"},{"line_number":1207,"context_line":"                                                authenticated\u003dTrue)"},{"line_number":1208,"context_line":"        except exceptions.HttpError as e:"},{"line_number":1209,"context_line":"            raise ServiceError(\u0027Failed to fetch token revocation list: %d\u0027 %"},{"line_number":1210,"context_line":"                               e.http_status)"},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"        if response.status_code !\u003d 200:"}],"source_content_type":"text/x-python","patch_set":11,"id":"1ae5cdf2_e6dfcb38","line":1209,"updated":"2014-06-17 15:01:00.000000000","message":"Add a period to the end of the exception message for consistency.","commit_id":"0478c56888902c5275ae25411c52c32a423bf513"}],"keystoneclient/session.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"ca89af4ff98c718670748b5d4a9e90477f71e136","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        \"\"\"Handles constructing a session from the older HTTPClient args as"},{"line_number":347,"context_line":"        well as the new request style arguments."},{"line_number":348,"context_line":""},{"line_number":349,"context_line":"        This function is purely for bridging the gap between older client"},{"line_number":350,"context_line":"        arguments and the session arguments that they relate to.  It is not"},{"line_number":351,"context_line":"        intended to be used as a generic Session Factory. If you are not"},{"line_number":352,"context_line":"        loading from an existing client or CLI then you should create the"}],"source_content_type":"text/x-python","patch_set":10,"id":"1ae5cdf2_b5a5eb05","line":349,"updated":"2014-06-10 00:53:22.000000000","message":"suggest make this change in a separate commit since it can be left if the change to auth_token has to be reverted.","commit_id":"d872315fa52f9b8c669912e1a71f07c2f169357b"}]}
