diff options
author | root <root@bergwerk> | 2011-11-29 02:07:12 +0100 |
---|---|---|
committer | root <root@bergwerk> | 2011-11-29 02:07:12 +0100 |
commit | 3d490177e347fb145c9eb4187156d2e67ae85909 (patch) | |
tree | c7ddafa500b98dd1a34d2157d0de98ed8ef2a132 /punani/index.py | |
parent | a95cb58ffa45cf2f25430592a7cc60b70e26f232 (diff) | |
parent | b1d71c062f1d29b2be3269a5e7e8a67030adfa6a (diff) |
Merge branch 'master' of github.com:krebscode/painload
Diffstat (limited to 'punani/index.py')
-rwxr-xr-x | punani/index.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/punani/index.py b/punani/index.py new file mode 100755 index 00000000..ac19b2fb --- /dev/null +++ b/punani/index.py @@ -0,0 +1,96 @@ +#!/usr/bin/python + +import web +import json +import os +from bot import * +urls = ( + '/', 'Index', + '/dump','Dump', +# '/reload','Reload', + '/(.+)/(.+)', 'ArchFinder', +) + + +PDB_FILE="db/punani" +PORT="9111" +CHANNEL="#retiolum" +f = open(PDB_FILE) +pdb = json.load(f) +f.close() +polite = os.environ.get("polite",False) +from socket import * + +def local_announce(msg): + s = socket(AF_INET,SOCK_STREAM) + s.connect(('localhost',5555)) + s.send(msg) + s.close() +class Index: + def GET(self): + ret = """Welcome to the Tightnani API<br/> +Retrieve a package name for your distribution with: /PACKER/PKG""" + return ret + +class Reload: + def GET(self): + f = open(PDB_FILE) + pdb= json.load(f) + f.close() + return "DB reloaded" + + +class Dump: + def GET(self): + return json.dumps(pdb,sort_keys=True,indent=4) + +class ArchFinder: + def GET(self,request_packer,package): + if not request_packer or not package: web.BadRequest() + else: + packer = pdb['packer-symlinks'].get(request_packer,request_packer) #try to resolve similar packers + super_packer = pdb['super-packer'].get(packer,'') + ret = pdb.get(package,{}).get(packer,False) + ret = ret if ret else pdb.get(package,{}).get(super_packer,False) + + if not ret: + try: + if polite: + local_announce("Client `%s` asked for the tool `%s` in packer `%s` but i do not have it in my Database. Please update me!" %(web.ctx.ip, package,packer)) + else: + local_announce("404: no %s/%s for %s" % (request_packer,package,gethostbyaddr(web.ctx.ip)[0])) + except Exception,e: + print ("Got Exception %s: %s" % (str(Exception),(e))) + web.NotFound() + return "not found. i'm so sorry :(" + else: return ret + + + +if __name__ == "__main__": + import sys + # Set IRC connection parameters. + irc_servers = [('supernode', 6667)] + irc_channels = [('#retiolum','')] + + # Prepare and start IRC bot. + bot = PunaniBot(irc_servers, irc_channels) + t = Thread(target=bot.start) + t.daemon = True + t.start() + announce = bot.say + + receiver = PunaniReceiveServer() + t = Thread(target=receiver.serve_forever) + t.daemon = True + t.start() + + t = Thread(target=process_queue,args=(announce,receiver.queue)) + t.daemon = True + t.start() + + + sys.argv.append(PORT) + app = web.application(urls,globals()) + app.internalerror = web.debugerror + app.run() |