Browse Source

Disable providers after repeated login failures

Avoid getting users IP-banned before they know what happened
pull/5485/head
Trevor Bergeron 10 years ago
parent
commit
d44d6ba2c2
  1. 15
      couchpotato/core/media/_base/providers/base.py
  2. 18
      couchpotato/core/media/_base/providers/torrent/passthepopcorn.py

15
couchpotato/core/media/_base/providers/base.py

@ -1,6 +1,7 @@
from urlparse import urlparse
import json
import re
from requests import HTTPError
import time
import traceback
import xml.etree.ElementTree as XMLTree
@ -124,6 +125,7 @@ class YarrProvider(Provider):
size_kb = ['kb', 'kib']
last_login_check = None
login_failures = 0
def __init__(self):
addEvent('provider.enabled_protocols', self.getEnabledProtocol)
@ -160,10 +162,21 @@ class YarrProvider(Provider):
if self.loginSuccess(output):
self.last_login_check = now
self.login_failures = 0
return True
error = 'unknown'
except:
except Exception as e:
if isinstance(e, HTTPError):
if e.response.status_code >= 400 and e.response.status_code < 500:
self.login_failures += 1
if self.login_failures >= 3:
log.error("Failed %s login repeatedly, disabling provider. "
"Please check the configuration. Re-enabling the "
"provider without fixing the problem may result "
"in an IP ban, depending on the site.", self.getName())
self.conf(self.enabled_option, False)
self.login_failures = 0
error = traceback.format_exc()
self.last_login_check = None

18
couchpotato/core/media/_base/providers/torrent/passthepopcorn.py

@ -26,6 +26,7 @@ class Base(TorrentProvider):
'search': 'https://tls.passthepopcorn.me/search/%s/0/7/%d'
}
login_errors = 0
http_time_between_calls = 2
def _search(self, media, quality, results):
@ -177,9 +178,22 @@ class Base(TorrentProvider):
def loginSuccess(self, output):
try:
return json.loads(output).get('Result', '').lower() == 'ok'
if json.loads(output).get('Result', '').lower() == 'ok':
self.login_errors = 0
return True
except:
return False
pass
self.login_errors += 1
if self.login_errors >= 3:
log.error('Disabling PTP provider after repeated failed logins. '
'Please check your configuration. Re-enabling without '
'solving the problem may cause an IP ban. response=%s',
output)
self.conf('enabled', value=False)
self.login_errors = 0
return False
loginCheckSuccess = loginSuccess

Loading…
Cancel
Save