summaryrefslogtreecommitdiffstats
path: root/pyload/plugins/hoster/MegacrypterCom.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/plugins/hoster/MegacrypterCom.py')
-rw-r--r--pyload/plugins/hoster/MegacrypterCom.py59
1 files changed, 59 insertions, 0 deletions
diff --git a/pyload/plugins/hoster/MegacrypterCom.py b/pyload/plugins/hoster/MegacrypterCom.py
new file mode 100644
index 000000000..9f012e5be
--- /dev/null
+++ b/pyload/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"]
+
+