aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArturo FilastoĢ€ <hellais@torproject.org>2011-08-19 15:05:07 +0200
committerArturo FilastoĢ€ <hellais@torproject.org>2011-08-19 15:05:07 +0200
commit406ad86833f44167cf3719d7d052bdca0c0da0d7 (patch)
treea9d0a239915f78c16a64606354cb4cd6858733b6
parent89a84c8bd8ebad59388b180dc1f8a7e497f3ba58 (diff)
downloadtorouter-406ad86833f44167cf3719d7d052bdca0c0da0d7.tar.gz
torouter-406ad86833f44167cf3719d7d052bdca0c0da0d7.zip
Add support for torrc file read and write
-rw-r--r--packages/torouter-web/src/config.py5
-rw-r--r--packages/torouter-web/src/tui/controllers/tor.py16
-rw-r--r--packages/torouter-web/src/tui/utils/configuration.py3
-rw-r--r--packages/torouter-web/src/tui/utils/fileio.py21
-rw-r--r--packages/torouter-web/src/tui/utils/parsing.py7
-rw-r--r--packages/torouter-web/src/tui/views/torconfig.html12
-rw-r--r--packages/torouter-web/src/tui/views/torstatus.html2
7 files changed, 60 insertions, 6 deletions
diff --git a/packages/torouter-web/src/config.py b/packages/torouter-web/src/config.py
index 15057df..f3f8dcc 100644
--- a/packages/torouter-web/src/config.py
+++ b/packages/torouter-web/src/config.py
@@ -11,6 +11,7 @@ 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"
+interfaces_file = os.getcwd() + "/../../torouter-prep/configs/interfaces"
+#torrc_file = os.getcwd() + "/../../torouter-prep/configs/torrc"
+torrc_file = "/tmp/torrc"
diff --git a/packages/torouter-web/src/tui/controllers/tor.py b/packages/torouter-web/src/tui/controllers/tor.py
index af8678c..eaa587d 100644
--- a/packages/torouter-web/src/tui/controllers/tor.py
+++ b/packages/torouter-web/src/tui/controllers/tor.py
@@ -1,7 +1,7 @@
import web
import view, config
from view import render
-from tui.utils import session, parsing
+from tui.utils import session, parsing, fileio
"""
The main Tor status page
@@ -24,12 +24,22 @@ Tor configuration page
"""
class torrc:
def update_config(self, data):
+ # Now it will just write to /tmp/torrc
+ files = [('/tmp/torrc',data.torrc)]
+ fileio.write(files)
+
return True
def GET(self):
- return render.base(render.torconfig())
+ trc = parsing.torrc(config.torrc_file)
+ output = trc.output()
+ return render.base(render.torconfig(output))
def POST(self):
self.update_config(web.input())
- return render.base(render.torconfig())
+ trc = parsing.torrc(config.torrc_file)
+ trc.parse()
+ output = trc.html_output()
+ return render.base(render.torstatus(output,config.torrc_file))
+
diff --git a/packages/torouter-web/src/tui/utils/configuration.py b/packages/torouter-web/src/tui/utils/configuration.py
index 88bbc05..ba3d251 100644
--- a/packages/torouter-web/src/tui/utils/configuration.py
+++ b/packages/torouter-web/src/tui/utils/configuration.py
@@ -8,6 +8,7 @@ def get(name):
if name == "wireless":
conf['essid'] = "Torouter"
conf['encryption'] = "WPA2"
+ conf['mac'] = "00:66:66:66:66:66"
conf['key'] = "ljdasjkbcuBH12389Ba"
return conf
elif name == "firewall":
@@ -43,6 +44,8 @@ def get_form(name):
return web.form.Form(
web.form.Textbox(name='essid',
description='Wireless ESSID', value=c['essid']),
+ web.form.Textbox(name='mac',
+ description='Wireless MAC address', value=c['mac']),
web.form.Dropdown(name='enctype', args=['WPA2', 'WPA', 'WEP (not reccomended)', 'open'],
description='Wireless encryption scheme', value=c['encryption']),
web.form.Password(name='key',
diff --git a/packages/torouter-web/src/tui/utils/fileio.py b/packages/torouter-web/src/tui/utils/fileio.py
new file mode 100644
index 0000000..3234f1e
--- /dev/null
+++ b/packages/torouter-web/src/tui/utils/fileio.py
@@ -0,0 +1,21 @@
+import os
+
+def write(files):
+ tmpfiles = []
+ for file in files:
+ tmpfile = "/tmp/" + file[0].split("/")[-1:][0] + ".tmp"
+ tmpfiles.append((tmpfile,file[0]))
+ # open the tmp file for write
+ f = open(tmpfile, 'w')
+ # write the data (file[1]) to the temp file
+ f.write(file[1])
+ f.close()
+
+ # rename all the file. This operation is atomic
+ for file in tmpfiles:
+ os.rename(file[0], file[1])
+
+files = [('/tmp/file1','blablbal'),('/tmp/file2','The content'),('/tmp/file3','The content 3')]
+
+write(files)
+
diff --git a/packages/torouter-web/src/tui/utils/parsing.py b/packages/torouter-web/src/tui/utils/parsing.py
index beb45d3..daf4436 100644
--- a/packages/torouter-web/src/tui/utils/parsing.py
+++ b/packages/torouter-web/src/tui/utils/parsing.py
@@ -87,6 +87,13 @@ class torrc:
else:
self.parsed.append(line)
+ def output(self):
+ output = ""
+ for line in self.fp.readlines():
+ print line
+ output += line
+ return output
+
def html_output(self):
output = "<ul id=\"torrc\">"
for line in self.parsed:
diff --git a/packages/torouter-web/src/tui/views/torconfig.html b/packages/torouter-web/src/tui/views/torconfig.html
index 26bd228..223c339 100644
--- a/packages/torouter-web/src/tui/views/torconfig.html
+++ b/packages/torouter-web/src/tui/views/torconfig.html
@@ -1 +1,11 @@
-The main Tor config page
+$def with (content)
+
+<form method="POST" action="/tor/config" enctype="multipart/form-data">
+<ul>
+<li><textarea cols="100" rows="50" name="torrc">
+$:content
+</textarea></li>
+<li><input type="submit" name="save"></li>
+</ul>
+</form>
+
diff --git a/packages/torouter-web/src/tui/views/torstatus.html b/packages/torouter-web/src/tui/views/torstatus.html
index 27b2888..a2eeacf 100644
--- a/packages/torouter-web/src/tui/views/torstatus.html
+++ b/packages/torouter-web/src/tui/views/torstatus.html
@@ -1,3 +1,5 @@
$def with (content, torrc)
<h2>This is the content of $:torrc</h2>
$:content
+
+<a href="/tor/config">edit torrc</a>