90c3e2b7798d75b427bc092261340a33b6fa8074
[oweals/luci.git] / applications / luci-app-travelmate / luasrc / view / travelmate / runtime.htm
1 <%#
2 Copyright 2017-2018 Dirk Brenken (dev@brenken.org)
3 This is free software, licensed under the Apache License, Version 2.0
4 -%>
5
6 <%+travelmate/travelmate_css%>
7 <script type="text/javascript">
8 //<![CDATA[
9         function status_update(json)
10         {
11                         var btn1  = document.getElementById("btn1");
12                         var view  = document.getElementById("value_1");
13                         var input = json.data.travelmate_status;
14
15                         btn1.value = "<%:Restart%>";
16                         btn1.name  = "do_restart";
17                         view.innerHTML = input || "-";
18                         view = document.getElementById("value_2");
19                         input = json.data.travelmate_version;
20                         view.innerHTML = input || "-";
21                         view = document.getElementById("value_3");
22                         input = json.data.station_id;
23                         view.innerHTML = input || "-";
24                         view = document.getElementById("value_4");
25                         input = json.data.station_interface;
26                         view.innerHTML = input || "-";
27                         view = document.getElementById("value_5");
28                         input = json.data.faulty_stations;
29                         view.innerHTML = input || "-";
30                         view = document.getElementById("value_6");
31                         input = json.data.last_rundate;
32                         view.innerHTML = input || "-";
33         }
34
35         function btn_action(action)
36         {
37                 var btn1 = document.getElementById("btn1");
38                 var btn1_running = document.getElementById("btn1_running");
39
40                 btn1.disabled = true;
41                 running(btn1_running, 1);
42
43                 new XHR.get('<%=luci.dispatcher.build_url("admin", "services", "travelmate")%>/action/' + action.name, null,
44                 function(x)
45                 {
46                         if (!x)
47                         {
48                                 return;
49                         }
50                         btn1.disabled = false;
51                         running(btn1_running, 0);
52                 });
53         }
54
55         function running(element, state)
56         {
57                 if (state === 1)
58                 {
59                         var running_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" />';
60                         element.innerHTML = running_html;
61                 }
62                 else
63                 {
64                         element.innerHTML = '';
65                 }
66         }
67
68         function toggle_qrcode() {
69                 var view = document.getElementById("qrcode");
70                 if (view.style.display === "none") {
71                         view.style.display = "block";
72                 } else {
73                         view.style.display = "none";
74                 }
75         }
76
77         XHR.get('<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
78         function(x, json_info)
79         {
80                 if (!x || !json_info)
81                 {
82                         return;
83                 }
84                 status_update(json_info)
85         });
86
87         XHR.poll(-1, '<%=luci.dispatcher.build_url("admin", "services", "travelmate", "status")%>', null,
88         function(x, json_info)
89         {
90                 if (!x || !json_info)
91                 {
92                         return;
93                 }
94                 status_update(json_info)
95         });
96 //]]>
97 </script>
98
99 <h3><%:Runtime Information%></h3>
100 <div class="cbi-value" id="status_1">
101         <label class="cbi-value-title" for="status_1"><%:Travelmate Status (Quality)%></label>
102         <div class="cbi-value-field">
103                 <span class="runtime" id="value_1">-</span>
104         </div>
105 </div>
106 <div class="cbi-value" id="status_2">
107         <label class="cbi-value-title" for="status_2"><%:Travelmate Version%></label>
108         <div class="cbi-value-field">
109                 <span class="runtime" id="value_2">-</span>
110         </div>
111 </div>
112 <div class="cbi-value" id="status_3">
113         <label class="cbi-value-title" for="status_3"><%:Station ID (RADIO/SSID/BSSID)%></label>
114         <div class="cbi-value-field">
115                 <span class="runtime" id="value_3">-</span>
116         </div>
117 </div>
118 <div class="cbi-value" id="status_4">
119         <label class="cbi-value-title" for="status_4"><%:Station Interface%></label>
120         <div class="cbi-value-field">
121                 <span class="runtime" id="value_4">-</span>
122         </div>
123 </div>
124 <div class="cbi-value" id="status_5">
125         <label class="cbi-value-title" for="status_5"><%:Faulty Stations%></label>
126         <div class="cbi-value-field">
127                 <span class="runtime" id="value_5">-</span>
128         </div>
129 </div>
130 <div class="cbi-value" id="status_6">
131         <label class="cbi-value-title" for="status_6"><%:Last Run%></label>
132         <div class="cbi-value-field">
133                 <span class="runtime" id="value_6">-</span>
134         </div>
135 </div>
136 <hr />
137 <div class="cbi-value" id="button_1">
138         <label class="cbi-value-title" for="button_1"><%:Restart Travelmate%></label>
139         <div class="cbi-value-field">
140                 <input class="cbi-button cbi-button-reset" id="btn1" type="button" name="do_restart" value="<%:Restart%>" onclick="btn_action(this)" />
141                 <span id="btn1_running" class="btn_running"></span>
142         </div>
143 </div>
144 <div class="cbi-value" id="button_2">
145         <label class="cbi-value-title" for="button_2"><%:View AP QR-Codes%></label>
146         <div class="cbi-value-field">
147                 <input class="cbi-button cbi-button-apply" type="button" value="<%:Show/Hide QR-Codes%>" onclick="toggle_qrcode()" />
148         </div>
149 </div>
150 <div class="cbi-value" style="margin-bottom: 0px">
151         <span class="cbi-value" style="display: none" id="qrcode">
152 <%-
153                 local fs  = require("nixio.fs")
154                 local uci = require("luci.model.uci").cursor()
155                 local qrcode
156
157                 uci:foreach("wireless", "wifi-iface", function(s)
158                         local device = s.device or ""
159                         local mode = s.mode or ""
160                         local ssid = s.ssid or ""
161                         local enc = s.encryption or ""
162                         local key = s.key or ""
163                         local hidden = s.hidden or "false"
164                         local disabled = s.disabled or ""
165                         local wep_slots = {s.key1 or "", s.key2 or "", s.key3 or "", s.key4 or ""}
166
167                         if device and mode == "ap" and disabled ~= "1" then
168                                 if string.match(enc, '^psk') then
169                                         enc = "WPA"
170                                 elseif string.match(enc, '^wep') then
171                                         enc = "WEP"
172                                         if tonumber(key) then
173                                                 key = wep_slots[tonumber(key)]
174                                         end
175                                 elseif enc == "none" then
176                                         enc = "nopass"
177                                         key = "nokey"
178                                 else
179                                         enc = ""
180                                 end
181
182                                 if hidden == "1" then
183                                         hidden = "true"
184                                 end
185
186                                 if ssid and enc and key then
187                                         local e_ssid = string.gsub(ssid,"[\"\\';:, ]",[[\\\%1]])
188                                         local e_key = string.gsub(key,"[\"\\';:, ]",[[\\\%1]])
189
190                                         if fs.access("/usr/bin/qrencode") then
191                                                 qrcode = luci.sys.exec("/usr/bin/qrencode --inline --8bit --type=SVG --output=- 'WIFI:S:\"'" .. e_ssid .. "'\";T:'" .. enc .. "';P:\"'" .. e_key .. "'\";H:'" .. hidden .. "';'")
192 -%>
193                 <div class="qr-code">
194                         <%=qrcode%>
195                 </div>
196                 <div class="qr-code">
197                         <em><%:AP on %><%=device%><%: with SSID %>"<%=ssid%>"</em>
198                         <hr />
199                 </div>
200 <%-
201                                         end
202                                 end
203                         end
204                 end)
205                 if not qrcode then
206 -%>
207                 <div class="qr-code">
208                         <em><%:For QR-Code support please install package 'qrencode'!%></em>
209                 </div>
210 <%-
211                 end
212 -%>
213         </span>
214 </div>