fix download episodes requiring authentication

This commit is contained in:
Eric Le Lay 2018-12-15 16:18:47 +01:00
parent f51ef5a88e
commit ad86c35b9a
2 changed files with 31 additions and 1 deletions

View File

@ -198,7 +198,22 @@ class DownloadURLOpener(urllib.request.FancyURLopener):
def __init__(self, channel):
self.channel = channel
self._auth_retry_counter = 0
urllib.request.FancyURLopener.__init__(self, None)
super().__init__()
def http_error(self, url, fp, errcode, errmsg, headers, data=None):
"""Handle http errors.
Overriden to give retry=True to http_error_40{1,7}.
See https://github.com/python/cpython/commit/80f1b059714aeb1c6fc9f6ce1173bc8a51af7dd9
See python issue https://bugs.python.org/issue1368368
"""
result = False
if errcode == 401:
result = self.http_error_401(url, fp, errcode, errmsg, headers, data=data, retry=True)
elif errcode == 407:
result = self.http_error_407(url, fp, errcode, errmsg, headers, data=data, retry=True)
if result:
return result
return super().http_error(url, fp, errcode, errmsg, headers, data=data)
def http_error_default(self, url, fp, errcode, errmsg, headers):
"""

View File

@ -54,6 +54,16 @@ def mkrss(items=EP_COUNT):
</item>
""" % dict(list(locals().items()) + list(globals().items()))
for INDEX, PUBDATE in enumerate(mkpubdates(items)))
ITEMS += """
<item>
<title>Missing Episode</title>
<guid>tag:test.gpodder.org,2012:missing</guid>
<pubDate>Sun, 25 Nov 2018 17:28:03 +0000</pubDate>
<enclosure
url="%(URL)s/not_there%(EPISODES_EXT)s"
type="%(EPISODES_MIME)s"
length="%(SIZE)s"/>
</item>""" % dict(list(locals().items()) + list(globals().items()))
return """
<rss>
@ -111,6 +121,11 @@ class AuthRequestHandler(http.server.BaseHTTPRequestHandler):
'Basic realm="%s"' % sys.argv[0])
self.end_headers()
return
if not is_feed and not is_episode:
print('Not there episode - sending 404.')
self.send_response(404)
self.end_headers()
return
self.send_response(200)
self.send_header('Content-type',