All pastes #1758850 Raw Edit

sec

public text v1 · immutable
#1758850 ·published 2010-01-20 12:52 UTC
rendered paste body
#!/usr/bin/env python# -*- coding: UTF-8 -*-import BaseHTTPServerimport osimport sysimport urllibimport cgifrom SocketServer import ThreadingMixIn, ForkingMixIndef my_set(d, line):    i = line.find('=')    if i != -1:        k = line[:i]        v = line[i+1:]        d[k] = v        return True    return Noneclass MyServer(ThreadingMixIn, BaseHTTPServer.HTTPServer):    passclass MyServer2(ForkingMixIn, BaseHTTPServer.HTTPServer):    passclass Deamon(BaseHTTPServer.BaseHTTPRequestHandler):    data = {}    ips = []    def check(self):        if not self.client_address[0] in Deamon.ips:            return None        return urllib.unquote(self.path[1:])    def do_POST(self):        d = self.check()        if d:            try:                form = cgi.FieldStorage(                    fp=self.rfile,                    headers=self.headers,                    environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type']},                    )                Deamon.data[d] = form['v'].value                self.resp('')            except Exception as e:                self.resp(str(e))    def do_GET(self):        d = self.check()        if d:            p = Deamon.data.get(d, None)            if p:                self.resp(p)            else:                self.resp('')    def resp(self, s):        length = len(s)        self.send_response(200)        self.send_header("Content-type", "text/plain")        self.send_header("Content-Length", str(length))        self.end_headers()        self.wfile.write(s)with open('deamon.conf', 'rt') as f:    for line in f.readlines():        line = line.strip()        if not my_set(Deamon.data, line):            if line[0] == '+':                Deamon.ips.append(line[1:])            else:                port = int(line)if __name__ == "__main__":    if len(sys.argv) == 2:        s = {                '1' : lambda: BaseHTTPServer.HTTPServer(("", port), Deamon),                '2' : lambda: MyServer(("", port), Deamon),                '3' : lambda: MyServer2(("", port), Deamon)            }.get(sys.argv[1])        s().serve_forever()    else:        print("1-base, 2-threading, 3-forking")