osu-wayback/main.py

77 lines
2.0 KiB
Python
Raw Normal View History

2019-03-11 07:06:31 +01:00
from os import listdir, path
import sqlite3
2019-03-07 14:04:54 +01:00
2019-03-07 14:46:50 +01:00
import tornado.gen
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.netutil
2019-03-07 14:04:54 +01:00
2019-03-11 07:06:31 +01:00
from objects import glob
2019-03-07 14:46:50 +01:00
def make_app():
2019-03-08 11:12:47 +01:00
"""
Make tornado application instance
2019-03-07 14:04:54 +01:00
2019-03-08 11:12:47 +01:00
:return: Tornado Application instance
"""
2019-03-07 14:46:50 +01:00
def get_files(dir):
2019-03-08 11:12:47 +01:00
"""
Get all file-/directory-names in a directory with a simple blacklist
:param str: directory to read
:return: String[] of file/directory
"""
2019-03-07 14:46:50 +01:00
return [d for d in listdir(dir) if not d.startswith("_")]
2019-03-07 14:04:54 +01:00
2019-03-08 11:12:47 +01:00
def map_routes(dir):
"""
Map out a directory array of modules in a given directory
:param str: directory to map out and import
:return: tuple( endpoint, module.handle )[] routes
"""
routes = []
2019-03-07 14:46:50 +01:00
apis = get_files(dir)
for api in apis:
if api.endswith(".py"):
api = api.rstrip(".py")
routes.append(
2019-03-08 11:12:47 +01:00
(
2019-03-11 07:27:54 +01:00
r"/%s/%s" % (dir, api), __import__("%s.%s" % (dir.replace("/", "."), api), fromlist=[""]).handler
2019-03-08 11:12:47 +01:00
))
2019-03-07 14:46:50 +01:00
else:
2019-03-08 11:12:47 +01:00
routes += map_routes("%s/%s" % (dir, api))
return routes
2019-03-07 14:04:54 +01:00
2019-03-08 11:12:47 +01:00
routes = map_routes("api")
2019-03-07 14:46:50 +01:00
return tornado.web.Application(routes)
2019-03-11 07:06:31 +01:00
def build_database():
f = open("wayback.db", "w")
f.close()
glob.sql = sqlite3.connect("wayback.db")
cur = glob.sql.cursor()
with open("database_structs.sql", "r") as f:
cur.executescript( f.read() )
cur.close()
print("[!] New sqlite database created")
if __name__ == "__main__":
glob.app = make_app()
if not path.isfile("wayback.db"):
build_database()
if glob.sql == None:
glob.sql = sqlite3.connect("wayback.db")
print("Serving at %s:%s" % (glob.config["server"]["host"], glob.config["server"]["port"]))
print("To stop server press CTRL + C")
glob.app.listen(glob.config["server"]["port"], address=glob.config["server"]["host"])
tornado.ioloop.IOLoop.instance().start()