aboutsummaryrefslogtreecommitdiffstats
path: root/packages/torouter-web
diff options
context:
space:
mode:
authorJacob Appelbaum <jacob@appelbaum.net>2011-08-13 04:39:04 +0200
committerJacob Appelbaum <jacob@appelbaum.net>2011-08-13 04:39:04 +0200
commita56b3841d2adb8c995d6fe4603a7e7751bfa6d78 (patch)
tree75a5c6285f155c4d36154001c3d06b8b5414e6f3 /packages/torouter-web
parent2196124bf23eb9a9e4b708b2ed098011eb54df2c (diff)
parentf54fe96d36551fc61d746d875365e6722d56afd2 (diff)
downloadtorouter-a56b3841d2adb8c995d6fe4603a7e7751bfa6d78.tar.gz
torouter-a56b3841d2adb8c995d6fe4603a7e7751bfa6d78.zip
Merge branch 'master' of ssh://git-rw.torproject.org/torouter
Diffstat (limited to 'packages/torouter-web')
-rw-r--r--packages/torouter-web/static/main.css10
-rw-r--r--packages/torouter-web/tui/controllers/network.py56
-rw-r--r--packages/torouter-web/tui/controllers/tor.py4
-rw-r--r--packages/torouter-web/tui/utils/configuration.py85
-rw-r--r--packages/torouter-web/tui/utils/parsing.py66
-rw-r--r--packages/torouter-web/tui/views/firewall.html8
-rw-r--r--packages/torouter-web/tui/views/wired.html8
7 files changed, 200 insertions, 37 deletions
diff --git a/packages/torouter-web/static/main.css b/packages/torouter-web/static/main.css
index 41cb47f..5626e92 100644
--- a/packages/torouter-web/static/main.css
+++ b/packages/torouter-web/static/main.css
@@ -3,13 +3,17 @@
body { margin: 0;border: 0;padding: 0; }
div.wrapper {
+ min-height: 300px;
width: 800px;
margin: 0 auto;
}
div.footer {
- background-color: #CCC;
+ text-align: center;
+ background-color: #333;
color: white;
+ padding-top: 20px;
+ padding-bottom: 20px;
}
div.header {
@@ -22,8 +26,12 @@ div.header ul {
}
div.header ul li {
+ font-size: 20px;
float: left;
padding: 5px 10px;
}
+div.header ul#submenu li {
+ font-size: 15px;
+}
diff --git a/packages/torouter-web/tui/controllers/network.py b/packages/torouter-web/tui/controllers/network.py
index 7022ca4..b5da4e3 100644
--- a/packages/torouter-web/tui/controllers/network.py
+++ b/packages/torouter-web/tui/controllers/network.py
@@ -1,7 +1,7 @@
import web
import view, config
from view import render
-from tui.utils import session
+from tui.utils import session,configuration
"""
This function is used to generate the network
@@ -15,7 +15,7 @@ def menu(n):
else:
a.append("")
print a
- return """<ul>
+ return """<ul id="submenu">
<li><a href="/network" class="%s">Main</a></li>
<li><a href="/network/firewall" class="%s">Firewall</a></li>
<li><a href="/network/wireless" class="%s">Wireless</a></li>
@@ -28,6 +28,10 @@ def menu(n):
The main page for network configuration
"""
class main:
+ # XXX do all the backend stuff
+ def update_config(self, data):
+ return True
+
def GET(self):
if session.is_logged() > 0:
return render.base(render.main(),menu(0))
@@ -36,6 +40,7 @@ class main:
def POST(self):
if session.is_logged() > 0:
+ self.update_config(web.input())
return render.base(render.main(),menu(0))
else:
return render.base(render.login())
@@ -44,14 +49,19 @@ class main:
The firewall configuration page
"""
class firewall:
+ # XXX do all the backend stuff
+ def update_config(self, data):
+ return True
+
def GET(self):
if session.is_logged() > 0:
- return render.base(render.main(),menu(0))
+ return render.base(render.firewall(configuration.get_form("firewall")),menu(0))
else:
return render.base(render.login())
def POST(self):
if session.is_logged() > 0:
+ self.update_config(web.input())
return render.base(render.firewall(),menu(1))
else:
return render.base(render.login())
@@ -62,46 +72,19 @@ class firewall:
Wireless network configuration page
"""
class wireless:
- def get_current_config(self):
- conf = {'essid' : None, 'encryption' : None, 'key' : None}
-
- # XXX Dummy default config for testing purposes
- # plugin here the actual code for config retreival
- conf['essid'] = "Torouter"
- conf['encryption'] = "WPA2"
- conf['key'] = "ljdasjkbcuBH12389Ba"
-
-
- return conf
-
- def build_form(self):
- c = self.get_current_config()
- ret_form = web.form.Form(
- web.form.Textbox(name='essid',
- description='Wireless ESSID', value=c['essid']),
- web.form.Dropdown(name='enctype', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
- description='Wireless encryption scheme', value=c['encryption']),
- web.form.Password(name='key',
- description='key', value=c['key']),
- web.form.Button('save')
- )
- self.form = ret_form
-
- return True
-
+ # XXX do all the backend stuff
def update_config(self, data):
return True
def GET(self):
if session.is_logged() > 0:
- if self.build_form():
- return render.base(render.wireless(self.form()),menu(2))
+ return render.base(render.wireless(configuration.get_form("wireless")),menu(2))
else:
return render.base(render.login())
def POST(self):
if session.is_logged() > 0:
- self.update_config(None)
+ self.update_config(web.input())
print web.input()
return render.base(render.saved(web.input()),menu(2))
else:
@@ -111,14 +94,19 @@ class wireless:
Wired network configuration page
"""
class wired:
+ # XXX do all the backend stuff
+ def update_config(self, data):
+ return True
+
def GET(self):
if session.is_logged() > 0:
- return render.base(render.wired(),menu(3))
+ return render.base(render.wired(configuration.get_form("wired")),menu(3))
else:
return render.base(render.login())
def POST(self):
if session.is_logged() > 0:
+ self.update_config(web.input())
return render.base(render.wired(),menu(3))
else:
return render.base(render.login())
diff --git a/packages/torouter-web/tui/controllers/tor.py b/packages/torouter-web/tui/controllers/tor.py
index ca96209..d07cb71 100644
--- a/packages/torouter-web/tui/controllers/tor.py
+++ b/packages/torouter-web/tui/controllers/tor.py
@@ -17,9 +17,13 @@ class status:
Tor configuration page
"""
class config:
+ 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 --git a/packages/torouter-web/tui/utils/configuration.py b/packages/torouter-web/tui/utils/configuration.py
new file mode 100644
index 0000000..88bbc05
--- /dev/null
+++ b/packages/torouter-web/tui/utils/configuration.py
@@ -0,0 +1,85 @@
+import web
+import config
+
+def get(name):
+ conf = {}
+ # XXX The content of these functions are just
+ # skeletons
+ if name == "wireless":
+ conf['essid'] = "Torouter"
+ conf['encryption'] = "WPA2"
+ conf['key'] = "ljdasjkbcuBH12389Ba"
+ return conf
+ elif name == "firewall":
+ conf['el1'] = "Element 1"
+ conf['el2'] = "Element 2"
+ conf['el3'] = "Element 3"
+ return conf
+ elif name == "wired":
+ conf['el1'] = "Element 1"
+ conf['el2'] = "Element 2"
+ conf['el3'] = "Element 3"
+ return conf
+ elif name == "tor":
+ conf['el1'] = "Element 1"
+ conf['el2'] = "Element 2"
+ conf['el3'] = "Element 3"
+ return conf
+
+def write(name, data):
+ if name == "wireless":
+ return True
+ elif name == "firewall":
+ return True
+ elif name == "wired":
+ return True
+ elif name == "tor":
+ return True
+
+def get_form(name):
+ # Also these are just skeletons
+ if name == "wireless":
+ c = get(name)
+ return web.form.Form(
+ web.form.Textbox(name='essid',
+ description='Wireless ESSID', value=c['essid']),
+ web.form.Dropdown(name='enctype', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
+ description='Wireless encryption scheme', value=c['encryption']),
+ web.form.Password(name='key',
+ description='key', value=c['key']),
+ web.form.Button('save')
+ )
+ elif name == "firewall":
+ c = get(name)
+ return web.form.Form(
+ web.form.Textbox(name='el1',
+ description='The first element', value=c['el2']),
+ web.form.Dropdown(name='el2', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
+ description='The second selement', value=c['el2']),
+ web.form.Password(name='el3',
+ description='The third element', value=c['el3']),
+ web.form.Button('save')
+ )
+ elif name == "wired":
+ c = get(name)
+ return web.form.Form(
+ web.form.Textbox(name='el1',
+ description='The first element', value=c['el2']),
+ web.form.Dropdown(name='el2', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
+ description='The second selement', value=c['el2']),
+ web.form.Password(name='el3',
+ description='The third element', value=c['el3']),
+ web.form.Button('save')
+ )
+ elif name == "tor":
+ c = get(name)
+ return web.form.Form(
+ web.form.Textbox(name='el1',
+ description='The first element', value=c['el2']),
+ web.form.Dropdown(name='el2', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
+ description='The second selement', value=c['el2']),
+ web.form.Password(name='el3',
+ description='The third element', value=c['el3']),
+ web.form.Button('save')
+ )
+
diff --git a/packages/torouter-web/tui/utils/parsing.py b/packages/torouter-web/tui/utils/parsing.py
new file mode 100644
index 0000000..c6ebe02
--- /dev/null
+++ b/packages/torouter-web/tui/utils/parsing.py
@@ -0,0 +1,66 @@
+# These functions are for parsing /etc/network/interface
+# files, they will be used inside torouter to visualize
+# and edit configuration
+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 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])
+
+itfc = interfaces("/tmp/interfaces")
+itfc.parse()
+itfc.output(itfc.wifi)
+itfc.output(itfc.eth1)
+itfc.output(itfc.eth0)
+
diff --git a/packages/torouter-web/tui/views/firewall.html b/packages/torouter-web/tui/views/firewall.html
index c3a244d..30f5a9b 100644
--- a/packages/torouter-web/tui/views/firewall.html
+++ b/packages/torouter-web/tui/views/firewall.html
@@ -1 +1,7 @@
-the firewall page
+$def with (form)
+
+<h2>Firewall configuration page</h2>
+
+<form action="" method="POST">
+$:form.render()
+</form>
diff --git a/packages/torouter-web/tui/views/wired.html b/packages/torouter-web/tui/views/wired.html
index 3a517d1..3676f63 100644
--- a/packages/torouter-web/tui/views/wired.html
+++ b/packages/torouter-web/tui/views/wired.html
@@ -1 +1,7 @@
-the wired page
+$def with (form)
+
+<h2>Wired configuration page</h2>
+
+<form action="" method="POST">
+$:form.render()
+</form>