Skip to content

Commit

Permalink
Add CookieAuth
Browse files Browse the repository at this point in the history
Update providers to use CookieAuth
* abnormal
* alpharatio
* bitsoup
* bluetigers
* danishbits
* tntvillage (this may require value-checking of cookies)
  • Loading branch information
labrys committed Mar 8, 2016
1 parent 4f820ee commit adfaf62
Show file tree
Hide file tree
Showing 7 changed files with 293 additions and 188 deletions.
47 changes: 24 additions & 23 deletions sickbeard/providers/abnormal.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,14 @@
from __future__ import unicode_literals

import re

from requests.compat import urljoin
from requests.utils import dict_from_cookiejar

from sickbeard import logger, tvcache
from sickbeard.bs4_parser import BS4Parser

from sickrage.helper.common import convert_size, try_int
from sickrage.providers.auth import CookieAuth
from sickrage.providers.torrent.TorrentProvider import TorrentProvider


Expand All @@ -38,10 +39,6 @@ def __init__(self):
# Provider Init
TorrentProvider.__init__(self, 'ABNormal')

# Credentials
self.username = None
self.password = None

# Torrent Stats
self.ratio = None
self.minseed = None
Expand All @@ -55,35 +52,39 @@ def __init__(self):
}

# Proper Strings
self.proper_strings = ['PROPER']
self.proper_strings = [
'PROPER',
]

# Cache
self.cache = tvcache.TVCache(self, min_time=30)

def login(self):
if any(dict_from_cookiejar(self.session.cookies).values()):
return True

