diff options
Diffstat (limited to 'site/service')
-rw-r--r-- | site/service/.htaccess | 8 | ||||
-rw-r--r-- | site/service/config.dist.py | 4 | ||||
-rw-r--r-- | site/service/config.pyc | bin | 0 -> 275 bytes | |||
-rw-r--r-- | site/service/db.py | 38 | ||||
-rw-r--r-- | site/service/db.pyc | bin | 0 -> 1933 bytes | |||
-rwxr-xr-x | site/service/request.py | 106 |
6 files changed, 156 insertions, 0 deletions
diff --git a/site/service/.htaccess b/site/service/.htaccess new file mode 100644 index 0000000..35d526f --- /dev/null +++ b/site/service/.htaccess @@ -0,0 +1,8 @@ +Options +ExecCGI +AddHandler cgi-script .py +DirectoryIndex request.py +<Files request.py> + Options +ExecCGI + AddHandler cgi-script .py + Require all granted +</Files> diff --git a/site/service/config.dist.py b/site/service/config.dist.py new file mode 100644 index 0000000..162299c --- /dev/null +++ b/site/service/config.dist.py @@ -0,0 +1,4 @@ +dbhost = "" +dbname = "" +dbuser = "" +dbpassword = "" diff --git a/site/service/config.pyc b/site/service/config.pyc Binary files differnew file mode 100644 index 0000000..4df456d --- /dev/null +++ b/site/service/config.pyc diff --git a/site/service/db.py b/site/service/db.py new file mode 100644 index 0000000..1cb69b8 --- /dev/null +++ b/site/service/db.py @@ -0,0 +1,38 @@ +from peewee import * +import datetime +from playhouse.postgres_ext import * +import config + +_db = PostgresqlExtDatabase( + config.dbname, + host=config.dbhost, + user=config.dbuser, + password=config.dbpassword +) + +class BaseModel(Model): + class Meta: + database = _db + + +class Users(BaseModel): + email = TextField() + password = TextField() + sessionkey = TextField() + created = DateTimeField(default=datetime.datetime.now) + +class Session(BaseModel): + user = ForeignKeyField(Users, null=True) + token = TextField(null=True) + created = DateTimeField(default=datetime.datetime.now) + +class JData(BaseModel): + session = ForeignKeyField(Session, null=True) + category = TextField(null=True, index=True) + data = JSONField() + created = DateTimeField(default=datetime.datetime.now) + + +if __name__ == "__main__": + _db.create_tables(BaseModel.__subclasses__(), safe=True) + diff --git a/site/service/db.pyc b/site/service/db.pyc Binary files differnew file mode 100644 index 0000000..81639ee --- /dev/null +++ b/site/service/db.pyc diff --git a/site/service/request.py b/site/service/request.py new file mode 100755 index 0000000..ae7d843 --- /dev/null +++ b/site/service/request.py @@ -0,0 +1,106 @@ +#!/usr/bin/python +import json +import os +import cgi +import sys +import db + +class PostRequest(object): + def run(self, data): + pass + +def GetRequest(object): + def run(self, data): + pass + +class TextResponse(object): + def __init__(self, text): + self.text = text + def respond(self): + print "Content-Type: text/plain\r\n\r\n" + print self.text + +class Response(object): + def __init__(self, data=None): + if data is None or data is True: + data = {"success": True} + elif data is False: + data = {"success": False} + elif data.get("success") is None: + data["success"] = True + self.data = data + def respond(self): + print "Content-type: text/json\r\n\r\n" + print json.dumps(self.data) + +class LogError(PostRequest): + def run(self, data): + if not data.get("session_id"): + session = db.Session.create() + else: + session = db.Session.select().where(db.Session.id == data["session_id"]).get() + db.JData.create( + session=session, + category="error", + data=data["error"] + ) + return Response({"session_id": session.id}) + + +class SaveData(PostRequest): + def run(self, data): + query = db.JData.create( + session=data.get("session_id"), + category=data["category"], + data=data["data"] + ) + return Response() + +class GetData(PostRequest): + def run(self, data): + query = db.JData.select() + query = query.where(db.JData.id == data.id) + + if not query.exists(): + return Response(False) + resp = data.get() + return Response({"data": resp}) + +class UploadAudio(PostRequest): + def run(self, data): + return Response(False) + filename, ext = os.path.splitext(path) + if ext.lower() != ".mp3": + cmd = ["ffmpeg", "-i", path, "-acodec", "libmp3lame", "-q:a", "5", output] + +def handle(): + try: + method = os.environ["REQUEST_METHOD"] + if method == "POST": + data = json.loads(sys.stdin.read()) + request_type = data.get("request_type") + base_class = PostRequest + elif method == "GET": + data = cgi.FieldStorage() + request_type = data.getvalue("request_type") + base_class = GetRequest + else: + raise Exception("No handler for this method") + + request_types = {} + for item in base_class.__subclasses__(): + request_types[item.__name__] = item + request_class = request_types.get(request_type) + if not request_class: + raise Exception("No handler for this request" + str(data)) + req = request_class() + response = req.run(data) + response.respond() + except Exception, ex: + import traceback + print "Content-Type: text/json\r\n\r\n" + resp = {"success": False, "error": str(ex), "traceback": traceback.format_exc()} + print json.dumps(resp) + +if __name__ == "__main__": + handle() |