aboutsummaryrefslogtreecommitdiff
path: root/site/service
diff options
context:
space:
mode:
Diffstat (limited to 'site/service')
-rw-r--r--site/service/.htaccess8
-rw-r--r--site/service/config.dist.py4
-rw-r--r--site/service/config.pycbin0 -> 275 bytes
-rw-r--r--site/service/db.py38
-rw-r--r--site/service/db.pycbin0 -> 1933 bytes
-rwxr-xr-xsite/service/request.py106
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
new file mode 100644
index 0000000..4df456d
--- /dev/null
+++ b/site/service/config.pyc
Binary files differ
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
new file mode 100644
index 0000000..81639ee
--- /dev/null
+++ b/site/service/db.pyc
Binary files differ
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()