fix bug
[networtool-web.git] / web.py
1 import os
2 from package.bottle import *
3 import subprocess
4
5 # Refer https://segmentfault.com/a/1190000011579147
6
7 DIR = os.path.dirname(os.path.realpath(__file__))
8 CONF = '/usr/local/trackerpp/config/trackerpp.conf'
9 SERVICE = 'trackerpp.service'
10 USERNAME = 'admin'
11 PASSWORD = 'admin123'
12
13 TEMPLATE_PATH.insert(0, DIR + '/views/')
14
15
16 def getWlanName():
17     return subprocess.check_output("iw dev | grep Interface | awk '{print $2}'", shell=True).strip()
18
19 def getConnectedSSID():
20     return subprocess.check_output("iw dev | grep ssid | awk '{print $2}'", shell=True).strip()
21
22 def getIpAddr():
23     return subprocess.check_output("ip addr", shell=True).strip()
24
25 # return AP or 
26 def getCurrentMode():
27     return subprocess.check_output("iw dev wlan0 info | grep type | awk '{print $2}'", shell=True).strip()
28
29 def isAPmode():
30     return getCurrentMode() == 'AP'
31
32 wlan = getWlanName();
33
34 def getSSIDs():
35     cmd = "iw dev " + wlan + " scan | grep -i ssid | awk '{print $2}'"
36     return subprocess.check_output(cmd, shell=True).strip().split('\n')
37
38 def getTrackerPPConf(fname = CONF):
39     with open(fname, 'rt') as f:
40         return f.read()
41
42 def updateTrackerPPConf(content, fname = CONF):
43     with open(fname, 'wt') as f:
44         f.write(content)
45
46 def restartTrackerPPService():
47     subprocess.check_call("systemctl restart trackerpp.service", shell=True)
48
49 def getCurrentNetworkId():
50     return subprocess.check_output("wpa_cli -i wlan0 list_networks | grep -i current | awk '{print $1}'", shell=True).strip()
51
52 def connectWifi(ssid, passwd):
53     if isAPmode():
54         print 'stop hostapd first'
55         subprocess.check_output( DIR + "/script/stopHostapd.sh", shell=True)
56
57     cmd = "wpa_cli -i wlan0 add_network"
58     print cmd
59     id = subprocess.check_output(cmd, shell=True).strip()
60
61     cmd = "wpa_cli -i wlan0 set_network " + id + " ssid '\"" + ssid + "\"'"
62     print cmd
63     subprocess.check_output(cmd, shell=True)
64
65     cmd = "wpa_cli -i wlan0 set_network " + id + " psk '\"" + passwd + "\"'"
66     print cmd
67     subprocess.check_output(cmd, shell=True)
68
69     cmd = "wpa_cli -i wlan0 disable_network " + getCurrentNetworkId()
70     print cmd
71     subprocess.check_output(cmd, shell=True)
72
73     cmd = "wpa_cli -i wlan0 enable_network " + id
74     print cmd
75     subprocess.check_output(cmd, shell=True)
76
77 def resetWifi():
78     if not isAPmode():
79         cmd = "wpa_cli -i wlan0 disable_network " + getCurrentNetworkId()
80         print cmd
81         subprocess.check_output(cmd, shell=True)
82     subprocess.check_output(DIR + "/script/startHostapd.sh", shell=True)
83
84
85
86 @route('/')
87 @get('/login') # or @route('/login')
88 def login():
89     return template('login.tpl', username="username", password="password")
90
91 def check_login(username, password):
92     return username == USERNAME and password == PASSWORD
93
94 form_dict = {'ipaddr': getIpAddr(), 
95             'ssids': getSSIDs(), 
96             'usedSsid': getConnectedSSID(),
97             'mode' : ''}
98
99 @post('/main')
100 def do_main():
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>"
107         print 'lobin'
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':
122         return resetWifi()
123     return template('main.tpl', **form_dict)
124
125
126 run(host='0.0.0.0', port=80)