#!/usr/bin/env python import sys from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from optparse import OptionParser from cgi import FieldStorage import os import errno import signal __version__ = '0.1' ADDR = '0.0.0.0' PORT = 8080 OUTPUT = '/tmp' class DropletHandler(BaseHTTPRequestHandler): def do_POST(self): try: fields = FieldStorage(self.rfile, self.headers, environ={'REQUEST_METHOD': 'POST'}) except Exception, error: return self.response(500, error) try: file = fields['file'] except KeyError: return self.response(500, 'No file') path = os.path.join(self.server.output, file.filename) if os.path.exists(path): return self.response(500, 'File exists') with open(path, 'wb') as fp: fp.write(file.value) os.chmod(path, 0644) self.log_message('Saved %d bytes to %s', len(file.value), path) return self.response(200, 'OK') def response(self, *args): self.send_response(*args) self.end_headers() def daemonize(): if os.fork(): os._exit(0) os.setsid() if os.fork(): os._exit(0) for fd in xrange(os.sysconf('SC_OPEN_MAX')): try: os.close(fd) except OSError, error: if error.errno != errno.EBADF: raise fd = os.open(os.devnull, os.O_RDWR) os.dup(fd) os.dup(fd) os.umask(027) os.chdir('/') signal.signal(signal.SIGCHLD, signal.SIG_IGN) def main(): optparse = OptionParser('%prog [opts]', version=__version__, description='servlet for Droplet.app') optparse.add_option('-d', dest='daemon', default=False, action='store_true', help='launch as a daemon') optparse.add_option('-a', dest='addr', metavar='
', default=ADDR, help='ip/host to bind to (default: all)') optparse.add_option('-p', dest='port', metavar='