tazpanel view lib/libtazpanel @ rev 379

(c) --> 2014 and update AUTHORS file
author Christophe Lincoln <pankso@slitaz.org>
date Fri Jan 03 18:58:21 2014 +0100 (2014-01-03)
parents c6752ed0e680
children 7475f4b95a7b
line source
1 #!/bin/sh
2 #
3 # Common functions for TazPanel CGI and cmdline interface
4 #
6 [ "$(id -un)" == "${REMOTE_USER:-root}" ] || exec su -c "$(realpath $0) $@" $REMOTE_USER
8 # Get parameters with GET, POST and FILE functions
9 . /usr/lib/slitaz/httphelper
11 # I18n
12 . /etc/locale.conf
13 . /usr/bin/gettext.sh
14 TEXTDOMAIN='tazpanel'
15 export TEXTDOMAIN LANG LC_ALL
17 # We need a config file first
18 get_config() {
19 CONFIG="/etc/slitaz/tazpanel.conf"
20 [ -f data/tazpanel.conf ] && CONFIG="data/tazpanel.conf"
21 [ -f "$CONFIG" ] && . $CONFIG
22 [ ! -f "$PANEL/lib/libtazpanel" ] && \
23 echo "No config file or libtazpanel found: $CONFIG" && \
24 exit 1
25 }
27 # Display < > &
28 htmlize() {
29 sed -e 's|\&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g'
30 }
32 # Syntax highlighting for config file and SHell scripts
33 syntax_highlighter() {
34 case $1 in
35 conf)
36 htmlize | sed \
37 -e s"#^\#\([^']*\)#<span class='conf-comment'>\0</span>#"g \
38 -e s"#^[A-Z]\([^']*\)=#<span class='conf-var'>\0</span>#"g \
39 -e s"#^[a-z]\([^']*\)#<span class='conf-var'>\0</span>#"g \
40 -e s"#\"\([^']*\)\"#<span class='conf-val'>\0</span>#"g ;;
41 sh)
42 htmlize | sed \
43 -e s"#^\#\([^']*\)#<span class='sh-comment'>\0</span>#"g \
44 -e s"#\"\([^']*\)\"#<span class='sh-val'>\0</span>#"g ;;
45 diff)
46 htmlize | sed \
47 -e s"#^-\(.*\).#<span class='diff-rm'>\0</span>#"g \
48 -e s"#^+\(.*\).#<span class='diff-add'>\0</span>#"g \
49 -e s"#@@\(.*\)@@#<span class='diff-at'>@@\1@@</span>#"g ;;
50 activity)
51 sed -e s"#^\([^']*:\)#<span class='activity-log'>\0</span>#"g ;;
52 kernel)
53 htmlize | sed \
54 -e "s|\([^0-9]\)\(0x[0-9a-f]\+\)|\1<span class='kernel-hex'>\2</span>|g" \
55 -e "s|^\([^(,\[]\+: \)|<span class='kernel-id'>\0</span>|g" \
56 -e "s|\(\[[^ ]\+\]\)|<span class='kernel-id2'>\0</span>|g" ;;
57 lsusb)
58 htmlize | sed \
59 -e 's|^[^:]*:[ x0-9a-f^:]*$|<span class="lsusb-t">\0</span>|g' \
60 -e 's|^Bus.*$|<span class="lsusb-h">\0</span>|g' ;;
61 lspci)
62 htmlize | sed \
63 -e 's|^[0-9a-f].*$|<span class="lspci-t">\0</span>|g' \
64 -e 's|^ \([^:]*:\)| <span class="lspci-h">\1</span>|g' ;;
66 esac
67 }
69 # Remove status and ESC char from tazpkg/tazlito commands output
70 filter_taztools_msgs() {
71 sed -e s'/\[^Gm]*.//g' \
72 -e ':a;s/^\(.\{1,68\}\)\(\[ [A-Za-z]* \]\)/\1 \2/;ta' \
73 -e 's#\[ OK \]#[ <span class="diff-add">OK</span> ]#' \
74 -e 's#\[ Failed \]#[ <span class="diff-rm">Failed</span> ]#'
75 }
77 # LOG activities
78 log() {
79 date=$(date "+%Y-%m-%d %H:%M")
80 filter_taztools_msgs | \
81 sed s"#[^']*#$date : \0#" >> $LOG_FILE
82 }
84 ok_status() {
85 echo "[<span class='diff-add'> OK </span>]"
86 }
88 # Network interface status
89 interface_status() {
90 if ifconfig | grep -A 1 $i | grep -q inet; then
91 ip=`ifconfig | grep -A 1 $i | grep inet | \
92 awk '{ print $2 }' | cut -d ":" -f 2`
93 echo "<td>$(gettext 'connected')</td><td>$ip</td>"
94 echo "<td><a href='/network.cgi?scan=$ip'>"
95 echo "<img src='$IMAGES/recharge.png' /></a></td>"
96 else
97 echo "<td>----</td><td>----</td><td></td>"
98 fi
99 }
101 # Catch network interface (used in summary and network main page)
102 list_network_interfaces() {
103 cat << EOT
104 <table class="zebra outbox">
105 <thead>
106 <tr>
107 <td>$(gettext 'Interface')</td>
108 <td>$(gettext 'Name')</td>
109 <td>$(gettext 'Status')</td>
110 <td>$(gettext 'IP Address')</td>
111 <td>$(gettext 'Scan ports')</td>
112 </tr>
113 </thead>
114 <tbody>
115 EOT
116 for i in `ls /sys/class/net`
117 do
118 case $i in
119 eth*)
120 echo " <tr><td><a href='/network.cgi?eth'>
121 <img src='$IMAGES/ethernet.png' />$i</a></td>
122 <td>Ethernet</td> $(interface_status)</tr>" ;;
123 wlan*|ath*|ra*)
124 echo " <tr><td><a href='/network.cgi?wifi'>
125 <img src='$IMAGES/wireless.png' />$i</a></td>
126 <td>Wireless</td> $(interface_status)</tr>" ;;
127 lo)
128 echo " <tr><td><img src='$IMAGES/loopback.png' />$i</td>
129 <td>Loopback</td> $(interface_status)</tr>" ;;
130 *)
131 continue ;;
132 esac
133 done
134 cat << EOT
135 </tbody>
136 </table>
137 EOT
138 }
140 # Get the list of panel styles
141 list_styles() {
142 for style in $PANEL/styles/*
143 do
144 style=$(basename $style)
145 echo "<option value='$style'>$style</option>"
146 done
147 }
149 # Get the list of system locales
150 list_locales() {
151 for locale in $(find /usr/share/i18n/locales -type f -name "[a-z][a-z]_[A-Z][A-Z]")
152 do
153 echo "<option value='$locale'>$locale</option>"
154 done
155 }
157 # Get the list of console keymaps
158 list_keymaps() {
159 for keymap in /usr/share/kmap/*.kmap
160 do
161 basename $keymap .kmap | sed "s|.*|<option value='&'>&</option>|"
162 done
163 }
165 #
166 # xHTML 5 (header and footer skel are from the style)
167 #
169 loading_msg() {
170 cat << EOT
171 <script type="text/javascript">
172 document.write('<div id="loading"><img src="/styles/default/images/loader.gif" />$LOADING_MSG</div>');
173 </script>
174 EOT
175 }
177 xhtml_header() {
178 . ${PANEL}$HEADER
179 if [ $DEBUG == "1" ]; then
180 local i
181 local j
182 local x
183 args=""
184 for x in GET POST COOKIE ; do
185 for i in $($x) ; do
186 if [ $($x $i count) -gt 1 ]; then
187 for j in $(seq 1 $($x $i count)); do
188 args="$args $x($i,$j)='$($x $i $j)'"
189 done
190 else
191 args="$args $x($i)='$($x $i)'"
192 fi
193 done
194 done
195 for i in $(FILE); do
196 for j in name size type tmpname ; do
197 args="$args FILE($i,$j)=$(FILE $i $j)"
198 done
199 done
200 cat << EOT
201 <pre class='debug'>
202 QUERY_STRING="$QUERY_STRING"$args
203 </pre>
204 EOT
205 fi
206 }
208 xhtml_footer() {
209 . ${PANEL}$FOOTER
210 }
212 table_start() {
213 echo '<table>'
214 }
216 table_end() {
217 echo '</table>'
218 }
220 df_thead() {
221 cat << EOT
222 <thead>
223 <tr>
224 <td>$(gettext 'Disk')</td>
225 <td>$(gettext 'Label')</td>
226 <td>$(gettext 'Type')</td>
227 <td>$(gettext 'Size')</td>
228 <td>$(gettext 'Available')</td>
229 <td>$(gettext 'Used')</td>
230 <td>$(gettext 'Mount point')</td>
231 <td>UUID</td>
232 </tr>
233 </thead>
234 EOT
235 }
237 msg() {
238 msgtype="$1"; shift
239 case "$msgtype" in
240 tip) MSG_ICON="$IMAGES/msg-tip.png" ;;
241 warn|warning) MSG_ICON="$IMAGES/msg-warn.png" ;;
242 err|error) MSG_ICON="$IMAGES/msg-err.png" ;;
243 up) MSG_ICON="$IMAGES/msg-up.png" ;;
244 *) MSG_ICON="$IMAGES/msg.png" ;;
245 esac
246 cat << EOT
247 <section class="box" style="width:50%;margin:0.5em auto;">
248 <image src="$MSG_ICON" alt="$msgtype" class="float-left" />
249 $@
250 </section>
251 EOT
252 }
254 is_installed() {
255 [ -d "$INSTALLED/$1" ]
256 }
258 blk2h() {
259 echo $1 | awk '{
260 n = $0/2
261 for (i = 1; n > 1024; i++)
262 n /= 1024
263 f = "%1.0f%c"
264 if (n < 100)
265 f = "%1.1f%c"
266 printf f,n,substr("KMGT", i, 1)
267 }'
268 }