summaryrefslogtreecommitdiffstats
path: root/module/plugins/hoster
diff options
context:
space:
mode:
authorGravatar Gonzalo SR <gonzalo@gonzalosr.com> 2013-06-07 01:42:17 +0200
committerGravatar Gonzalo SR <gonzalo@gonzalosr.com> 2013-06-07 01:42:17 +0200
commit3e23b11528b392ca358e1713cf2e564c327faf1a (patch)
treeea682653bd887ff84d11b5bc7c4f419d48a474ab /module/plugins/hoster
parentNew multi hoster plugin: UnrestrictLi (diff)
downloadpyload-3e23b11528b392ca358e1713cf2e564c327faf1a.tar.xz
Added plugin to support megacrypter.com
Implemented as hoster instead of crypter because I couldn't find an easy way to hand the file decryption key and the download URL to the MegaNz plugin. (Real MegaNz URL is never known). Right now it doesn't support password protected megacrypter URLs. Tested with some files. Works well thus far. Feedback welcome.
Diffstat (limited to 'module/plugins/hoster')
-rw-r--r--module/plugins/hoster/MegacrypterCom.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/module/plugins/hoster/MegacrypterCom.py b/module/plugins/hoster/MegacrypterCom.py
new file mode 100644
index 000000000..9f012e5be
--- /dev/null
+++ b/module/plugins/hoster/MegacrypterCom.py
@@ -0,0 +1,59 @@
+# -*- coding: utf-8 -*-
+import re
+
+from module.common.json_layer import json
+from module.plugins.hoster.MegaNz import MegaNz
+
+
+class MegacrypterCom(MegaNz):
+ __name__ = "MegacrypterCom"
+ __type__ = "hoster"
+ __pattern__ = r"(https?://[a-z0-9]{0,10}\.?megacrypter\.com/[a-zA-Z0-9!_\-]+)"
+ __version__ = "0.1"
+ __description__ = """megacrypter plugin, based and inherits from RaNaN's MegaNz plugin"""
+ __author_name__ = ("GonzaloSR", )
+ __author_mail__ = ("gonzalo@gonzalosr.com", )
+
+ API_URL = "http://megacrypter.com/api"
+ FILE_SUFFIX = ".crypted"
+
+
+ def callApi(self, **kwargs):
+ """ Dispatch a call to the api, see megacrypter.com/api_doc """
+ self.logDebug("JSON request: " + json.dumps(kwargs))
+ resp = self.load(self.API_URL, post=json.dumps(kwargs))
+ self.logDebug("API Response: " + resp)
+ return json.loads(resp)
+
+
+ def process(self, pyfile):
+
+ key = None
+
+ # match is guaranteed because plugin was chosen to handle url
+ node = re.search(self.__pattern__, pyfile.url).group(1)
+
+
+ # get Mega.co.nz link info
+ info = self.callApi(link=node, m="info")
+
+ # get crypted file URL
+ dl = self.callApi(link=node, m="dl")
+
+
+ # TODO: map error codes, implement password protection
+ # if info["pass"] == true:
+ # crypted_file_key, md5_file_key = info["key"].split("#")
+
+
+ key = self.b64_decode(info["key"])
+
+ pyfile.name = info["name"] + self.FILE_SUFFIX
+
+ self.download(dl["url"])
+ self.decryptFile(key)
+
+ # Everything is finished and final name can be set
+ pyfile.name = info["name"]
+
+