# Create your views here. from os.path import join import re from urllib import unquote from base64 import standard_b64decode from binascii import unhexlify from django.conf import settings from django.http import HttpResponse from django.http import HttpResponseServerError from django.core.serializers import json from django.utils import simplejson try: from Crypto.Cipher import AES except: pass def local_check(function): def _dec(view_func): def _view(request, * args, ** kwargs): if request.META.get('REMOTE_ADDR', "0") in ('127.0.0.1','localhost') or request.META.get('HTTP_HOST','0') == '127.0.0.1:9666': return view_func(request, * args, ** kwargs) else: return HttpResponseServerError() _view.__name__ = view_func.__name__ _view.__dict__ = view_func.__dict__ _view.__doc__ = view_func.__doc__ return _view if function is None: return _dec else: return _dec(function) class JsonResponse(HttpResponse): def __init__(self, obj, request): cb = request.GET.get("callback") if cb: obj = {"content": obj} content = simplejson.dumps(obj, indent=2, cls=json.DjangoJSONEncoder, ensure_ascii=False) content = "%s(%s)\r\n" % (cb, content) HttpResponse.__init__(self, content, content_type="application/json") else: content = "%s\r\n" % obj HttpResponse.__init__(self, content, content_type="text/html") self["Cache-Control"] = "no-cache, must-revalidate" @local_check def flash(request): return HttpResponse("JDownloader") @local_check def add(request): package = request.POST.get('referer', 'ClickAndLoad Package') urls = filter(lambda x: x != "", request.POST['urls'].split("\n")) settings.PYLOAD.add_package(package, urls, False) return HttpResponse() @local_check def addcrypted(request): package = request.POST.get('referer', 'ClickAndLoad Package') dlc = request.POST['crypted'].replace(" ", "+") dlc_path = join(settings.DL_ROOT, package.replace("/", "").replace("\\", "").replace(":", "") + ".dlc") dlc_file = file(dlc_path, "wb") dlc_file.write(dlc) dlc_file.close() try: settings.PYLOAD.add_package(package, [dlc_path], False) except: return JsonResponse("", request) else: return JsonResponse("success", request) @local_check def addcrypted2(request): package = request.POST.get("source", "ClickAndLoad Package") crypted = request.POST["crypted"] jk = request.POST["jk"] crypted = standard_b64decode(unquote(crypted.replace(" ", "+"))) if settings.JS: jk = "%s f()" % jk jk = settings.JS.eval(jk) else: try: jk = re.findall(r"return ('|\")(.+)('|\")", jk)[0][1] except: ## Test for some known js functions to decode if jk.find("dec") > -1 and jk.find("org") > -1: org = re.findall(r"var org = ('|\")([^\"']+)", jk)[0][1] jk = list(org) jk.reverse() jk = "".join(jk) else: print "Could not decrypt key, please install py-spidermonkey or ossp-js" try: Key = unhexlify(jk) except: print "Could not decrypt key, please install py-spidermonkey or ossp-js" return JsonResponse("failed", request) IV = Key obj = AES.new(Key, AES.MODE_CBC, IV) result = obj.decrypt(crypted).replace("\x00", "").replace("\r","").split("\n") result = filter(lambda x: x != "", result) try: settings.PYLOAD.add_package(package, result, False) except: return JsonResponse("failed can't add", request) else: return JsonResponse("success", request) @local_check def flashgot(request): if request.META['HTTP_REFERER'] != "http://localhost:9666/flashgot" and request.META['HTTP_REFERER'] != "http://127.0.0.1:9666/flashgot": return HttpResponseServerError() autostart = int(request.POST.get('autostart', 0)) package = request.POST.get('package', "FlashGot") urls = filter(lambda x: x != "", request.POST['urls'].split("\n")) folder = request.POST.get('dir', None) settings.PYLOAD.add_package(package, urls, autostart) return HttpResponse("") @local_check def crossdomain(request): rep = "\n" rep += "\n" rep += "\n" rep += "\n" rep += "" return HttpResponse(rep) @local_check def checksupport(request): url = request.GET.get("url") res = settings.PYLOAD.checkURLs([url]) supported = (not res[0][1] is None) return JsonResponse(str(supported).lower(), request) @local_check def jdcheck(request): rep = "jdownloader=true;\n" rep += "var version='10629';\n" return HttpResponse(rep)