wok-6.x view ppp/stuff/ppp.cgi @ rev 22850

bluez: add v4 deprecated tools (again)
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Feb 16 19:19:37 2020 +0100 (2020-02-16)
parents c34ef09acb7c
children f51604223163
line source
1 #!/bin/sh
2 #
3 # Network/PPP configuration CGI interface
4 #
5 # Copyright (C) 2015 SliTaz GNU/Linux - BSD License
6 #
8 # Common functions from libtazpanel
9 . lib/libtazpanel
10 get_config
13 set_secrets()
14 {
15 grep -qs "^$1 " /etc/ppp/pap-secrets ||
16 echo "$1 * $2" >> /etc/ppp/pap-secrets
17 grep -qs "^$1 " /etc/ppp/chap-secrets ||
18 echo "$1 * $2" >> /etc/ppp/chap-secrets
19 }
22 create_gsm_conf()
23 {
24 local provider="${1:-myGSMprovider}"
25 set_secrets "$provider" "$provider"
26 [ -s /etc/ppp/scripts/gsm.chat ] ||
27 cat > /etc/ppp/scripts/gsm.chat <<EOT
28 ABORT 'BUSY'
29 ABORT 'NO CARRIER'
30 ABORT 'VOICE'
31 ABORT 'NO DIALTONE'
32 ABORT 'NO DIAL TONE'
33 ABORT 'NO ANSWER'
34 ABORT 'DELAYED'
35 REPORT CONNECT
36 TIMEOUT 6
37 '' 'ATQ0'
38 'OK-AT-OK' 'ATZ'
39 TIMEOUT 3
40 'OK' 'ATI'
41 'OK' 'ATZ'
42 'OK' 'ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0'
43 'OK' 'AT+CGDCONT=1,"IP","$provider"'
44 'OK' 'ATDT*99#'
45 TIMEOUT 30
46 CONNECT ''
47 EOT
48 [ -s /etc/ppp/options-gsm ] ||
49 cat > /etc/ppp/options-gsm << EOT
50 rfcomm0
51 460800
52 lock
53 crtscts
54 modem
55 passive
56 novj
57 defaultroute
58 noipdefault
59 usepeerdns
60 noauth
61 hide-password
62 persist
63 holdoff 10
64 maxfail 0
65 debug
66 EOT
67 [ -s /etc/ppp/peers/gsm ] ||
68 cat > /etc/ppp/peers/gsm << EOT
69 file /etc/ppp/options-gsm
70 user "$provider"
71 password "$provider"
72 connect "/usr/sbin/chat -v -t15 -f /etc/ppp/scripts/gsm.chat"
73 EOT
74 }
77 phone_names()
78 {
79 rfcomm | awk '/connected/{print $2}' | while read mac; do
80 grep -A2 $mac /etc/bluetooth/rfcomm.conf | \
81 sed '/comment/!d;s/.* "\(.*\) modem";/ \1/'
82 done
83 }
86 case "$1" in
87 menu)
88 TEXTDOMAIN_original=$TEXTDOMAIN
89 export TEXTDOMAIN='ppp'
91 groups | grep -q dialout && dialout="" || dialout=" data-root"
92 case "$2" in
93 *VPN*)
94 [ "$(which pptp 2>/dev/null)$(which pptpd 2>/dev/null)" ] && cat <<EOT
95 <li><a data-icon="vpn" href="ppp.cgi#pptp"$dialout>$(_ 'PPTP')</a></li>
96 EOT
97 [ "$(which pppssh 2>/dev/null)" ] && cat <<EOT
98 <li><a data-icon="vpn" href="ppp.cgi#pppssh"$dialout>$(_ 'PPP/SSH')</a></li>
99 EOT
100 ;;
101 *)
102 cat <<EOT
103 <li><a data-icon="modem" href="ppp.cgi"$dialout>$(_ 'PPP Modem')</a></li>
104 EOT
105 esac
106 export TEXTDOMAIN=$TEXTDOMAIN_original
107 exit
108 esac
111 #
112 # Commands
113 #
115 case " $(GET) " in
116 *\ start_pstn\ *)
117 if [ "$(GET user)" ]; then
118 set_secrets "$(GET user)" "$(GET pass)"
119 sed -i 's/^name /d' /etc/ppp/options
120 echo "name $(GET user)" >> /etc/ppp/options
121 /etc/ppp/scripts/ppp-off
122 /etc/ppp/scripts/ppp-on &
123 fi ;;
124 *\ start_gsm\ *)
125 if [ "$(GET gsmprovider)" ]; then
126 [ -n "$(pidof dbus-daemon)" ] || /etc/init.d/dbus start
127 [ -n "$(pidof bluetoothd)" ] || bluetoothd
128 grep -qs btusb /proc/modules || !modprobe btusb || sleep 1
129 [ -n "$(which bluetoothctl)" ] && bluetoothctl power on
130 hcitool scan | grep : | while read dev name; do
131 set -- $dev "$name" $(sdptool browse $dev | awk '
132 /Service Class ID List/ {n=0}
133 /Dialup Networking/ {n=1}
134 /RFCOMM/ {n++}
135 /Channel/ {if (n==2) { print $2; exit } }')
136 [ -n "$3" ] || continue
137 grep -qs $1 /etc/bluetooth/rfcomm.conf ||
138 cat >> /etc/bluetooth/rfcomm.conf <<EOT
139 rfcomm0 {
140 bind yes;
141 device $1;
142 channel $3;
143 comment "$2 modem";
144 }
145 EOT
146 rfcomm bind all || rfcomm bind 0 $1 $3
147 break
148 done
149 create_gsm_conf "$(GET gsmprovider)"
150 [ -n "$(GET gsmprovider)" ] &&
151 sed -i "s|\"IP\",\".*\"|\"IP\",\"$(GET gsmprovider)\"|" \
152 /etc/ppp/scripts/gsm.chat &&
153 sed -i "s|myGSMprovider|$(GET gsmprovider)|g" \
154 /etc/ppp/chap-secrets /etc/ppp/pap-secrets
155 pppd call gsm
156 host=$(hcitool dev | sed '/hci0/!d;s/.*hci0\t//')
157 pin=$(GET gsmpin)
158 hcitool scan | grep "$1" | while read adrs name ; do
159 echo ${pin:-0000} | bluez-simple-agent $host $adrs
160 done
161 fi ;;
162 *\ stop_pstn\ *|*\ stop_gsm\ *)
163 /etc/ppp/scripts/ppp-off ;;
164 *\ start_pppoe\ *)
165 if [ "$(GET user)" ]; then
166 set_secrets "$(GET user)" "$(GET pass)"
167 grep -qs pppoe /etc/ppp/options || cat > /etc/ppp/options <<EOT
168 plugin rp-pppoe.so
169 noipdefault
170 defaultroute
171 mtu 1492
172 mru 1492
173 lock
174 EOT
175 sed -i 's/^name /d' /etc/ppp/options
176 echo "name $(GET user)" >> /etc/ppp/options
177 ( . /etc/network.conf ; pppd $INTERFACE & )
178 fi ;;
179 *\ stop_pppoe\ *)
180 killall pppd ;;
181 *\ setpppssh\ *)
182 cat > /etc/ppp/pppssh <<EOT
183 PEER="$(GET peer)"
184 SSHARG="$(GET ssharg)"
185 LOCALIP="$(GET localip)"
186 REMOTEIP="$(GET remoteip)"
187 LOCALPPP="$(GET localpppopt)"
188 REMOTEPPP="$(GET remotepppopt)"
189 ROUTES="$(GET routes)"
190 UDP="$(GET udp)"
191 EOT
192 [ "$(GET pass)" ] && export DROPBEAR_PASSWORD="$(GET pass)"
193 case " $(GET) " in
194 *\ send_key\ *)
195 ( dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key ;
196 cat /etc/ssh/ssh_host_rsa_key.pub ) 2> /dev/null | \
197 grep ^ssh | dbclient $(echo $(GET send_key) | sed \
198 's/.*\([A-Za-z0-9_\.-]*\).*/\1/') "mkdir .ssh 2> /dev/null ; \
199 while read key; do for i in authorized_keys authorized_keys2; do \
200 grep -qs '\$key' .ssh/\$i || echo '\$key' >> .ssh/\$i ; done ; done ; \
201 chmod 700 .ssh ; chmod 600 .ssh/authorized_keys*"
202 ;;
203 *\ stop_pppssh\ *)
204 ppp="$(sed '/pppd/!d;s/.*="\([^"]*\).*/\1/' /usr/bin/pppssh)"
205 kill $(busybox ps x | grep "$ppp" | awk '/pty/{next}/dbclient/{print $1}')
206 ;;
207 *\ start_pppssh\ *)
208 pppssh "$(GET ssharg) $(GET peer)" \
209 "$(GET localip):$(GET remoteip) $(GET localpppopt)" \
210 "$(GET remotepppopt)" "$(GET routes)" \
211 "$(GET udp)" > /dev/null &
212 sleep 1
213 ;;
214 esac
215 ;;
216 esac
218 USERNAME="$(sed '/^name/!d;s/^[^ ]* *//' /etc/ppp/options)"
219 PASSWORD="$(awk -v key=$USERNAME "\$1==key{print \$3}" /etc/ppp/pap-secrets)"
220 ACCOUNT="$(sed '/^ACCOUNT=/!d;s/^.*=\([^ \t]*\).*/\1/' /etc/ppp/scripts/ppp-on)"
221 PASSPSTN="$(sed '/^PASSWORD=/!d;s/^.*=\([^ \t]*\).*/\1/' /etc/ppp/scripts/ppp-on)"
222 PHONE="$(sed '/^TELEPHONE=/!d;s/^.*=\([^ \t]*\).*/\1/' /etc/ppp/scripts/ppp-on)"
223 TITLE="$(_ 'TazPanel - Network') - $(_ 'PPP Connections')"
224 header
225 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
226 cat << EOT
227 <div id="sidebar">
228 <section>
229 <header>
230 $(_ 'Documentation')
231 </header>
232 <a data-icon="web" href="http://ppp.samba.org/" target="_blank" rel="noopener">$(_ 'PPP web page')</a><p>
233 <a data-icon="help" href="index.cgi?exec=pppd%20--help" target="_blank" rel="noopener">$(_ 'PPP help')</a><p>
234 <a data-icon="help" href="index.cgi?exec=man%20pppd" target="_blank" rel="noopener">$(_ 'PPP Manual')</a><p>
235 <a data-icon="web" href="https://en.wikipedia.org/wiki/Hayes_command_set" target="_blank" rel="noopener">$(_ 'Hayes codes')</a><p>
236 EOT
237 [ "$(which pptp 2>/dev/null)" ] && cat <<EOT
238 <a data-icon="web" href="http://pptpclient.sourceforge.net/" target="_blank" rel="noopener">$(_n 'PPTP web page')</a><p>
239 <a data-icon="help" href="index.cgi?exec=pptp" target="_blank" rel="noopener">$(_ 'PPTP Help')</a><p>
240 EOT
241 [ "$(which pptpd 2>/dev/null)" ] && cat <<EOT
242 <a data-icon="web" href="http://poptop.sourceforge.net/" target="_blank" rel="noopener">$(_n 'PPTPD web page')</a><p>
243 <a data-icon="help" href="index.cgi?exec=pptpd%20--help" target="_blank" rel="noopener">$(_ 'PPTPD Help')</a><p>
244 EOT
245 [ "$(which pppssh 2>/dev/null)" ] && cat <<EOT
246 <a data-icon="web" href="http://doc.slitaz.org/en:guides:vpn" target="_blank" rel="noopener">$(_n 'VPN Wiki')</a><p>
247 <a data-icon="help" href="index.cgi?exec=dbclient" target="_blank" rel="noopener">$(_ 'SSH Help')</a><p>
248 EOT
249 cat << EOT
250 <footer>
251 </footer>
252 </section>
253 <section>
254 <header>
255 $(_ 'Configuration')
256 </header>
257 EOT
258 [ "$(which sdptool 2>/dev/null)" ] && create_gsm_conf && cat <<EOT
259 <a data-icon="conf" href="index.cgi?file=/etc/bluetooth/rfcomm.conf" target="_blank" rel="noopener">$(_ 'GSM device')</a><p>
260 <a data-icon="conf" href="index.cgi?file=/etc/ppp/peers/gsm" target="_blank" rel="noopener">$(_ 'PPP GSM script')</a><p>
261 <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/gsm.chat" target="_blank" rel="noopener">$(_ 'PPP GSM chat')</a><p>
262 <a data-icon="conf" href="index.cgi?file=/etc/ppp/options-gsm" target="_blank" rel="noopener">$(_ 'PPP GSM options')</a><p>
263 EOT
264 cat << EOT
265 <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/ppp-on" target="_blank" rel="noopener">$(_ 'PPP PSTN script')</a><p>
266 <a data-icon="conf" href="index.cgi?file=/etc/ppp/scripts/ppp-on-dialer" target="_blank" rel="noopener">$(_ 'PPP PSTN chat')</a><p>
267 <a data-icon="conf" href="index.cgi?file=/etc/ppp/options" target="_blank" rel="noopener">$(_ 'PPP PSTN options')</a><p>
268 <a data-icon="conf" href="index.cgi?file=/etc/ppp/chap-secrets" target="_blank" rel="noopener">$(_ 'chap users')</a><p>
269 <a data-icon="conf" href="index.cgi?file=/etc/ppp/pap-secrets" target="_blank" rel="noopener">$(_ 'pap users')</a><p>
270 EOT
271 for i in /etc/ppp/peers/* ; do
272 [ -s "$i" ] && [ "$i" != "/etc/ppp/peers/gsm" ] && cat << EOT
273 <a data-icon="conf" href="index.cgi?file=$i" target="_blank" rel="noopener">$(basename $i)</a><p>
274 EOT
275 done
276 [ "$(which pptpd 2>/dev/null)" ] && cat <<EOT
277 <a data-icon="conf" href="index.cgi?file=/etc/pptpd.conf" target="_blank" rel="noopener">$(_ 'pptpd.conf')</a><p>
278 EOT
279 if [ "$(busybox ps x | grep "pppd" | awk '/modem/{print $1}')" ]; then
280 start_disabled='disabled'
281 else
282 stop_disabled='disabled'
283 fi
284 if [ "$(busybox ps x | grep "pppd" | awk '/eth/{print $1}')" ]; then
285 startoe_disabled='disabled'
286 else
287 stopoe_disabled='disabled'
288 fi
289 if [ "$(busybox ps x | grep "pppd" | awk '/gsm/{print $1}')" ]; then
290 startgsm_disabled='disabled'
291 else
292 stopgsm_disabled='disabled'
293 fi
294 head=" <footer>
295 </footer>
296 </section>
297 <section>
298 <header>
299 $(_ 'Install extra')
300 </header>"
301 while read file pkg name ; do
302 [ -z "$(which $file 2>/dev/null)" ] && echo $head && head="" &&
303 echo " <a href='pkgs.cgi?do=Install&amp;pkg=$pkg'>$name</a>"
304 done <<EOT
305 sdptool bluez GSM / Bluetooth
306 pppssh dropbear SSH / VPN
307 EOT
308 #pptp pptpclient PPTP client
309 #pptpd poptop PPTP server
310 cat << EOT
311 <footer>
312 </footer>
313 </section>
314 </div>
316 EOT
317 if [ "$(which sdptool 2>/dev/null)" ]; then
318 cat <<EOT
319 <a name="pppgsm"></a>
320 <section>
321 <header>
322 <span data-icon="modem">$(_ 'GSM modem') -
323 $(_ 'Manage Bluetooth GSM Internet connections')</span>
324 </header>
325 <form method="get">
326 <input type="hidden" name="setpppgsm" />
327 <table>
328 <tr>
329 <td>$(_ 'GSM provider')</td>
330 <td><input type="text" name="gsmprovider" size="40" value="$(sed \
331 '/AT+CGDCONT/!d;s|.*IP","\(.*\)".|\1|' \
332 /etc/ppp/scripts/gsm.chat 2> /dev/null)" /></td>
333 </tr>
334 <tr>
335 <td>$(_ 'Bluetooth PIN')</td>
336 <td><input type="text" name="gsmpin" size="40" value="0000" /></td>
337 </tr>
338 </table>
339 <footer><!--
340 --><button type="submit" name="start_gsm" data-icon="start" $startgsm_disabled>$(_ 'Start' )</button><!--
341 --><button type="submit" name="stop_gsm" data-icon="stop" $stopgsm_disabled>$(_ 'Stop' )</button><!--
342 -->$(phone_names)</footer>
343 </form>
344 </section>
345 EOT
346 fi
347 cat << EOT
348 <a name="ppppstn"></a>
349 <section>
350 <header>
351 <span data-icon="modem">$(_ 'PSTN modem') -
352 $(_ 'Manage PSTN Internet connections')</span>
353 </header>
354 <form action="index.cgi" id="indexform"></form>
355 <form method="get">
356 <input type="hidden" name="setppppstn" />
357 <table>
358 <tr>
359 <td>$(_ 'Username')</td>
360 <td><input type="text" name="user" size="40" value="$ACCOUNT" /></td>
361 </tr>
362 <tr>
363 <td>$(_ 'Password')</td>
364 <td><input type="text" name="pass" size="40" value="$PASSPSTN" /></td>
365 </tr>
366 <tr>
367 <td>$(_ 'Phone number')</td>
368 <td><input type="text" name="phone" size="40" value="$PHONE" /></td>
369 </tr>
370 </table>
371 <footer><!--
372 --><button type="submit" name="start_pstn" data-icon="start" $start_disabled>$(_ 'Start' )</button><!--
373 --><button type="submit" name="stop_pstn" data-icon="stop" $stop_disabled >$(_ 'Stop' )</button><!--
374 --></footer>
375 </form>
376 </section>
378 <a name="pppoe"></a>
379 <section>
380 <header>
381 <span data-icon="eth">$(_ 'Cable Modem') -
382 $(_ 'Manage PPPoE Internet connections')</span>
383 </header>
384 <form method="get">
385 <input type="hidden" name="setpppoe" />
386 <table>
387 <tr>
388 <td>$(_ 'Username')</td>
389 <td><input type="text" name="user" size="40" value="$USERNAME" /></td>
390 </tr>
391 <tr>
392 <td>$(_ 'Password')</td>
393 <td><input type="text" name="pass" size="40" value="$PASSWORD" /></td>
394 </tr>
395 </table>
396 <footer><!--
397 --><button type="submit" name="start_pppoe" data-icon="start" $startoe_disabled>$(_ 'Start' )</button><!--
398 --><button type="submit" name="stop_pppoe" data-icon="stop" $stopoe_disabled >$(_ 'Stop' )</button><!--
399 --></footer>
400 </form>
401 </section>
402 EOT
403 if [ "$(which pppssh 2>/dev/null)" ]; then
404 [ -s /etc/ppp/pppssh ] && . /etc/ppp/pppssh
405 ppp="$(sed '/pppd/!d;s/.*="\([^"]*\).*/\1/' /usr/bin/pppssh)"
406 if [ "$(busybox ps x | grep "$ppp" | awk '/dbclient/{print $1}')" ]; then
407 startssh_disabled='disabled'
408 else
409 stopssh_disabled='disabled'
410 fi
411 cat <<EOT
412 <a name="pppssh"></a>
413 <section>
414 <header>
415 <span data-icon="vpn">$(_ 'Virtual Private Network') -
416 $(_ 'Manage private TCP/IP connections')</span>
417 </header>
418 <form method="get">
419 <input type="hidden" name="setpppssh" />
420 <table>
421 <tr>
422 <td>$(_ 'Peer')</td>
423 <td><input type="text" name="peer" size="50" value="${PEER:-user@elsewhere}" /></td>
424 </tr>
425 <tr>
426 <td>$(_ 'SSH options')</td>
427 <td><input type="text" name="ssharg" size="50" value="$SSHARG" /></td>
428 </tr>
429 <tr>
430 <td>$(_ 'Password')</td>
431 <td><input type="password" name="pass" size="50" title="Should be empty to use the SSH key; useful to send the SSH key only" /></td>
432 </tr>
433 <tr>
434 <td>$(_ 'Local IP address')</td>
435 <td><input type="text" name="localip" size="50" value="${LOCALIP:-192.168.254.1}" /></td>
436 </tr>
437 <tr>
438 <td>$(_ 'Remote IP address')</td>
439 <td><input type="text" name="remoteip" size="50" value="${REMOTEIP:-192.168.254.2}" /></td>
440 </tr>
441 <tr>
442 <td>$(_ 'Local PPP options')</td>
443 <td><input type="text" name="localpppopt" size="50" value="${LOCALPPP:-usepeerdns}" /></td>
444 </tr>
445 <tr>
446 <td>$(_ 'Remote PPP options')</td>
447 <td><input type="text" name="remotepppopt" size="50" value="${REMOTEPPP:-proxyarp}" title="$(_ "You may need 'proxyarp' to use the new routes")" /></td>
448 </tr>
449 <tr>
450 <td>$(_ 'Peer routes')</td>
451 <td><input type="text" name="routes" size="50" value="${ROUTES:-192.168.10.0/24 192.168.20.0/28}" title="$(_ "Routes on peer network to import or 'default' to redirect the default route")"/></td>
452 </tr>
453 <tr>
454 <td>$(_ 'UDP port')</td>
455 <td><input type="text" name="udp" size="50" value="$UDP" title="$(_ "Optional UDP port for real-time (with a very reliable link only)")"/></td>
456 </tr>
457 </table>
458 <footer><!--
459 --><button type="submit" name="start_pppssh" data-icon="start" $startssh_disabled>$(_ 'Start' )</button><!--
460 --><button type="submit" name="stop_pppssh" data-icon="stop" $stopssh_disabled>$(_ 'Stop' )</button><!--
461 --><button type="submit" name="send_key" data-icon="sync" >$(_ 'Send SSH key' )</button><!--
462 --></footer>
463 </form>
464 </section>
465 EOT
466 fi
468 xhtml_footer
469 exit 0