commit 57e54f969b840546925d16ceceb130a0f3927140 Merge: 7026005 525766e Author: Jacob Appelbaum jacob@appelbaum.net Date: Wed Aug 17 19:31:22 2011 +0200
Merge branch 'master' of ssh://git-rw.torproject.org/torouter
packages/torouter-web/src/config.py | 1 + packages/torouter-web/src/runui.py | 2 +- packages/torouter-web/src/static/main.css | 14 +++++++++++++ packages/torouter-web/src/tui/controllers/tor.py | 14 +++++++++--- packages/torouter-web/src/tui/utils/parsing.py | 21 ++++++++++++++++++++ packages/torouter-web/src/tui/views/torstatus.html | 4 ++- 6 files changed, 50 insertions(+), 6 deletions(-)
diff --cc packages/torouter-web/src/config.py index 8fd716d,0000000..15057df mode 100644,000000..100644 --- a/packages/torouter-web/src/config.py +++ b/packages/torouter-web/src/config.py @@@ -1,15 -1,0 +1,16 @@@ +# tui, Tor web UI +# by Arturo Filasto' hellais@torproject.org +# + +import web, os + +cache = False + +globals = {} + +# Add your own (username, password) pair +authinfo = ("test", "test") + +interfaces_file = os.getcwd() + "/../torouter-prep/configs/interfaces" ++torrc_file = os.getcwd() + "/../torouter-prep/configs/torrc" + diff --cc packages/torouter-web/src/runui.py index 3d2dfc8,0000000..80836b3 mode 100644,000000..100644 --- a/packages/torouter-web/src/runui.py +++ b/packages/torouter-web/src/runui.py @@@ -1,35 -1,0 +1,35 @@@ +# tui - Tor web UI +# by Arturo Filasto' hellais@torproject.org +# + +import web +import config +import tui.controllers + +from tui.utils import session +from view import render + + +# This is the main structure of URLs +urls = ( + '/', 'tui.controllers.main.index', +# '/config/(tor|router)', 'tui.controllers.main.config', + '/network', 'tui.controllers.network.main', + '/network/firewall', 'tui.controllers.network.firewall', + '/network/wireless', 'tui.controllers.network.wireless', + '/network/wired', 'tui.controllers.network.wired', + '/network/status', 'tui.controllers.network.status', + '/tor', 'tui.controllers.tor.status', - '/tor/config', 'tui.controllers.tor.config', ++ '/tor/config', 'tui.controllers.tor.torrc', + '/logout', 'tui.controllers.main.logout' + ) +# '/wizard/([0-9a-f]{1,2})?', 'tui.controllers.wizard.step', +# '/status', 'tui.controllers.status') + +if __name__ == "__main__": + app = web.application(urls, globals()) + # Add session management to the app + session.add_session_to_app(app) + app.internalerror = web.debugerror + app.run() + diff --cc packages/torouter-web/src/static/main.css index 5626e92,0000000..34e26cf mode 100644,000000..100644 --- a/packages/torouter-web/src/static/main.css +++ b/packages/torouter-web/src/static/main.css @@@ -1,37 -1,0 +1,51 @@@ + +/* Clear all */ +body { margin: 0;border: 0;padding: 0; } + +div.wrapper { + min-height: 300px; + width: 800px; + margin: 0 auto; +} + +div.footer { + text-align: center; + background-color: #333; + color: white; + padding-top: 20px; + padding-bottom: 20px; +} + +div.header { + color: white; +} + +div.header ul { + list-style: none; + height: 20px; +} + +div.header ul li { + font-size: 20px; + float: left; + padding: 5px 10px; +} + +div.header ul#submenu li { + font-size: 15px; +} + ++/* More specific stuff */ ++#torrc { ++list-style: none; ++line-height: 2em; ++} ++ ++#torrc em { ++font-weight: bold; ++font-style: normal; ++} ++ ++ ++ ++ diff --cc packages/torouter-web/src/tui/controllers/tor.py index d07cb71,0000000..af8678c mode 100644,000000..100644 --- a/packages/torouter-web/src/tui/controllers/tor.py +++ b/packages/torouter-web/src/tui/controllers/tor.py @@@ -1,29 -1,0 +1,35 @@@ +import web +import view, config +from view import render - from tui.utils import session ++from tui.utils import session, parsing + +""" +The main Tor status page +""" +class status: + def GET(self): - return render.base(render.torstatus()) ++ trc = parsing.torrc(config.torrc_file) ++ trc.parse() ++ output = trc.html_output() ++ return render.base(render.torstatus(output,config.torrc_file)) + + def POST(self): - return render.base(render.torstatus()) ++ trc = parsing.torrc(config.torrc_file) ++ trc.parse() ++ output = trc.html_output() ++ return render.base(render.torstatus(output,config.torrc_file)) + +""" +Tor configuration page +""" - class config: ++class torrc: + def update_config(self, data): + return True + + def GET(self): + return render.base(render.torconfig()) + + def POST(self): + self.update_config(web.input()) + return render.base(render.torconfig()) + diff --cc packages/torouter-web/src/tui/utils/parsing.py index e9ccc83,0000000..6acf988 mode 100644,000000..100644 --- a/packages/torouter-web/src/tui/utils/parsing.py +++ b/packages/torouter-web/src/tui/utils/parsing.py @@@ -1,83 -1,0 +1,104 @@@ +# These functions are for parsing /etc/network/interface +# files, they will be used inside torouter to visualize +# and edit configuration +import os + +class interfaces: + def __init__(self,filename): + self.fp = open(filename, "r") + self.wifi = {} + self.eth1 = {} + self.eth0 = {} + + def parse_line(self, line, iface): + name = line.split(" ")[0] + values = " ".join(line.split(" ")[1:]).rstrip() + if iface == "uap0": + if self.wifi.has_key(name): + if type(self.wifi[name]) is list: + self.wifi[name].append(values) + else: + self.wifi[name] = [self.wifi[name],values] + else: + self.wifi.update({name : values}) + elif iface == "eth1": + if self.eth1.has_key(name): + if type(self.eth1[name]) is list: + self.eth1[name].append(values) + else: + self.eth1[name] = [self.eth1[name],values] + else: + self.eth1.update({name : values}) + elif iface == "eth0": + if self.eth0.has_key(name): + if type(self.eth0[name]) is list: + self.eth0[name].append(values) + else: + self.eth0[name] = [self.eth0[name],values] + else: + self.eth0.update({name : values}) + + def parse(self): + iface = None + for line in self.fp.readlines(): + line = line.lstrip() + if line.startswith("#") or line == "": + continue + if line.startswith("iface"): + iface = line.split(" ")[1] + if iface: + self.parse_line(line, iface) + + def html_output(self, data): + output = "<h3>Interface %s</h3>\n" % data['iface'].split(" ")[0] + output += "<table class="interface" id="%s">\n" % data['iface'].split(" ")[0] + + for item in data.items(): + if item[0] != "iface": + if type(item[1]) is list: + for i in item[1]: + output += "<tr><td>%s</td><td>%s</td></tr>\n" % (item[0], i) + else: + output += "<tr><td>%s</td><td>%s</td></tr>\n" % (item[0],item[1]) + output += "</table>" + print output + return output + + def output(self, data): + print "iface %s" % data['iface'] + for item in data.items(): + if item[0] != "iface": + if type(item[1]) is list: + for i in item[1]: + print "%s %s" % (item[0], i) + else: + print "%s %s" % (item[0],item[1]) + ++class torrc: ++ def __init__(self,filename): ++ self.fp = open(filename, "r") ++ self.parsed = [] ++ ++ def parse(self): ++ for line in self.fp.readlines(): ++ if line.startswith("#") or line == "": ++ continue ++ else: ++ self.parsed.append(line) ++ ++ def html_output(self): ++ output = "<ul id="torrc">" ++ for line in self.parsed: ++ if line != "\n": ++ output += "<li><em>%s</em> %s</li>" % (line.split(" ")[0], " ".join(line.split(" ")[1:])) ++ output += "</ul>" ++ print output ++ return output ++ +#interfaces_file = os.getcwd() + "/../../../torouter-prep/configs/interfaces" +#itfc = interfaces(interfaces_file) +#itfc.parse() +#itfc.html_output(itfc.wifi) +#itfc.html_output(itfc.eth1) +#itfc.html_output(itfc.eth0) + diff --cc packages/torouter-web/src/tui/views/torstatus.html index ed83531,0000000..27b2888 mode 100644,000000..100644 --- a/packages/torouter-web/src/tui/views/torstatus.html +++ b/packages/torouter-web/src/tui/views/torstatus.html @@@ -1,1 -1,0 +1,3 @@@ - The main Tor status page ++$def with (content, torrc) ++<h2>This is the content of $:torrc</h2> ++$:content
tor-commits@lists.torproject.org