# -*- 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 . @author: mkaay """ import re from base64 import standard_b64decode from Crypto.Cipher import AES from module.plugins.Account import Account def decrypt(data): data = standard_b64decode(data) key = standard_b64decode("L3hpTDJGaFNPVVlnc2FUdg==") obj = AES.new(key, AES.MODE_ECB) return obj.decrypt(data) def parse(data): ret = {} for line in data.splitlines(): line = line.strip() k, none, v = line.partition("=") ret[k] = v return ret def loadSoap(req, soap): req.putHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 2.0.50727.4952)") req.putHeader("SOAPAction", "\"urn:FileserveAPIWebServiceAction\"") ret = req.load("http://api.fileserve.com/api/fileserveAPIServer.php", post=soap, cookies=False, referer=False) req.clearHeaders() return ret class FileserveCom(Account): __name__ = "FileserveCom" __version__ = "0.11" __type__ = "account" __description__ = """fileserve.com account plugin""" __author_name__ = ("mkaay") __author_mail__ = ("mkaay@mkaay.de") LOGIN_RE = re.compile(r"(.*?)(.*?)(.*?)%s%s" % ( user, data["password"]) rep = loadSoap(req, soap) match = self.LOGIN_RE.search(rep) if not match: return False data = parse(decrypt(match.group(1))) self.logDebug("Login: %s" % data) return data def getShorten(self, req, token, fileid): soap = "%s%s" % ( token, fileid) rep = loadSoap(req, soap) match = self.SHORTEN_RE.search(rep) data = parse(decrypt(match.group(1))) self.logDebug("Shorten: %s" % data) return data def getDirectLink(self, req, token): soap = "%s" % token rep = loadSoap(req, soap) match = self.DIRECT_RE.search(rep) data = parse(decrypt(match.group(1))) self.logDebug("getDirect: %s" % data) return data def loadAccountInfo(self, user, req): data = self.loginApi(user, req) if data["user_type"] == "PREMIUM": validuntil = int(data["expiry_date"]) return {"trafficleft": -1, "validuntil": validuntil} else: return {"premium": False, "trafficleft": None, "validuntil": None} def login(self, user, data, req): ret = self.loginApi(user, req, data) if not ret: self.wrongPassword() elif ret["error"] == "LOGIN_FAIL": self.wrongPassword()