2 from package.bottle import *
5 # Refer https://segmentfault.com/a/1190000011579147
7 DIR = os.path.dirname(os.path.realpath(__file__))
8 CONF = '/usr/local/trackerpp/config/trackerpp.conf'
9 SERVICE = 'trackerpp.service'
13 TEMPLATE_PATH.insert(0, DIR + '/views/')
17 return subprocess.check_output("iw dev | grep Interface | awk '{print $2}'", shell=True).strip()
19 def getConnectedSSID():
20 return subprocess.check_output("iw dev | grep ssid | awk '{print $2}'", shell=True).strip()
23 return subprocess.check_output("ip addr", shell=True).strip()
27 return subprocess.check_output("iw dev wlan0 info | grep type | awk '{print $2}'", shell=True).strip()
30 return getCurrentMode() == 'AP'
35 cmd = "iw dev " + wlan + " scan | grep -i ssid | awk '{print $2}'"
36 return subprocess.check_output(cmd, shell=True).strip().split('\n')
38 def getTrackerPPConf(fname = CONF):
39 with open(fname, 'rt') as f:
42 def updateTrackerPPConf(content, fname = CONF):
43 with open(fname, 'wt') as f:
46 def restartTrackerPPService():
47 subprocess.check_call("systemctl restart trackerpp.service", shell=True)
49 def getCurrentNetworkId():
50 return subprocess.check_output("wpa_cli -i wlan0 list_networks | grep -i current | awk '{print $1}'", shell=True).strip()
52 def connectWifi(ssid, passwd):
54 print 'stop hostapd first'
55 subprocess.check_output( DIR + "/script/stopHostapd.sh", shell=True)
57 cmd = "wpa_cli -i wlan0 add_network"
59 id = subprocess.check_output(cmd, shell=True).strip()
61 cmd = "wpa_cli -i wlan0 set_network " + id + " ssid '\"" + ssid + "\"'"
63 subprocess.check_output(cmd, shell=True)
65 cmd = "wpa_cli -i wlan0 set_network " + id + " psk '\"" + passwd + "\"'"
67 subprocess.check_output(cmd, shell=True)
69 cmd = "wpa_cli -i wlan0 disable_network " + getCurrentNetworkId()
71 subprocess.check_output(cmd, shell=True)
73 cmd = "wpa_cli -i wlan0 enable_network " + id
75 subprocess.check_output(cmd, shell=True)
79 cmd = "wpa_cli -i wlan0 disable_network " + getCurrentNetworkId()
81 subprocess.check_output(cmd, shell=True)
82 subprocess.check_output(DIR + "/script/startHostapd.sh", shell=True)
87 @get('/login') # or @route('/login')
89 return template('login.tpl', username="username", password="password")
91 def check_login(username, password):
92 return username == USERNAME and password == PASSWORD
94 form_dict = {'ipaddr': getIpAddr(),
96 'usedSsid': getConnectedSSID(),
101 action = request.forms.get('action')
102 if action == "Login":
103 username = request.forms.get('username')
104 password = request.forms.get('password')
105 if not check_login(username, password):
106 return "<p>Login failed.</p>"
108 form_dict['ipaddr'] = getIpAddr()
109 form_dict['usedSsid'] = getConnectedSSID()
110 form_dict['mode'] = 'AP' if isAPmode() else 'WiFi'
111 print getConnectedSSID()
112 print form_dict['usedSsid']
113 form_dict['ssids'] = getSSIDs()
114 elif action == 'Scan':
115 form_dict['usedSsid'] = getConnectedSSID()
116 form_dict['ssids'] = getSSIDs()
117 elif action == 'Connect':
118 selectedSsid = request.forms.get('select')
119 password = request.forms.get('password')
120 return connectWifi(selectedSsid, password)
121 elif action == 'Reset':
123 return template('main.tpl', **form_dict)
126 run(host='0.0.0.0', port=80)