summaryrefslogtreecommitdiffstats
path: root/pyload/webui/app/api.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyload/webui/app/api.py')
-rw-r--r--pyload/webui/app/api.py99
1 files changed, 0 insertions, 99 deletions
diff --git a/pyload/webui/app/api.py b/pyload/webui/app/api.py
deleted file mode 100644
index 99a7c2998..000000000
--- a/pyload/webui/app/api.py
+++ /dev/null
@@ -1,99 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import itertools
-import traceback
-import urllib
-
-import SafeEval
-import bottle
-
-from pyload.Api import BaseObject
-from pyload.utils import json
-from pyload.webui import PYLOAD
-from pyload.webui.app.utils import toDict, set_session
-
-
-# json encoder that accepts TBase objects
-class TBaseEncoder(json.JSONEncoder):
-
- def default(self, o):
- if isinstance(o, BaseObject):
- return toDict(o)
- return json.JSONEncoder.default(self, o)
-
-
-# accepting positional arguments, as well as kwargs via post and get
-@bottle.route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{},]*>')
-@bottle.route('/api/<func><args:re:[a-zA-Z0-9\-_/\"\'\[\]%{},]*>', method='POST')
-def call_api(func, args=""):
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- s = request.environ.get('beaker.session')
- if 'session' in request.POST:
- s = s.get_by_id(request.POST['session'])
-
- if not s or not s.get("authenticated", False):
- return bottle.HTTPError(403, json.dumps("Forbidden"))
-
- if not PYLOAD.isAuthorized(func, {"role": s['role'], "permission": s['perms']}):
- return bottle.HTTPError(401, json.dumps("Unauthorized"))
-
- args = args.split("/")[1:]
- kwargs = {}
-
- for x, y in itertools.chain(request.GET.iteritems(), request.POST.iteritems()):
- if x == "session":
- continue
- kwargs[x] = urllib.unquote(y)
-
- try:
- return callApi(func, *args, **kwargs)
- except Exception, e:
- traceback.print_exc()
- return bottle.HTTPError(500, json.dumps({"error": e.message, "traceback": traceback.format_exc()}))
-
-
-def callApi(func, *args, **kwargs):
- if not hasattr(PYLOAD.EXTERNAL, func) or func.startswith("_"):
- print "Invalid API call", func
- return bottle.HTTPError(404, json.dumps("Not Found"))
-
- result = getattr(PYLOAD, func)(*[SafeEval.const_eval(x) for x in args],
- **dict((x, SafeEval.const_eval(y)) for x, y in kwargs.iteritems()))
-
- # null is invalid json response
- return json.dumps(result or True, cls=TBaseEncoder)
-
-
-# post -> username, password
-@bottle.route('/api/login', method='POST')
-def login():
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- user = request.forms.get("username")
- password = request.forms.get("password")
-
- info = PYLOAD.checkAuth(user, password)
-
- if not info:
- return json.dumps(False)
-
- s = set_session(request, info)
-
- # get the session id by dirty way, documentations seems wrong
- try:
- sid = s._headers['cookie_out'].split("=")[1].split(";")[0]
- return json.dumps(sid)
- except Exception:
- return json.dumps(True)
-
-
-@bottle.route('/api/logout')
-def logout():
- response.headers.replace("Content-type", "application/json")
- response.headers.append("Cache-Control", "no-cache, must-revalidate")
-
- s = request.environ.get('beaker.session')
- s.delete()