forked from MirrorHub/synapse
62 lines
1.5 KiB
Python
62 lines
1.5 KiB
Python
import argparse
|
|
import BaseHTTPServer
|
|
import os
|
|
import SimpleHTTPServer
|
|
import cgi, logging
|
|
|
|
from daemonize import Daemonize
|
|
|
|
class SimpleHTTPRequestHandlerWithPOST(SimpleHTTPServer.SimpleHTTPRequestHandler):
|
|
UPLOAD_PATH = "upload"
|
|
|
|
"""
|
|
Accept all post request as file upload
|
|
"""
|
|
def do_POST(self):
|
|
|
|
path = os.path.join(self.UPLOAD_PATH, os.path.basename(self.path))
|
|
length = self.headers['content-length']
|
|
data = self.rfile.read(int(length))
|
|
|
|
with open(path, 'wb') as fh:
|
|
fh.write(data)
|
|
|
|
self.send_response(200)
|
|
self.send_header('Content-Type', 'application/json')
|
|
self.end_headers()
|
|
|
|
# Return the absolute path of the uploaded file
|
|
self.wfile.write('{"url":"/%s"}' % path)
|
|
|
|
|
|
def setup():
|
|
parser = argparse.ArgumentParser()
|
|
parser.add_argument("directory")
|
|
parser.add_argument("-p", "--port", dest="port", type=int, default=8080)
|
|
parser.add_argument('-P', "--pid-file", dest="pid", default="web.pid")
|
|
args = parser.parse_args()
|
|
|
|
# Get absolute path to directory to serve, as daemonize changes to '/'
|
|
os.chdir(args.directory)
|
|
dr = os.getcwd()
|
|
|
|
httpd = BaseHTTPServer.HTTPServer(
|
|
('', args.port),
|
|
SimpleHTTPRequestHandlerWithPOST
|
|
)
|
|
|
|
def run():
|
|
os.chdir(dr)
|
|
httpd.serve_forever()
|
|
|
|
daemon = Daemonize(
|
|
app="synapse-webclient",
|
|
pid=args.pid,
|
|
action=run,
|
|
auto_close_fds=False,
|
|
)
|
|
|
|
daemon.start()
|
|
|
|
if __name__ == '__main__':
|
|
setup()
|