atlassian / atlassian/asap-authentication-python

The HTTPSMultiRepositoryPublicKeyRetriever does use other server when it gets a ConnectionError

オープン
#104 コメント 0 件 リアクション 1 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
26
フォーク
19
PR マージ指標
30日以内にマージされた PR はありません

説明

I have HTTPSMultiRepositoryPublicKeyRetriever setup to use two respositories. However it only attempts the other on 500 errors, but not any thing similar like ConnectionErrors.
```
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 387, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 383, in _make_request
httplib_response = conn.getresponse()
File "/usr/local/lib/python3.7/http/client.py", line 1336, in getresponse
response.begin()
File "/usr/local/lib/python3.7/http/client.py", line 306, in begin
version, status, reason = self._read_status()
File "/usr/local/lib/python3.7/http/client.py", line 267, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/local/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "/usr/local/lib/python3.7/ssl.py", line 1071, in recv_into
return self.read(nbytes, buffer)
File "/usr/local/lib/python3.7/ssl.py", line 929, in read
return self._sslobj.read(len, buffer)
ConnectionResetError: [Errno 104] Connection reset by peer
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 449, in send
timeout=timeout
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 641, in urlopen
_stacktrace=sys.exc_info()[2])
File "/usr/local/lib/python3.7/site-packages/urllib3/util/retry.py", line 368, in increment
raise six.reraise(type(error), error, _stacktrace)
File "/usr/local/lib/python3.7/site-packages/urllib3/packages/six.py", line 685, in reraise
raise value.with_traceback(tb)
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 603, in urlopen
chunked=chunked)
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 387, in _make_request
six.raise_from(e, None)
File "", line 2, in raise_from
File "/usr/local/lib/python3.7/site-packages/urllib3/connectionpool.py", line 383, in _make_request
httplib_response = conn.getresponse()
File "/usr/local/lib/python3.7/http/client.py", line 1336, in getresponse
response.begin()
File "/usr/local/lib/python3.7/http/client.py", line 306, in begin
version, status, reason = self._read_status()
File "/usr/local/lib/python3.7/http/client.py", line 267, in _read_status
line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
File "/usr/local/lib/python3.7/socket.py", line 589, in readinto
return self._sock.recv_into(b)
File "/usr/local/lib/python3.7/ssl.py", line 1071, in recv_into
return self.read(nbytes, buffer)
File "/usr/local/lib/python3.7/ssl.py", line 929, in read
return self._sslobj.read(len, buffer)
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/key.py", line 101, in retrieve
return self._retrieve(url, requests_kwargs)
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/key.py", line 111, in _retrieve
**requests_kwargs)
File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 546, in get
return self.request('GET', url, **kwargs)
File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 533, in request
resp = self.send(prep, **send_kwargs)
File "/usr/local/lib/python3.7/site-packages/requests/sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "/usr/local/lib/python3.7/site-packages/cachecontrol/adapter.py", line 53, in send
resp = super(CacheControlAdapter, self).send(request, **kw)
File "/usr/local/lib/python3.7/site-packages/requests/adapters.py", line 498, in send
raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/src/app/libauth_asap/token.py", line 97, in verify_token
leeway=180 # Do not fail due to small time sync issues. (seconds)
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/verifier.py", line 32, in verify_jwt
public_key = self._retrieve_pub_key(key_identifier, requests_kwargs)
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/verifier.py", line 40, in _retrieve_pub_key
key_identifier, **requests_kwargs)
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/key.py", line 142, in retrieve
return retriever.retrieve(key_identifier, **requests_kwargs)
File "/usr/local/lib/python3.7/site-packages/atlassian_jwt_auth/key.py", line 107, in retrieve
raise PublicKeyRetrieverException(e, status_code=status_code)
atlassian_jwt_auth.exceptions.PublicKeyRetrieverException: ('Connection aborted.', ConnectionResetError(104, 'Connection reset by peer'))
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず、HTTPSMultiRepositoryPublicKeyRetriever と atlassian_jwt_auth/key.py に示されている retrieve パスを見つけます。複数のリポジトリで requests.exceptions.ConnectionError を再現し、既存の 500 エラー時の動作を維持したまま、次のリポジトリへ取得処理が進むことを確認します。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
authentication, backend
issue の種類
バグ
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。