Skip to content
Snippets Groups Projects
webserver.py 1.54 KiB
Newer Older
matrix.org's avatar
matrix.org committed
import argparse
import BaseHTTPServer
import os
import SimpleHTTPServer
matrix.org's avatar
matrix.org committed

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)

matrix.org's avatar
matrix.org committed

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),
matrix.org's avatar
matrix.org committed
    )

    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()