login_params = {
'username': self.username,
'password': self.password,
self.login_params = {
'username': None,
'password': None,
}
self.session.auth = CookieAuth(self.session, self.urls['login'], self.login_params)

@property
def username(self):
return self.login_params['username']

response = self.get_url(self.urls['login'], post_data=login_params, timeout=30, returns='text')
if not response:
logger.log('Unable to connect to provider', logger.WARNING)
return False
@username.setter
def username(self, value):
self.login_params['username'] = value
self.session.auth.payload.update(self.login_params)

if not re.search('torrents.php', response):
logger.log('Invalid username or password. Check your settings', logger.WARNING)
return False
@property
def password(self):
return self.login_params['password']

return True
@password.setter
def password(self, value):
self.login_params['password'] = value
self.session.auth.payload.update(self.login_params)

def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-many-locals, too-many-branches
results = []
if not self.login():
return results

# Search Params
search_params = {
Expand Down
63 changes: 32 additions & 31 deletions sickbeard/providers/alpharatio.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@
# along with SickRage. If not, see <http://www.gnu.org/licenses/>.

from __future__ import unicode_literals
import re

from requests.compat import urljoin
from requests.utils import dict_from_cookiejar

from sickbeard import logger, tvcache
from sickbeard.bs4_parser import BS4Parser

from sickrage.helper.common import convert_size, try_int
from sickrage.providers.auth import CookieAuth
from sickrage.providers.torrent.TorrentProvider import TorrentProvider


Expand All @@ -38,10 +37,6 @@ def __init__(self):
# Provider Init
TorrentProvider.__init__(self, "AlphaRatio")

# Credentials
self.username = None
self.password = None

# Torrent Stats
self.ratio = None
self.minseed = None
Expand All @@ -50,43 +45,49 @@ def __init__(self):
# URLs
self.url = "http://alpharatio.cc"
self.urls = {
"login": urljoin(self.url, "login.php"),
"search": urljoin(self.url, "torrents.php"),
'base_url': self.url,
'login': urljoin(self.url, 'login.php'),
'search': urljoin(self.url, 'torrents.php'),
}

# Proper Strings
self.proper_strings = ["PROPER", "REPACK"]
self.proper_strings = [
'PROPER',
'REPACK',
]

# Cache
self.cache = tvcache.TVCache(self)

def login(self):
if any(dict_from_cookiejar(self.session.cookies).values()):
return True

login_params = {
"username": self.username,
"password": self.password,
"login": "submit",
"remember_me": "on",
# Authentication
self.login_params = {
'username': None,
'password': None,
'login': 'submit',
'remember_me': 'on',
}
self.session.auth = CookieAuth(self.session, self.urls['login'], self.login_params)

@property
def username(self):
return self.login_params['username']

response = self.get_url(self.urls["login"], post_data=login_params, timeout=30, returns="text")
if not response:
logger.log("Unable to connect to provider", logger.WARNING)
return False
@username.setter
def username(self, value):
self.login_params['username'] = value
self.session.auth.payload.update(self.login_params)

if re.search("Invalid Username/password", response) \
or re.search("<title>Login :: AlphaRatio.cc</title>", response):
logger.log("Invalid username or password. Check your settings", logger.WARNING)
return False
@property
def password(self):
return self.login_params['password']

return True
@password.setter
def password(self, value):
self.login_params['password'] = value
self.session.auth.payload.update(self.login_params)

def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-many-locals, too-many-branches
results = []
if not self.login():
return results

# Search Params
search_params = {
Expand All @@ -99,10 +100,10 @@ def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-man
}

# Units
units = ["B", "KB", "MB", "GB", "TB", "PB"]
units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']

def process_column_header(td):
result = ""
result = ''
if td.a and td.a.img:
result = td.a.img.get("title", td.a.get_text(strip=True))
if not result:
Expand Down
77 changes: 39 additions & 38 deletions sickbeard/providers/bitsoup.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,76 +18,77 @@
# You should have received a copy of the GNU General Public License
# along with SickRage. If not, see <http://www.gnu.org/licenses/>.

import re
from __future__ import unicode_literals

import traceback
from requests.utils import dict_from_cookiejar
from requests.compat import urljoin

from sickbeard import logger, tvcache
from sickbeard.bs4_parser import BS4Parser

from sickrage.helper.common import convert_size
from sickrage.providers.auth import CookieAuth
from sickrage.providers.torrent.TorrentProvider import TorrentProvider


class BitSoupProvider(TorrentProvider): # pylint: disable=too-many-instance-attributes

def __init__(self):

# Provider Init
TorrentProvider.__init__(self, "BitSoup")

# Torrent Stats
self.ratio = None
self.minseed = None
self.minleech = None

# URLs
self.url = 'https://www.bitsoup.me'
self.urls = {
'base_url': 'https://www.bitsoup.me',
'login': 'https://www.bitsoup.me/takelogin.php',
'detail': 'https://www.bitsoup.me/details.php?id=%s',
'search': 'https://www.bitsoup.me/browse.php',
'base_url': self.url,
'login': urljoin(self.url, 'takelogin.php'),
'search': urljoin(self.url, 'browse.php'),
'detail': urljoin(self.url, 'details.php?id=%s'),
'download': 'https://bitsoup.me/%s',
}

self.url = self.urls['base_url']

self.username = None
self.password = None
self.ratio = None
self.minseed = None
self.minleech = None
# Proper Strings

# Cache
self.cache = tvcache.TVCache(self)

self.login_params = {
'username': None,
'password': None,
'ssl': 'yes'
}
self.session.auth = CookieAuth(self.session, self.urls['login'], self.login_params)

self.search_params = {
"c42": 1, "c45": 1, "c49": 1, "c7": 1
}

def _check_auth(self):
if not self.username or not self.password:
logger.log(u"Invalid username or password. Check your settings", logger.WARNING)

return True

def login(self):
if any(dict_from_cookiejar(self.session.cookies).values()):
return True

login_params = {
'username': self.username,
'password': self.password,
'ssl': 'yes'
}
@property
def username(self):
return self.login_params['username']

response = self.get_url(self.urls['login'], post_data=login_params, timeout=30)
if not response:
logger.log(u"Unable to connect to provider", logger.WARNING)
return False
@username.setter
def username(self, value):
self.login_params['username'] = value
self.session.auth.payload.update(self.login_params)

if re.search('Username or password incorrect', response):
logger.log(u"Invalid username or password. Check your settings", logger.WARNING)
return False
@property
def password(self):
return self.login_params['password']

return True
@password.setter
def password(self, value):
self.login_params['password'] = value
self.session.auth.payload.update(self.login_params)

def search(self, search_strings, age=0, ep_obj=None): # pylint: disable=too-many-locals
results = []
if not self.login():
return results

for mode in search_strings:
items = []
Expand Down

0 comments on commit adfaf62

Please sign in to comment.