mirror of
				https://github.com/matrix-org/synapse.git
				synced 2025-10-26 05:42:00 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 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()
 |