From be3a9e3adacac29f6415247a8e8983b2417a8333 Mon Sep 17 00:00:00 2001
From: Ivo Buff <kagenoshin@gmx.ch>
Date: Thu, 10 Apr 2014 15:33:43 +0200
Subject: New multihoster: Vipleech4u Merges #524

(cherry picked from commit b75cd8a3f83a970f67fcdfaa5bed7ecdb006b45b)
---
 module/plugins/accounts/Vipleech4uCom.py | 41 ++++++++++++++++
 module/plugins/hooks/Vipleech4uCom.py    | 80 ++++++++++++++++++++++++++++++
 module/plugins/hoster/Vipleech4uCom.py   | 84 ++++++++++++++++++++++++++++++++
 3 files changed, 205 insertions(+)
 create mode 100644 module/plugins/accounts/Vipleech4uCom.py
 create mode 100644 module/plugins/hooks/Vipleech4uCom.py
 create mode 100644 module/plugins/hoster/Vipleech4uCom.py

(limited to 'module')

diff --git a/module/plugins/accounts/Vipleech4uCom.py b/module/plugins/accounts/Vipleech4uCom.py
new file mode 100644
index 000000000..1e8463456
--- /dev/null
+++ b/module/plugins/accounts/Vipleech4uCom.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+import re
+from time import mktime, strptime
+
+from module.plugins.Account import Account
+
+
+class Vipleech4uCom(Account):
+    __name__ = "Vipleech4uCom"
+    __version__ = "0.1"
+    __type__ = "account"
+    __description__ = """Vipleech4u.com account plugin"""
+    __author_name__ = ("Kagenoshin")
+    __author_mail__ = ("kagenoshin@gmx.ch")
+
+    STATUS_PATTERN = re.compile(r'status.*?<\s*?strong\s*?>[^<]*?vip[^<]*?<', re.I)
+    VALIDUNTIL_PATTERN = re.compile(r'valid\s*?until.*?<\s*?strong\s*?>([^<]*?)<', re.I)
+
+    def loadAccountInfo(self, user, req):
+        response = req.load("http://vipleech4u.com", decode=True)
+        status = self.STATUS_PATTERN.search(response)
+
+        validuntil = self.VALIDUNTIL_PATTERN.search(response)
+        if validuntil:
+            validuntil = validuntil.group(1)
+
+        if status and validuntil:
+            print status
+            print validuntil
+            return {"trafficleft": -1, "validuntil": mktime(strptime("%s 23:59" % validuntil, "%d-%m-%Y %H:%M"))}
+        else:
+            return {"premium": False}
+
+    def login(self, user, data, req):
+        self.loginname = user
+        self.password = data["password"]
+        post_data = {'action': 'login', 'user': self.loginname, 'pass': self.password}
+        req.load("http://vipleech4u.com/login.php")
+        response = req.load("http://vipleech4u.com/login.php", post=post_data, decode=True)
+        if 'Username or Password are incorrect' in response:
+            self.wrongPassword()
diff --git a/module/plugins/hooks/Vipleech4uCom.py b/module/plugins/hooks/Vipleech4uCom.py
new file mode 100644
index 000000000..b2156b017
--- /dev/null
+++ b/module/plugins/hooks/Vipleech4uCom.py
@@ -0,0 +1,80 @@
+# -*- coding: utf-8 -*-
+import re
+
+from module.network.RequestFactory import getURL
+from module.plugins.internal.MultiHoster import MultiHoster
+
+
+class Vipleech4uCom(MultiHoster):
+    __name__ = "Vipleech4uCom"
+    __version__ = "0.01"
+    __type__ = "hook"
+    __config__ = [("activated", "bool", "Activated", "False"),
+                  ("hosterListMode", "all;listed;unlisted", "Use for hosters (if supported)", "all"),
+                  ("hosterList", "str", "Hoster list (comma separated)", "")]
+    __description__ = """Vipleech4u.com hook plugin"""
+    __author_name__ = ("Kagenoshin")
+    __author_mail__ = ("kagenoshin@gmx.ch")
+
+    HOSTER_PATTERN = re.compile(r'align\s*?=\s*?["\']*?left.*?<\s*?strong\s*?>([^<]*?)<', re.I)
+
+    def getHoster(self):
+        hosters = {
+            'depositfiles': ['depositfiles.com', 'dfiles.eu'],
+            'uploaded': ['uploaded.to', 'uploaded.net', 'ul.to'],
+            'rapidggator': ['rapidgator.net'],  # they have a typo it's called rapidgator
+            'freakshare': ['freakshare.net', 'freakshare.com'],
+            'filefactory': ['filefactory.com'],
+            'bitshare': ['bitshare.com'],
+            'share-online': ['share-online.biz', 'egoshare.com'],
+            'youtube': ['youtube.com'],
+            'turbobit': ['turbobit.net', 'unextfiles.com'],
+            'firedrive': ['firedrive.com', 'putlocker.com'],
+            'filepost': ['filepost.com', 'fp.io'],
+            'netload': ['netload.in'],
+            'uploadhero': ['uploadhero.com'],
+            'ryushare': ['ryushare.com'],
+        }
+
+        #check if the list is still valid
+        self.check_for_new_or_removed_hosters(hosters)
+
+        #build list
+        hoster_list = []
+
+        for item in hosters.itervalues():
+            hoster_list.extend(item)
+
+        return hoster_list
+
+    def check_for_new_or_removed_hosters(self, hosters):
+        #get the old hosters
+        old_hosters = hosters.keys()
+
+        #load the current hosters from vipleech4u.com
+        page = getURL('http://vipleech4u.com/hosts.php')
+        current_hosters = self.HOSTER_PATTERN.findall(page)
+        current_hosters = [x.lower() for x in current_hosters]
+
+        #let's look for new hosters
+        new_hosters = []
+
+        for hoster in current_hosters:
+            if not hoster in old_hosters:
+                new_hosters.append(hoster)
+
+        #let's look for removed hosters
+        removed_hosters = []
+
+        for hoster in old_hosters:
+            if not hoster in current_hosters:
+                removed_hosters.append(hoster)
+
+        if new_hosters:
+            self.logDebug('The following new hosters were found on vipleech4u.com: %s' % str(new_hosters))
+
+        if removed_hosters:
+            self.logDebug('The following hosters were removed from vipleech4u.com: %s' % str(removed_hosters))
+
+        if not (new_hosters and removed_hosters):
+            self.logDebug('The hoster list is still valid.')
diff --git a/module/plugins/hoster/Vipleech4uCom.py b/module/plugins/hoster/Vipleech4uCom.py
new file mode 100644
index 000000000..53768a430
--- /dev/null
+++ b/module/plugins/hoster/Vipleech4uCom.py
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+
+import re
+
+from module.plugins.Hoster import Hoster
+
+
+class Vipleech4uCom(Hoster):
+    __name__ = "Vipleech4uCom"
+    __version__ = "0.1"
+    __type__ = "hoster"
+    __pattern__ = r"http://vipleech4u.com/manager.php"
+    __description__ = """Vipleech4u.com hoster plugin"""
+    __author_name__ = ("Kagenoshin")
+    __author_mail__ = ("kagenoshin@gmx.ch")
+
+    FILENAME_PATTERN = re.compile(r'name\s*?=\s*?["\']filename["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+    HOST_PATTERN = re.compile(r'name\s*?=\s*?["\']host["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+    PATH_PATTERN = re.compile(r'name\s*?=\s*?["\']path["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+    REFERER_PATTERN = re.compile(r'name\s*?=\s*?["\']referer["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+    LINK_PATTERN = re.compile(r'name\s*?=\s*?["\']link["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+    COOKIE_PATTERN = re.compile(r'name\s*?=\s*?["\']cookie["\'][^>]*?value\s*?=\s*?["\'](.*?)["\']', re.I)
+
+    def setup(self):
+        self.resumeDownload = self.multiDL = True
+        self.chunkLimit = 1
+
+    def process(self, pyfile):
+        if not self.account:
+            self.logError(_("Please enter your %s account or deactivate this plugin") % "vipleech4u.com")
+            self.fail("No vipleech4u.com account provided")
+
+        self.logDebug("Old URL: %s" % pyfile.url)
+
+        new_url = pyfile.url
+
+        if re.match(self.__pattern__, new_url):
+            self.fail("Can't handle vipleech4u links.")
+
+        #upload the link which has to be loaded
+        page = self.load('http://vipleech4u.com/generator.php', post={'links': new_url, 'ddl': 'no'})
+
+        #switch to the manager and see what's happening
+        page = self.load('http://vipleech4u.com/unrestrict.php', get={'link': new_url, 'premium_acc': 'on'})
+
+        if re.search(r'You have generated maximum links available to you today', page, re.I):
+            self.fail('Daily limit reached.')
+
+        filename = self.FILENAME_PATTERN.search(page)
+        host = self.HOST_PATTERN.search(page)
+        path = self.PATH_PATTERN.search(page)
+        referer = self.REFERER_PATTERN.search(page)
+        link = self.LINK_PATTERN.search(page)
+        cookie = self.COOKIE_PATTERN.search(page)
+
+        #build the post-dictionary
+        post_dict = {}
+
+        if filename:
+            post_dict.update({'filename': filename.group(1)})
+        if host:
+            post_dict.update({'host': host.group(1)})
+        if path:
+            post_dict.update({'path': path.group(1)})
+        if referer:
+            post_dict.update({'referer': referer.group(1)})
+        if link:
+            post_dict.update({'link': link.group(1)})
+        if cookie:
+            post_dict.update({'cookie': cookie.group(1)})
+
+        if not post_dict:
+            self.logDebug('Get an empty post_dict. Strange.')
+
+        self.setWait(5)
+        self.wait()
+        self.logDebug("Unrestricted URL: " + str(post_dict))
+
+        self.download('http://vipleech4u.com/unrestrict.php', post=post_dict, disposition=True)
+
+        check = self.checkDownload({"bad": "<html"})
+
+        if check == "bad":
+            self.retry(24, 150, 'Bad file downloaded')
-- 
cgit v1.2.3