diff options
Diffstat (limited to 'module/plugins/Account.py')
-rw-r--r-- | module/plugins/Account.py | 93 |
1 files changed, 52 insertions, 41 deletions
diff --git a/module/plugins/Account.py b/module/plugins/Account.py index bd7f97cba..c147404e0 100644 --- a/module/plugins/Account.py +++ b/module/plugins/Account.py @@ -1,14 +1,30 @@ # -*- coding: utf-8 -*- +""" + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, + or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see <http://www.gnu.org/licenses/>. + + @author: mkaay +""" + from random import choice from time import time from traceback import print_exc from threading import RLock -from module.plugins.Plugin import Base +from Plugin import Base from module.utils import compare_time, parseFileSize, lock - class WrongPassword(Exception): pass @@ -20,17 +36,16 @@ class Account(Base): associated hoster plugin. Plugin should also provide `loadAccountInfo` """ __name__ = "Account" + __version__ = "0.2" __type__ = "account" - __version__ = "0.3" - - __description__ = """Base account plugin""" - __author_name__ = "mkaay" - __author_mail__ = "mkaay@mkaay.de" + __description__ = """Account Plugin""" + __author_name__ = ("mkaay") + __author_mail__ = ("mkaay@mkaay.de") - #: after that time (in minutes) pyload will relogin the account - login_timeout = 10 * 60 - #: after that time (in minutes) account data will be reloaded - info_threshold = 10 * 60 + #: after that time [in minutes] pyload will relogin the account + login_timeout = 600 + #: account data will be reloaded after this time + info_threshold = 600 def __init__(self, manager, accounts): @@ -61,7 +76,7 @@ class Account(Base): def _login(self, user, data): # set timestamp for login self.timestamps[user] = time() - + req = self.getAccountRequest(user) try: self.login(user, data, req) @@ -69,20 +84,17 @@ class Account(Base): self.logWarning( _("Could not login with account %(user)s | %(msg)s") % {"user": user , "msg": _("Wrong Password")}) - success = data['valid'] = False + data["valid"] = False + except Exception, e: self.logWarning( _("Could not login with account %(user)s | %(msg)s") % {"user": user , "msg": e}) - success = data['valid'] = False + data["valid"] = False if self.core.debug: print_exc() - else: - success = True finally: - if req: - req.close() - return success + if req: req.close() def relogin(self, user): req = self.getAccountRequest(user) @@ -92,7 +104,7 @@ class Account(Base): if user in self.infos: del self.infos[user] #delete old information - return self._login(user, self.accounts[user]) + self._login(user, self.accounts[user]) def setAccounts(self, accounts): self.accounts = accounts @@ -104,15 +116,15 @@ class Account(Base): """ updates account and return true if anything changed """ if user in self.accounts: - self.accounts[user]['valid'] = True #do not remove or accounts will not login + self.accounts[user]["valid"] = True #do not remove or accounts will not login if password: - self.accounts[user]['password'] = password + self.accounts[user]["password"] = password self.relogin(user) return True if options: - before = self.accounts[user]['options'] - self.accounts[user]['options'].update(options) - return self.accounts[user]['options'] != before + before = self.accounts[user]["options"] + self.accounts[user]["options"].update(options) + return self.accounts[user]["options"] != before else: self.accounts[user] = {"password": password, "options": options, "valid": True} self._login(user, self.accounts[user]) @@ -152,7 +164,7 @@ class Account(Base): self.logDebug("Account Info: %s" % str(infos)) - infos['timestamp'] = time() + infos["timestamp"] = time() self.infos[name] = infos elif "timestamp" in self.infos[name] and self.infos[name][ "timestamp"] + self.info_threshold * 60 < time(): @@ -164,7 +176,7 @@ class Account(Base): def isPremium(self, user): info = self.getAccountInfo(user) - return info['premium'] + return info["premium"] def loadAccountInfo(self, name, req=None): """this should be overwritten in account plugin,\ @@ -177,9 +189,9 @@ class Account(Base): return { "validuntil": None, # -1 for unlimited "login": name, - #"password": self.accounts[name]['password'], #@XXX: security - "options": self.accounts[name]['options'], - "valid": self.accounts[name]['valid'], + #"password": self.accounts[name]["password"], #@XXX: security + "options": self.accounts[name]["options"], + "valid": self.accounts[name]["valid"], "trafficleft": None, # in kb, -1 for unlimited "maxtraffic": None, "premium": True, #useful for free accounts @@ -215,12 +227,12 @@ class Account(Base): """ returns an valid account name and data""" usable = [] for user, data in self.accounts.iteritems(): - if not data['valid']: continue + if not data["valid"]: continue - if "time" in data['options'] and data['options']['time']: + if "time" in data["options"] and data["options"]["time"]: time_data = "" try: - time_data = data['options']['time'][0] + time_data = data["options"]["time"][0] start, end = time_data.split("-") if not compare_time(start.split(":"), end.split(":")): continue @@ -229,10 +241,10 @@ class Account(Base): if user in self.infos: if "validuntil" in self.infos[user]: - if self.infos[user]['validuntil'] > 0 and time() > self.infos[user]['validuntil']: + if self.infos[user]["validuntil"] > 0 and time() > self.infos[user]["validuntil"]: continue if "trafficleft" in self.infos[user]: - if self.infos[user]['trafficleft'] == 0: + if self.infos[user]["trafficleft"] == 0: continue usable.append((user, data)) @@ -272,10 +284,9 @@ class Account(Base): def checkLogin(self, user): """ checks if user is still logged in """ if user in self.timestamps: - if self.login_timeout > 0 and self.timestamps[user] + self.login_timeout * 60 < time(): + if self.timestamps[user] + self.login_timeout * 60 < time(): self.logDebug("Reached login timeout for %s" % user) - return self.relogin(user) - else: - return True - else: - return False + self.relogin(user) + return False + + return True |