Merge pull request #19 from docker/not_permanently_cache_invalid_auth_header

CLOUD-3774 not permanently cache invalid auth header
This commit is contained in:
Feng Honglin 2016-12-01 13:49:00 -08:00 committed by GitHub
commit 9ffe81583c
2 changed files with 5 additions and 10 deletions

View file

@ -267,11 +267,7 @@ class Triggerable(BasicObject):
class StreamingAPI(BasicObject): class StreamingAPI(BasicObject):
def __init__(self, url): def __init__(self, url):
self._ws_init(url)
def _ws_init(self, url):
self.url = url self.url = url
user_agent = 'python-dockercloud/%s' % dockercloud.__version__ user_agent = 'python-dockercloud/%s' % dockercloud.__version__
if dockercloud.user_agent: if dockercloud.user_agent:
user_agent = "%s %s" % (dockercloud.user_agent, user_agent) user_agent = "%s %s" % (dockercloud.user_agent, user_agent)

View file

@ -21,8 +21,6 @@ class Events(StreamingAPI):
else: else:
url = "/".join([dockercloud.stream_host.rstrip("/"), "api", "audit", self._api_version, url = "/".join([dockercloud.stream_host.rstrip("/"), "api", "audit", self._api_version,
endpoint.lstrip("/")]) endpoint.lstrip("/")])
self.invaid_auth_headers = set()
self.auth_error = ""
super(self.__class__, self).__init__(url) super(self.__class__, self).__init__(url)
def _on_message(self, ws, message): def _on_message(self, ws, message):
@ -39,15 +37,16 @@ class Events(StreamingAPI):
def _on_error(self, ws, e): def _on_error(self, ws, e):
if isinstance(e, websocket._exceptions.WebSocketBadStatusException) and getattr(e, "status_code") == 401: if isinstance(e, websocket._exceptions.WebSocketBadStatusException) and getattr(e, "status_code") == 401:
self.auth_error = "Not Authorized" self.auth_error = True
self.invaid_auth_headers.add(str(dockercloud.auth.get_auth_header()))
super(self.__class__, self)._on_error(ws, e) super(self.__class__, self)._on_error(ws, e)
def run_forever(self, *args, **kwargs): def run_forever(self, *args, **kwargs):
while True: while True:
if str(dockercloud.auth.get_auth_header()) in self.invaid_auth_headers: if self.auth_error:
raise AuthError(self.auth_error) self.auth_error = False
raise AuthError("Not Authorized")
ws = websocket.WebSocketApp(self.url, header=self.header, ws = websocket.WebSocketApp(self.url, header=self.header,
on_open=self._on_open, on_open=self._on_open,
on_message=self._on_message, on_message=self._on_message,