Source code for flexget.plugins.output.download_auth
import re
from loguru import logger
from requests.auth import HTTPBasicAuth, HTTPDigestAuth
from flexget import plugin
from flexget.event import event
PLUGIN_NAME = 'download_auth'
logger = logger.bind(name=PLUGIN_NAME)
[docs]
class DownloadAuth:
host_schema = {
'additionalProperties': {
'type': 'object',
'properties': {
'username': {'type': 'string'},
'password': {'type': 'string'},
'type': {'type': 'string', 'enum': ['basic', 'digest'], 'default': 'basic'},
},
'required': ['username', 'password'],
}
}
schema = {'type': 'array', 'items': host_schema, 'minItems': 1}
auth_mapper = {'basic': HTTPBasicAuth, 'digest': HTTPDigestAuth}
# Run before all downloads
[docs]
@plugin.priority(plugin.PRIORITY_FIRST)
def on_task_download(self, task, config):
for entry in task.accepted:
if entry.get('download_auth'):
logger.debug('entry {} already has auth set, skipping', entry)
continue
for host_config in config:
for host, auth_config in host_config.items():
if re.search(host, entry['url'], re.IGNORECASE):
auth_type = auth_config['type']
username = auth_config['username']
password = auth_config['password']
logger.debug('setting auth type {} with username {}', auth_type, username)
entry['download_auth'] = self.auth_mapper[auth_type](username, password)
[docs]
@event('plugin.register')
def register_plugin():
plugin.register(DownloadAuth, PLUGIN_NAME, api_ver=2)