mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-11-04 02:01:03 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 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()
 |