tazpanel annotate index.cgi @ rev 191

Add a small terminal emulator (wih wget support to upload file on remote machine)
author Christophe Lincoln <pankso@slitaz.org>
date Fri Jun 10 21:40:07 2011 +0200 (2011-06-10)
parents dbb91ac456b7
children c05f8958b18b
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@112 7 # Copyright (C) 2011 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
paul@127 15 # Check whether a configuration file has been modified after installation
pascal@91 16 file_is_modified()
pascal@91 17 {
pascal@91 18 grep -l " $1$" $INSTALLED/*/md5sum | while read file; do
pascal@91 19
pascal@91 20 # Found, but can we do diff ?
pascal@91 21 [ "$(grep -h " $1$" $file)" != "$(md5sum $1)" ] || break
pascal@91 22 org=$(dirname $file)/volatile.cpio.gz
pascal@91 23 zcat $org 2>/dev/null | cpio -t 2>/dev/null | \
pascal@91 24 grep -q "^${1#/}$" || break
pascal@91 25
pascal@91 26 case "$2" in
pascal@91 27 diff)
pascal@91 28 tmp=/tmp/tazpanel$$
pascal@91 29 mkdir -p $tmp
pascal@91 30 ( cd $tmp ; zcat $org | cpio -id ${1#/} )
pascal@91 31 diff -u $tmp$1 $1
pascal@91 32 rm -rf $tmp ;;
pascal@91 33 button)
pascal@91 34 cat <<EOT
pascal@100 35 <a class="button" href='$SCRIPT_NAME?file=$1&action=diff'>
pascal@97 36 <img src="$IMAGES/help.png" />`gettext "Differences"`</a>
pascal@91 37 EOT
pascal@91 38 esac
pascal@93 39 break
pascal@91 40 done
pascal@91 41 }
pascal@91 42
pankso@2 43 #
pankso@49 44 # Things to do before displaying the page
pankso@49 45 #
pankso@49 46
pascal@81 47 [ -n "$(GET panel_pass)" ] &&
pascal@81 48 sed -i s@/:root:.*@/:root:$(GET panel_pass)@ $HTTPD_CONF
pankso@49 49
pankso@49 50 #
pankso@2 51 # Commands
pankso@2 52 #
pankso@2 53
pascal@81 54 case " $(GET) " in
pascal@81 55 *\ file\ *)
pankso@56 56 #
pascal@91 57 # Handle files
pankso@56 58 #
pascal@81 59 file="$(GET file)"
pankso@161 60 case $file in
pankso@161 61 *.html)
pankso@161 62 cat $file && exit 0 ;;
pankso@161 63 *)
pankso@161 64 TITLE="- File"
pankso@161 65 xhtml_header
pankso@161 66 echo "<h2>$file</h2>" ;;
pankso@161 67 esac
pascal@90 68 if [ "$(GET action)" == "edit" ]; then
pascal@90 69 cat <<EOT
pascal@100 70 <form method="post" action="$SCRIPT_NAME?file=$file">
pascal@97 71 <img src="$IMAGES/edit.png" />
pascal@90 72 <input type="submit" value="`gettext "Save"`">
pascal@90 73 <textarea name="content" rows="30" style="width: 100%;">
pascal@90 74 $(cat $file)
pascal@90 75 </textarea>
pascal@90 76 </form>
pascal@90 77 EOT
pascal@91 78 elif [ "$(GET action)" == "diff" ]; then
pascal@91 79 echo '<pre id="diff">'
pascal@91 80 file_is_modified $file diff | syntax_highlighter diff
pascal@91 81 echo '</pre>'
pascal@90 82 else
pascal@90 83 [ -n "$(POST content)" ] &&
pascal@90 84 sed "s/`echo -en '\r'` /\n/g" > $file <<EOT
pascal@90 85 $(POST content)
pascal@90 86 EOT
pascal@90 87 cat <<EOT
pascal@90 88 <div id="actions">
pascal@100 89 <a class="button" href='$SCRIPT_NAME?file=$file&action=edit'>
pascal@97 90 <img src="$IMAGES/edit.png" />`gettext "Edit"`</a>
pascal@90 91 EOT
pascal@91 92 file_is_modified $file button
pascal@91 93 echo -e "</div>\n<pre>"
pascal@90 94 # Handle file type by extension as a Web Server does it.
pascal@90 95 case "$file" in
pascal@90 96 *.conf|*.lst)
pascal@90 97 syntax_highlighter conf ;;
pascal@90 98 *.sh|*.cgi)
pascal@90 99 syntax_highlighter sh ;;
pascal@90 100 *)
pascal@90 101 cat ;;
pascal@90 102 esac < $file
pascal@90 103 echo '</pre>'
pascal@90 104 fi ;;
pankso@191 105 *\ terminal\ *|*\ cmd\ *)
pankso@191 106 # Cmdline terminal.
pankso@191 107 commands='du help ls ping pwd who wget'
pankso@191 108 cmd=$(GET cmd)
pankso@191 109 TITLE="- $(gettext "Terminal")"
pankso@191 110 xhtml_header
pankso@191 111 cat << EOT
pankso@191 112 <form method="get" action="$SCRIPT_NAME">
pankso@191 113 <div class="box">
pankso@191 114 root@$(hostname):~# <input type="text" name="cmd" style="width: 80%;" />
pankso@191 115 </div>
pankso@191 116 </form>
pankso@191 117 EOT
pankso@191 118 echo '<pre id="terminal">'
pankso@191 119 # Allow only a few commands for the moment.
pankso@191 120 case "$cmd" in
pankso@191 121 usage|help)
pankso@191 122 gettext -e "Small terminal emulator, commands options are supported.\n"
pankso@191 123 gettext "Commands:"; echo " $commands" ;;
pankso@191 124 wget*)
pankso@191 125 dl=/var/cache/downloads
pankso@191 126 [ ! -d "$dl" ] && mkdir -p $dl
pankso@191 127 gettext "Downloading to:"; echo " $dl"
pankso@191 128 cd $dl && $cmd ;;
pankso@191 129 du*|ls*|ping*|pwd|who)
pankso@191 130 $cmd ;;
pankso@191 131 *)
pankso@191 132 [ "$cmd" == "" ] || \
pankso@191 133 gettext "Unknow command: $cmd"
pankso@191 134 gettext "Commands:"; echo " $commands" ;;
pankso@191 135 esac
pankso@191 136 echo '</pre>' ;;
pascal@144 137 *\ top\ *)
pascal@144 138 TITLE="- $(gettext "Process activity")"
pascal@144 139 xhtml_header
pascal@144 140 echo '<pre>'
pankso@152 141 top -n1 -b | sed \
pankso@152 142 -e s"#^[A-Z].*:\([^']\)#<span class='sh-comment'>\0</span>#"g \
pankso@152 143 -e s"#PID.*\([^']\)#<span class='top'>\0</span>#"g
pascal@144 144 echo '</pre>' ;;
pascal@81 145 *\ debug\ *)
pankso@53 146 TITLE="- Debug"
pankso@53 147 xhtml_header
pankso@55 148 echo '<h2>HTTP Environment</h2>'
pankso@55 149 echo '<pre>'
pascal@81 150 httpinfo
pankso@55 151 echo '</pre>' ;;
pankso@161 152 *\ report\ *)
pankso@161 153 TITLE="- $(gettext "System report")"
pascal@163 154 [ -d /var/cache/slitaz ] || mkdir -p /var/cache/slitaz
pankso@161 155 output=/var/cache/slitaz/sys-report.html
pankso@161 156 xhtml_header
pankso@161 157 echo "<h2>$(gettext "Reporting to:") $output</h2>"
pankso@161 158 echo '<pre>'
pankso@161 159 gettext "Creating report header... "
pankso@161 160 cat > $output << EOT
pankso@161 161 <!DOCTYPE html>
pankso@161 162 <html xmlns="http://www.w3.org/1999/xhtml">
pankso@161 163 <head>
pankso@161 164 <title>SliTaz system report</title>
pankso@161 165 <style type="text/css">
pankso@161 166 body { padding: 20px 60px; font-size: 13px; } h1, h2 { color: #444; }
pankso@161 167 pre { background: #f1f1f1; border: 1px solid #ddd;
pankso@161 168 padding: 10px; border-radius: 4px; }
pascal@166 169 span.diff-rm { color: red; }
pascal@166 170 span.diff-add { color: green; }
pankso@161 171 </style>
pankso@161 172 </head>
pankso@161 173 <body>
pankso@161 174 EOT
pankso@161 175 ok_status
pankso@161 176 gettext "Creating system summary... "
pankso@161 177 cat >> $output << EOT
pankso@161 178 <h1>SliTaz system report</h1>
pankso@161 179 Date: $(date)
pankso@161 180 <pre>
pascal@163 181 uptime : $(uptime)
pankso@161 182 cmdline : $(cat /proc/cmdline)
pankso@161 183 version : $(cat /etc/slitaz-release)
pankso@161 184 packages : $(ls /var/lib/tazpkg/installed | wc -l) installed
pankso@161 185 kernel : $(uname -r)
pankso@161 186 </pre>
pankso@161 187 EOT
pankso@161 188 ok_status
pankso@161 189 gettext "Getting hardware info... "
pankso@161 190 cat >> $output << EOT
pankso@161 191 <h2>free</h2>
pankso@161 192 <pre>
pankso@161 193 $(free)
pankso@161 194 </pre>
pankso@161 195
pankso@161 196 <h2>lspci -k</h2>
pankso@161 197 <pre>
pankso@161 198 $(lspci -k)
pankso@161 199 </pre>
pankso@161 200
pankso@161 201 <h2>lsusb</h2>
pankso@161 202 <pre>
pankso@161 203 $(lsusb)
pankso@161 204 </pre>
pankso@161 205
pankso@161 206 <h2>lsmod</h2>
pankso@161 207 <pre>
pankso@161 208 $(lsmod)
pankso@161 209 </pre>
pankso@161 210
pankso@161 211 EOT
pankso@161 212 ok_status
pankso@161 213 gettext "Getting networking info... "
pankso@161 214 cat >> $output << EOT
pankso@161 215 <h2>ifconfig -a</h2>
pankso@161 216 <pre>
pankso@161 217 $(ifconfig -a)
pankso@161 218 </pre>
pascal@163 219 <h2>route -n</h2>
pascal@163 220 <pre>
pascal@163 221 $(route -n)
pascal@163 222 </pre>
pascal@163 223 <h2>/etc/resolv.conf</h2>
pascal@163 224 <pre>
pascal@163 225 $(cat /etc/resolv.conf)
pascal@163 226 </pre>
pascal@163 227 EOT
pascal@163 228 ok_status
pascal@163 229 gettext "Getting filesystems info..."
pascal@163 230 cat >> $output << EOT
pascal@163 231 <h2>blkid</h2>
pascal@163 232 <pre>
pascal@163 233 $(blkid)
pascal@163 234 </pre>
pascal@163 235 <h2>fdisk -l</h2>
pascal@163 236 <pre>
pascal@163 237 $(fdisk -l)
pascal@163 238 </pre>
pascal@163 239 <h2>mount</h2>
pascal@163 240 <pre>
pascal@163 241 $(mount)
pascal@163 242 </pre>
pascal@163 243 <h2>df -h</h2>
pascal@163 244 <pre>
pascal@163 245 $(df -h)
pascal@163 246 </pre>
pascal@163 247 <h2>df -i</h2>
pascal@163 248 <pre>
pascal@163 249 $(df -i)
pascal@163 250 </pre>
pascal@163 251 EOT
pascal@163 252 ok_status
pascal@163 253 gettext "Getting boot logs... "
pascal@163 254 cat >> $output << EOT
pascal@163 255 <h2>$(gettext "Kernel messages")</h2>
pascal@163 256 <pre>
pascal@163 257 $(cat /var/log/dmesg.log)
pascal@163 258 </pre>
pascal@163 259 <h2>$(gettext "Boot scripts")</h2>
pascal@163 260 <pre>
pascal@163 261 $(cat /var/log/boot.log | filter_taztools_msgs)
pascal@163 262 </pre>
pankso@161 263 EOT
pankso@161 264 ok_status
pankso@161 265 gettext "Creating report footer... "
pankso@161 266 cat cat >> $output << EOT
pankso@161 267 </body>
pankso@161 268 </html>
pankso@161 269 EOT
pankso@161 270 ok_status
pankso@161 271 echo '</pre>'
pankso@161 272 echo "<p><a class='button' href='$SCRIPT_NAME?file=$output'>
pankso@161 273 $(gettext "View report")</a>"
pankso@161 274 gettext "This report can be attached with a bug report on: "
pankso@161 275 echo '<a href="http://bugs.slitaz.org/">bugs.slitaz.org</a></p>' ;;
pankso@2 276 *)
pankso@14 277 #
pankso@2 278 # Default xHTML content
pankso@14 279 #
pankso@8 280 xhtml_header
pascal@81 281 [ -n "$(GET gen_locale)" ] && new_locale=$(GET gen_locale)
pascal@81 282 [ -n "$(GET rdate)" ] && echo ""
pankso@2 283 cat << EOT
pankso@13 284 <div id="wrapper">
pankso@154 285 <h2>$(gettext "Host:") $(hostname)</h2>
pankso@154 286 <p>$(gettext "SliTaz administration and configuration Panel")<p>
pankso@154 287 </div>
pankso@154 288 <div id="actions">
pankso@191 289 <a class="button" href="$SCRIPT_NAME?terminal">
pankso@191 290 <img src="$IMAGES/terminal.png" />$(gettext "Terminal")</a>
pankso@161 291 <a class="button" href="$SCRIPT_NAME?top">
pankso@161 292 <img src="$IMAGES/monitor.png" />$(gettext "Process activity")</a>
pankso@161 293 <a class="button" href="$SCRIPT_NAME?report">
pankso@161 294 <img src="$IMAGES/text.png" />$(gettext "Create a report")</a>
pankso@14 295 </div>
pankso@14 296
pankso@154 297 <h3>$(gettext "Summary")</h3>
pankso@14 298 <div id="summary">
pankso@161 299 <pre>
pankso@161 300 $(gettext "Uptime :")$(uptime)
pankso@161 301 $(gettext "Memory in Mb :") $(free -m | grep Mem: | awk \
pankso@161 302 '{print "Total:", $2, "Used:", $3, "Free:", $4}')
pankso@161 303 $(gettext "Linux kernel :") $(uname -r)
pankso@161 304 </pre>
pankso@33 305 <!-- Close summary -->
pankso@33 306 </div>
pankso@14 307
pankso@154 308 <h4>$(gettext "Network status")</h4>
pankso@154 309 $(list_network_interfaces)
pankso@154 310
pankso@154 311 <h4>$(gettext "Filesystem usage statistics")</h4>
pankso@153 312 EOT
paul@157 313 # Disk stats (management is done as hardware.cgi)
pankso@153 314 table_start
pankso@153 315 df_thead
pankso@153 316 df -h | grep ^/dev | while read fs size used av pct mp
pankso@153 317 do
pankso@153 318 cat << EOT
pankso@153 319 <tr>
pankso@153 320 <td><a href="hardware.cgi">
pankso@190 321 <img src="$IMAGES/harddisk.png" />${fs#/dev/}</a></td>
pankso@153 322 <td>$size</td>
pankso@153 323 <td>$av</td>
pankso@153 324 <td class="pct"><div class="pct"
pankso@153 325 style="width: $pct;">$used - $pct</div></td>
pankso@153 326 <td>$mp</td>
pankso@153 327 </tr>
pankso@153 328 EOT
pankso@153 329 done
pankso@153 330 table_end
pankso@153 331 cat << EOT
pankso@153 332 <h3>$(gettext "Panel Activity")</h3>
pankso@120 333 <pre id="panel-activity">
pankso@120 334 $(cat $LOG_FILE | tail -n 8 | sort -r | syntax_highlighter activity)
pankso@76 335 </pre>
pankso@76 336
pankso@2 337 EOT
pankso@2 338 ;;
pankso@2 339 esac
pankso@2 340
pankso@14 341 xhtml_footer
pankso@14 342 exit 0