tazpanel annotate index.cgi @ 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 62b714f792ab
children d1dbbf42b25e
rev   line source
pankso@2 1 #!/bin/sh
pankso@2 2 #
paul@52 3 # Main CGI interface for TazPanel. In on word: KISS. Use the main css form
paul@52 4 # command so we are faster and do not load unneeded functions. If necessary
pankso@14 5 # you can use the lib/ dir to handle external resources.
pankso@2 6 #
pankso@379 7 # Copyright (C) 2011-2014 SliTaz GNU/Linux - BSD License
pankso@42 8 #
pankso@2 9
pankso@14 10 # Common functions from libtazpanel
pankso@14 11 . lib/libtazpanel
pankso@14 12 get_config
pascal@81 13 header
pankso@2 14
al@292 15 TITLE="TazPanel"
al@292 16
paul@127 17 # Check whether a configuration file has been modified after installation
pascal@91 18 file_is_modified()
pascal@91 19 {
pascal@91 20 grep -l " $1$" $INSTALLED/*/md5sum | while read file; do
al@292 21
pascal@91 22 # Found, but can we do diff ?
pascal@91 23 [ "$(grep -h " $1$" $file)" != "$(md5sum $1)" ] || break
pascal@91 24 org=$(dirname $file)/volatile.cpio.gz
pascal@91 25 zcat $org 2>/dev/null | cpio -t 2>/dev/null | \
pascal@91 26 grep -q "^${1#/}$" || break
pascal@91 27
pascal@91 28 case "$2" in
pascal@91 29 diff)
pascal@91 30 tmp=/tmp/tazpanel$$
pascal@91 31 mkdir -p $tmp
pascal@91 32 ( cd $tmp ; zcat $org | cpio -id ${1#/} )
pascal@207 33 diff -u $tmp$1 $1 | sed "s|$tmp||"
pascal@91 34 rm -rf $tmp ;;
pascal@91 35 button)
pascal@91 36 cat <<EOT
pascal@100 37 <a class="button" href='$SCRIPT_NAME?file=$1&action=diff'>
al@303 38 <img src="$IMAGES/help.png" />$(gettext 'Differences')</a>
pascal@91 39 EOT
pascal@91 40 esac
pascal@93 41 break
pascal@91 42 done
pascal@91 43 }
al@312 44
al@312 45
al@303 46 # OK status in table
al@303 47 ok_status_t() {
al@303 48 echo " <td>[<span class='diff-add'> OK </span>]</td></tr>"
al@303 49 }
al@303 50
al@303 51
pankso@2 52 #
pankso@49 53 # Things to do before displaying the page
pankso@49 54 #
pankso@49 55
pascal@81 56 [ -n "$(GET panel_pass)" ] &&
pascal@81 57 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF
pankso@49 58
pankso@49 59 #
pankso@2 60 # Commands
pankso@2 61 #
pankso@2 62
pascal@81 63 case " $(GET) " in
pascal@364 64 *\ exec\ *)
pascal@364 65 exec="$(GET exec)"
pascal@364 66 TITLE=$(gettext 'TazPanel - exec')
pascal@364 67 xhtml_header
pascal@364 68 cat << EOT
pascal@364 69 <h2>$exec</h2>
pascal@364 70 <pre>
pascal@364 71 $($exec 2>&1 | htmlize)
pascal@364 72 </pre>
pascal@364 73 EOT
pascal@364 74 ;;
pascal@81 75 *\ file\ *)
pankso@56 76 #
pascal@91 77 # Handle files
pankso@56 78 #
pascal@81 79 file="$(GET file)"
pankso@161 80 case $file in
pankso@161 81 *.html)
pankso@161 82 cat $file && exit 0 ;;
pankso@161 83 *)
al@292 84 TITLE=$(gettext 'TazPanel - File')
pankso@161 85 xhtml_header
pankso@161 86 echo "<h2>$file</h2>" ;;
pankso@161 87 esac
al@303 88
pascal@90 89 if [ "$(GET action)" == "edit" ]; then
pascal@90 90 cat <<EOT
pascal@100 91 <form method="post" action="$SCRIPT_NAME?file=$file">
al@303 92 <img src="$IMAGES/edit.png" />
al@303 93 <input type="submit" value="$(gettext 'Save')">
al@303 94 <a class="button" href='$SCRIPT_NAME?file=$file&action=diff'>
al@303 95 <img src="$IMAGES/help.png" />$(gettext 'Differences')</a>
al@303 96 <textarea name="content" rows="30" style="width: 100%;">
al@303 97 $(cat $file | htmlize)
al@303 98 </textarea>
pascal@90 99 </form>
pascal@90 100 EOT
naitsirhc@267 101 #The space before textarea gets muddled when the form is submitted.
naitsirhc@267 102 #It prevents anything else from getting messed up
pascal@364 103 elif [ "$(GET action)" == "setvar" ]; then
pascal@364 104 data="$(. $(GET file) ;eval echo \$$(GET var))"
pascal@364 105 cat <<EOT
pascal@364 106 <form method="post" action="$SCRIPT_NAME?file=$file">
pascal@364 107 <img src="$IMAGES/edit.png" />
pascal@364 108 <input type="submit" value="$(gettext 'Save')">
pascal@364 109 $(GET var) :
pascal@364 110 <input type="hidden" name="var" value="$(GET var)">
pascal@364 111 <input type="text" name="content" value="${data:-$(GET default)}">
pascal@364 112 </form>
pascal@364 113 EOT
pascal@91 114 elif [ "$(GET action)" == "diff" ]; then
pascal@91 115 echo '<pre id="diff">'
pascal@91 116 file_is_modified $file diff | syntax_highlighter diff
pascal@91 117 echo '</pre>'
pascal@90 118 else
al@340 119 R=$(echo -en '\r')
pascal@364 120 if [ -n "$(POST content)" ]; then
pascal@364 121 if [ -n "$(POST var)" ]; then
pascal@364 122 sed -i "s|^\\($(POST var)=\\).*|\1\"$(POST content)\"|" $file
pascal@364 123 else
pascal@364 124 sed "s/$R /\n/g;s/$R%0//g" > $file <<EOT
pascal@90 125 $(POST content)
pascal@90 126 EOT
pascal@364 127 fi
pascal@364 128 fi
pascal@90 129 cat <<EOT
pascal@90 130 <div id="actions">
pascal@100 131 <a class="button" href='$SCRIPT_NAME?file=$file&action=edit'>
al@303 132 <img src="$IMAGES/edit.png" />$(gettext 'Edit')</a>
pascal@90 133 EOT
pascal@91 134 file_is_modified $file button
al@303 135 cat << EOT
al@303 136 </div>
al@303 137 <pre>
al@303 138 EOT
pascal@90 139 # Handle file type by extension as a Web Server does it.
pascal@90 140 case "$file" in
pascal@90 141 *.conf|*.lst)
pascal@90 142 syntax_highlighter conf ;;
pascal@90 143 *.sh|*.cgi)
pascal@90 144 syntax_highlighter sh ;;
pascal@90 145 *)
al@303 146 cat | htmlize ;;
pascal@90 147 esac < $file
pascal@90 148 echo '</pre>'
pascal@90 149 fi ;;
al@303 150
al@312 151
pankso@191 152 *\ terminal\ *|*\ cmd\ *)
pankso@191 153 # Cmdline terminal.
pankso@194 154 commands='cat du help ls ping pwd who wget'
pankso@191 155 cmd=$(GET cmd)
al@292 156 TITLE=$(gettext 'TazPanel - Terminal')
pankso@191 157 xhtml_header
pankso@191 158 cat << EOT
al@312 159 <section>
pankso@191 160 <form method="get" action="$SCRIPT_NAME">
pankso@191 161 <div class="box">
al@303 162 root@$(hostname):~# <input autofocus type="text" name="cmd" style="width: 80%;" />
pankso@191 163 </div>
pankso@191 164 </form>
pankso@191 165 EOT
pankso@191 166 echo '<pre id="terminal">'
pankso@191 167 # Allow only a few commands for the moment.
pankso@191 168 case "$cmd" in
pankso@191 169 usage|help)
al@303 170 gettext 'Small terminal emulator, commands options are supported.'
pankso@195 171 echo ""
al@303 172 eval_gettext 'Commands: $commands'
al@303 173 echo ;;
pankso@191 174 wget*)
pankso@191 175 dl=/var/cache/downloads
pankso@191 176 [ ! -d "$dl" ] && mkdir -p $dl
al@303 177 eval_gettext 'Downloading to: $dl' && echo
pankso@191 178 cd $dl && $cmd ;;
pankso@191 179 du*|ls*|ping*|pwd|who)
pankso@191 180 $cmd ;;
pankso@194 181 cat*)
pankso@194 182 # Cmd must be used with an arg.
pankso@194 183 arg=$(echo $cmd | awk '{print $2}')
al@303 184 [ "$arg" == "" ] && eval_gettext '$cmd needs an argument' && break
pankso@194 185 $cmd ;;
pankso@191 186 *)
pankso@191 187 [ "$cmd" == "" ] || \
al@303 188 eval_gettext 'Unknown command: $cmd' && echo
al@303 189 eval_gettext 'Commands: $commands' ;;
pankso@191 190 esac
al@312 191 echo '</pre></section>'
al@312 192 ;;
al@312 193
al@312 194
pascal@144 195 *\ top\ *)
al@292 196 TITLE=$(gettext 'TazPanel - Process activity')
pascal@144 197 xhtml_header
al@303 198 echo $(gettext 'Refresh:') $(GET refresh)
al@303 199 cat << EOT
al@303 200 <br/>
naitsirhc@268 201 <form method="get">
naitsirhc@268 202 <input type="hidden" name="top"/>
al@303 203 <input type="submit" name="refresh" value="$(gettext '1s')"/>
al@303 204 <input type="submit" name="refresh" value="$(gettext '5s')"/>
al@303 205 <input type="submit" name="refresh" value="$(gettext '10s')"/>
al@303 206 <input type="submit" value="$(gettext 'none')"/>
al@303 207 </form>
al@303 208 EOT
al@303 209 if [ -n "$(GET refresh)" ]; then
al@303 210 echo -n '<meta http-equiv="refresh" content="'
al@303 211 echo -n "$(GET refresh)" | sed 's|\([^0-9]*\)\([0-9]\+\).*|\2|'
al@303 212 echo '">'
al@303 213 fi
naitsirhc@268 214
pascal@144 215 echo '<pre>'
al@303 216 top -n1 -b | htmlize | sed \
pankso@152 217 -e s"#^[A-Z].*:\([^']\)#<span class='sh-comment'>\0</span>#"g \
pankso@152 218 -e s"#PID.*\([^']\)#<span class='top'>\0</span>#"g
pascal@144 219 echo '</pre>' ;;
al@303 220
al@312 221
pascal@81 222 *\ debug\ *)
al@292 223 TITLE=$(gettext 'TazPanel - Debug')
pankso@53 224 xhtml_header
al@303 225 cat << EOT
al@303 226 <h2>$(gettext 'HTTP Environment')</h2>
al@303 227
al@303 228 <pre>$(httpinfo)</pre>
al@303 229 EOT
al@303 230 ;;
al@303 231
al@312 232
pankso@161 233 *\ report\ *)
al@292 234 TITLE=$(gettext 'TazPanel - System report')
pascal@163 235 [ -d /var/cache/slitaz ] || mkdir -p /var/cache/slitaz
pankso@161 236 output=/var/cache/slitaz/sys-report.html
pankso@161 237 xhtml_header
al@303 238 cat << EOT
pascal@371 239 <h2>$(eval_gettext 'Reporting to: $output')</h2>
al@311 240 <table class="zebra outbox">
al@303 241 <tbody>
al@303 242 <tr><td>$(gettext 'Creating report header...')</td>
al@303 243 EOT
pankso@161 244 cat > $output << EOT
pankso@161 245 <!DOCTYPE html>
pankso@161 246 <html xmlns="http://www.w3.org/1999/xhtml">
pankso@161 247 <head>
al@303 248 <meta charset="utf-8" />
al@303 249 <title>$(gettext 'SliTaz system report')</title>
pankso@161 250 <style type="text/css">
al@303 251 body { padding: 20px 60px; font-size: 13px; }
al@303 252 h1, h2 { color: #444; }
pankso@161 253 pre { background: #f1f1f1; border: 1px solid #ddd;
pankso@161 254 padding: 10px; border-radius: 4px; }
pascal@166 255 span.diff-rm { color: red; }
pascal@166 256 span.diff-add { color: green; }
pankso@161 257 </style>
pankso@161 258 </head>
pankso@161 259 <body>
pankso@161 260 EOT
al@303 261 cat << EOT
al@303 262 $(ok_status_t)
al@303 263 <tr><td>$(gettext 'Creating system summary...')</td>
al@303 264 EOT
pankso@161 265 cat >> $output << EOT
al@303 266 <h1>$(gettext 'SliTaz system report')</h1>
al@303 267 $(gettext 'Date:') $(date)
pankso@161 268 <pre>
pascal@163 269 uptime : $(uptime)
pankso@161 270 cmdline : $(cat /proc/cmdline)
pankso@161 271 version : $(cat /etc/slitaz-release)
pankso@161 272 packages : $(ls /var/lib/tazpkg/installed | wc -l) installed
pankso@161 273 kernel : $(uname -r)
pankso@161 274 </pre>
pankso@161 275 EOT
al@303 276 cat << EOT
al@303 277 $(ok_status_t)
al@303 278 <tr><td>$(gettext 'Getting hardware info...')</td>
al@303 279 EOT
pankso@161 280 cat >> $output << EOT
pankso@161 281 <h2>free</h2>
al@303 282 <pre>$(free)</pre>
pankso@161 283
pankso@161 284 <h2>lspci -k</h2>
al@303 285 <pre>$(lspci -k)</pre>
pankso@161 286
pankso@161 287 <h2>lsusb</h2>
al@303 288 <pre>$(lsusb)</pre>
pankso@161 289
pankso@161 290 <h2>lsmod</h2>
al@303 291 <pre>$(lsmod)</pre>
pankso@161 292
pankso@161 293 EOT
al@303 294 cat << EOT
al@303 295 $(ok_status_t)
al@303 296 <tr><td>$(gettext 'Getting networking info...')</td>
al@303 297 EOT
pankso@161 298 cat >> $output << EOT
pankso@161 299 <h2>ifconfig -a</h2>
al@303 300 <pre>$(ifconfig -a)</pre>
al@303 301
pascal@163 302 <h2>route -n</h2>
al@303 303 <pre>$(route -n)</pre>
al@303 304
pascal@163 305 <h2>/etc/resolv.conf</h2>
al@303 306 <pre>$(cat /etc/resolv.conf)</pre>
pascal@163 307 EOT
al@303 308 cat << EOT
al@303 309 $(ok_status_t)
al@303 310 <tr><td>$(gettext 'Getting filesystems info...')</td>
al@303 311 EOT
pascal@163 312 cat >> $output << EOT
pascal@163 313 <h2>blkid</h2>
al@303 314 <pre>$(blkid)</pre>
al@303 315
pascal@163 316 <h2>fdisk -l</h2>
al@303 317 <pre>$(fdisk -l)</pre>
al@303 318
pascal@163 319 <h2>mount</h2>
al@303 320 <pre>$(mount)</pre>
al@303 321
pascal@163 322 <h2>df -h</h2>
al@303 323 <pre>$(df -h)</pre>
al@303 324
pascal@163 325 <h2>df -i</h2>
al@303 326 <pre>$(df -i)</pre>
pascal@163 327 EOT
al@303 328 cat << EOT
al@303 329 $(ok_status_t)
al@303 330 <tr><td>$(gettext 'Getting boot logs...')</td>
al@303 331 EOT
pascal@163 332 cat >> $output << EOT
al@303 333 <h2>$(gettext 'Kernel messages')</h2>
al@303 334 <pre>$(cat /var/log/dmesg.log)</pre>
al@303 335
al@303 336 <h2>$(gettext 'Boot scripts')</h2>
al@303 337 <pre>$(cat /var/log/boot.log | filter_taztools_msgs)</pre>
pankso@161 338 EOT
al@303 339 cat << EOT
al@303 340 $(ok_status_t)
al@303 341 <tr><td>$(gettext 'Creating report footer...')</td>
al@303 342 EOT
pankso@161 343 cat cat >> $output << EOT
pankso@161 344 </body>
pankso@161 345 </html>
pankso@161 346 EOT
al@303 347 cat << EOT
al@303 348 $(ok_status_t)
al@303 349 </tbody>
al@303 350 </table>
al@303 351 <p><a class="button" href="$SCRIPT_NAME?file=$output">
al@303 352 <img src="/styles/default/images/browser.png" />
al@303 353 $(gettext 'View report')</a>
al@318 354 $(msg tip "$(gettext 'This report can be attached with a bug report on:')
al@318 355 <a href="http://bugs.slitaz.org/">bugs.slitaz.org</a></p>")
al@303 356 EOT
al@303 357 ;;
al@312 358
al@312 359
pankso@2 360 *)
pankso@14 361 #
pankso@2 362 # Default xHTML content
pankso@14 363 #
pankso@8 364 xhtml_header
pascal@81 365 [ -n "$(GET gen_locale)" ] && new_locale=$(GET gen_locale)
pascal@81 366 [ -n "$(GET rdate)" ] && echo ""
al@303 367 hostname=$(hostname)
pankso@2 368 cat << EOT
pankso@13 369 <div id="wrapper">
pascal@371 370 <h2>$(eval_gettext 'Host: $hostname')</h2>
al@303 371 <p>$(gettext 'SliTaz administration and configuration Panel')<p>
pankso@154 372 </div>
pankso@154 373 <div id="actions">
pankso@191 374 <a class="button" href="$SCRIPT_NAME?terminal">
al@303 375 <img src="$IMAGES/terminal.png" />$(gettext 'Terminal')</a>
pankso@161 376 <a class="button" href="$SCRIPT_NAME?top">
al@303 377 <img src="$IMAGES/monitor.png" />$(gettext 'Process activity')</a>
pankso@161 378 <a class="button" href="$SCRIPT_NAME?report">
al@303 379 <img src="$IMAGES/text.png" />$(gettext 'Create a report')</a>
pankso@14 380 </div>
pankso@14 381
al@312 382 <section>
al@303 383 <h3>$(gettext 'Summary')</h3>
pankso@14 384 <div id="summary">
al@303 385 <table>
al@303 386 <tr><td>$(gettext 'Uptime:')</td>
al@303 387 <td>$(uptime)</td>
al@303 388 </tr>
al@303 389 <tr><td>$(gettext 'Memory in Mb:')</td>
al@303 390 EOT
al@303 391 free -m | grep Mem: | awk '{print $2, $3, $4}' | while read memtotal memused memfree
al@303 392 do
al@303 393 cat << EOT
pascal@371 394 <td>$(eval_gettext 'Total: $memtotal, Used: $memused, Free: $memfree')</td>
al@303 395 EOT
al@303 396 done
al@303 397 cat << EOT
al@303 398 </tr>
al@303 399 <tr><td>$(gettext 'Linux kernel:')</td>
al@303 400 <td>$(uname -r)</td>
al@303 401 </tr>
al@303 402 </table>
pankso@33 403 <!-- Close summary -->
pankso@33 404 </div>
al@312 405 </section>
pankso@14 406
al@312 407 <section>
al@303 408 <h4>$(gettext 'Network status')</h4>
pankso@154 409 $(list_network_interfaces)
al@312 410 </section>
pankso@154 411
al@312 412 <section>
al@303 413 <h4>$(gettext 'Filesystem usage statistics')</h4>
pankso@153 414 EOT
paul@157 415 # Disk stats (management is done as hardware.cgi)
al@303 416 cat << EOT
al@311 417 <table class="zebra outbox">
al@303 418 EOT
pankso@153 419 df_thead
al@303 420 echo '<tbody>'
pankso@153 421 df -h | grep ^/dev | while read fs size used av pct mp
pankso@153 422 do
pankso@153 423 cat << EOT
pankso@153 424 <tr>
pankso@153 425 <td><a href="hardware.cgi">
pankso@190 426 <img src="$IMAGES/harddisk.png" />${fs#/dev/}</a></td>
pascal@343 427 <td>$(blkid $fs | sed '/LABEL=/!d;s/.*LABEL="\([^"]*\).*/\1/')</td>
pascal@343 428 <td>$(blkid $fs | sed '/TYPE=/!d;s/.*TYPE="\([^"]*\).*/\1/')</td>
pankso@153 429 <td>$size</td>
pankso@153 430 <td>$av</td>
al@303 431 <td class="meter"><meter min="0" max="100" value="$(echo $pct | cut -d% -f1)"
al@303 432 low="$DU_WARN" high="$DU_CRIT" optimum="10"></meter>
al@303 433 <span>$used - $pct</span>
al@303 434 </td>
pankso@153 435 <td>$mp</td>
pascal@343 436 <td>$(blkid $fs | sed '/UUID=/!d;s/.*UUID="\([^"]*\).*/\1/')</td>
pankso@153 437 </tr>
pankso@153 438 EOT
pankso@153 439 done
pankso@153 440 cat << EOT
al@303 441 </tbody>
al@303 442 </table>
al@312 443 </section>
al@303 444
al@312 445 <section>
al@303 446 <h3>$(gettext 'Panel Activity')</h3>
pankso@120 447 <pre id="panel-activity">
pankso@120 448 $(cat $LOG_FILE | tail -n 8 | sort -r | syntax_highlighter activity)
pankso@76 449 </pre>
al@312 450 </section>
pankso@2 451 EOT
pankso@2 452 ;;
pankso@2 453 esac
pankso@2 454
pankso@14 455 xhtml_footer
pankso@14 456 exit 0