From d31fabf8cff5dae02e3fc759a4203bd374dddc99 Mon Sep 17 00:00:00 2001 From: schneefux Date: Sun, 30 Mar 2014 16:03:44 -0400 Subject: Initial commit --- boot/app/cgi-bin/index.cgi | 42 ++++++++++++++++++++++++++++++++ boot/app/cgi-bin/wifi.py | 60 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100755 boot/app/cgi-bin/index.cgi create mode 100755 boot/app/cgi-bin/wifi.py (limited to 'boot/app/cgi-bin') diff --git a/boot/app/cgi-bin/index.cgi b/boot/app/cgi-bin/index.cgi new file mode 100755 index 0000000..bcb85b5 --- /dev/null +++ b/boot/app/cgi-bin/index.cgi @@ -0,0 +1,42 @@ +#!/usr/bin/env python + +from wifi import * +import os +import cgi +import cgitb; cgitb.enable() # for troubleshooting + +# some housekeeping +print "Content-type: text/html" +print + +# get the form input +form = cgi.FieldStorage() +network = form.getvalue("network", "") +password = form.getvalue("password", "") + +# if not submitted yet, show them the network selection form +if not network: + + wifi = Wifi() + + networks = [x.replace("\n","") for x in wifi.access_points if x.replace("\n","") != "Jasper"] + select_code_split = ["" % (network, network) for network in networks] + select_code = "".join(select_code_split) + + response = open("index-template.html","r").read().replace("{{ select_code }}", select_code) + print response + +# otherwise, show them the password form +elif not password: + response = open("key-template.html","r").read().replace("{{ network }}", cgi.escape(network)) + print response + +# in the final case, process the wifi password and network data +else: + # show the confirmation page + response = open("connecting-template.html","r").read() + print response + + # save the configuration + wifi = Wifi() + wifi.add_wifi(network, password) \ No newline at end of file diff --git a/boot/app/cgi-bin/wifi.py b/boot/app/cgi-bin/wifi.py new file mode 100755 index 0000000..5cede72 --- /dev/null +++ b/boot/app/cgi-bin/wifi.py @@ -0,0 +1,60 @@ +import yaml +import os, subprocess + +class Wifi: + + access_points = [] + + def __init__(self): + + subprocess.call("iwlist wlan0 scan > temp.txt", shell = True) + output = open("temp.txt") + lines = output.readlines() + + for index, line in enumerate(lines): + + if "Address" in line: + + address = line[29:-1] + name = lines[index + 1].split("\"")[1] + self.access_points.append(name) + + self.access_points = list(set(self.access_points)) + + os.system("rm temp.txt") + + def add_wifi(self, SSID, KEY=""): + networks = yaml.safe_load(open("../networks.yml", "r")) + + # add new network to front of list + network = {"SSID": SSID, "KEY": KEY} + networks.insert(0, network) + + with open('../networks.yml', 'w') as outputFile: + output = yaml.dump(networks) + outputFile.write(output) + + def set_default_wifi(self, SSID, KEY=""): + + text = open("connect.txt", "r").read() + text = text.replace("{{ SSID }}", SSID) + text = text.replace("{{ KEY }}", KEY) + + outputFile = open("/etc/network/interfaces", "w") + outputFile.write(text) + outputFile.flush() + outputFile.close() + + subprocess.call(["sudo", "/etc/init.d/networking", "restart"]) + + def setup_adhoc(self): + + text = open("broadcast.txt", "r").read() + outputFile = open("/etc/network/interfaces","w") + outputFile.write(text) + outputFile.flush() + outputFile.close() + + subprocess.call(["sudo", "/etc/init.d/networking", "restart"]) + subprocess.call(['sudo', '/usr/sbin/dhcpd', '-q', '-cf', '/etc/dhcp/dhcpd.conf', '-pf', '/var/run/dhcpd.pid']) + subprocess.call(["sudo", "/etc/init.d/networking", "restart"]) -- cgit v1.3.1