codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#!/usr/bin/env python # Copyright (c) 2009, Charles Hooper # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright notice, this # list of conditions and the following disclaimer in the documentation and/or # other materials provided with the distribution. # # * Neither the name of Plumata LLC nor the names of its contributors may be # used to endorse or promote products derived from this software without specific prior # written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES # OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT # SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED # TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR # BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH # DAMAGE. import tornado.httpserver import tornado.ioloop import tornado.web import tornado.auth from sqlite3 import connect import settings def list_databases(): """List all databases""" from os import listdir return listdir(settings.data_path) def list_tables(database): """List all tables""" from os import path # TODO: Sanitize 'database' var for directory traversal conn = connect(path.join(settings.data_path,database)) cursor = conn.cursor() cursor.execute("""SELECT name FROM sqlite_master WHERE type='table' ORDER BY name""") tables = [table for table in cursor] cursor.close() conn.close() return tables def dump_data(database,table): """Dump all records in a table""" from os import path conn = connect(path.join(settings.data_path,database)) cursor = conn.cursor() # TODO: santize 'table' for SQL injection cursor.execute("SELECT * FROM `%s`" % table) data = [row for row in cursor] cursor.close() conn.close() return data class MainHandler(tornado.web.RequestHandler): """Main Handler... list all databases""" def get(self): self.write(repr(list_databases())) class ListTableHandler(tornado.web.RequestHandler): """List tables in specified database""" def get(self,database): self.write(repr(list_tables(database))) class DataHandler(tornado.web.RequestHandler): """Dump all records from a table""" def get(self,database,table): self.write(repr(dump_data(database,table))) application = tornado.web.Application([ (r"/", MainHandler), (r"/([\w]+)/", ListTableHandler), (r"/([\w]+)/([\w]+)/", DataHandler), ], cookie_secret=settings.cookie_secret, ) if __name__ == "__main__": http_server = tornado.httpserver.HTTPServer(application) http_server.listen(settings.port) tornado.ioloop.IOLoop.instance().start()
Private
[
?
]
Run code