tazpanel diff tazpkg.cgi @ rev 7
Add tazpkg.cgi: Packages manager CGI interface
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sat Apr 02 10:23:38 2011 +0200 (2011-04-02) |
parents | |
children | ab6120f11be4 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/tazpkg.cgi Sat Apr 02 10:23:38 2011 +0200 1.3 @@ -0,0 +1,252 @@ 1.4 +#!/bin/sh 1.5 +# 1.6 +# TazPKG CGI interface - Manage packages via the a browse 1.7 +# 1.8 +# This CGI interface intensively use tazpkg to manage package and have 1.9 +# it how code for some tasks. Please KISS it important and keep speed 1.10 +# in mind. Thanks, Pankso. 1.11 +# 1.12 +# (C) 2011 SliTaz GNU/Linux - GNU gpl v2 1.13 +# 1.14 +echo "Content-Type: text/html" 1.15 +echo "" 1.16 + 1.17 +. tazpanel.conf 1.18 + 1.19 +# Include gettext helper script. 1.20 +. /usr/bin/gettext.sh 1.21 + 1.22 +# Export package name for gettext. 1.23 +TEXTDOMAIN='tazpkg-cgi' 1.24 +export TEXTDOMAIN 1.25 + 1.26 +# xHTML 5 header 1.27 +cat $HEADER | sed s'/%TITLE%/Tazpkg/' 1.28 +cat << EOT 1.29 +<form class="search" method="get" action="$SCRIPT_NAME"> 1.30 + <p> 1.31 + `gettext "Search":` 1.32 + <input type="text" name="search" size="20"> 1.33 + </p> 1.34 +</form> 1.35 +EOT 1.36 + 1.37 +# DEBUG mode 1.38 +[ $DEBUG == "1" ] && echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>" 1.39 + 1.40 +# We need packages information for list and search 1.41 +parse_packages_desc() { 1.42 +while read line 1.43 + do 1.44 + echo '<tr>' 1.45 + pkg=$(echo $line | cut -d "|" -f 1) 1.46 + vers=$(echo $line | cut -d "|" -f 2) 1.47 + desc=$(echo $line | cut -d "|" -f 3) 1.48 + web=$(echo $line | cut -d "|" -f 5) 1.49 + imgs=styles/$STYLE/images 1.50 + if [ -d installed/$pkg ]; then 1.51 + echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n 1.52 + <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>" 1.53 + else 1.54 + echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n 1.55 + <img src='$IMAGES/tazpkg.png'/>$pkg</td>" 1.56 + fi 1.57 + echo "<td>$vers</td>" 1.58 + echo "<td class='desc'>$desc</td>" 1.59 + echo "<td><a href='$web'>web</a></td>" 1.60 + echo '</tr>' 1.61 + done 1.62 +} 1.63 + 1.64 +# Remove status and ESC char from tazpkg commands output 1.65 +filter_tazpkg_msgs() { 1.66 + grep ^[a-zA-Z0-9] | sed s'/\.*\]//' 1.67 +} 1.68 + 1.69 +# Display a full summary of packages stats 1.70 +packages_summary() { 1.71 + gettext "Installed packages : " 1.72 + ls $INSTALLED | wc -l 1.73 + gettext "Mirrored packages : " 1.74 + cat $LOCALSTATE/packages.list | wc -l 1.75 + gettext "Last recharge : " 1.76 + stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/' 1.77 + gettext "Installed files : " 1.78 + cat $INSTALLED/*/files.list | wc -l 1.79 +} 1.80 + 1.81 +# 1.82 +# xHTML functions 1.83 +# 1.84 + 1.85 +table_start() { 1.86 + cat << EOT 1.87 +<table> 1.88 + <tbody> 1.89 + <tr id="thead"> 1.90 + <td>`gettext "Name"`</td> 1.91 + <td>`gettext "Version"`</td> 1.92 + <td>`gettext "Description"`</td> 1.93 + <td>`gettext "Web"`</td> 1.94 + </tr> 1.95 +EOT 1.96 +} 1.97 + 1.98 +table_end () { 1.99 + cat << EOT 1.100 + </tbody> 1.101 +</table> 1.102 +EOT 1.103 +} 1.104 + 1.105 +list_actions() { 1.106 + cat << EOT 1.107 + <p> 1.108 + `gettext "Selection:"` 1.109 + <input type="submit" name="do" value="remove" /> 1.110 + `gettext "List:"` 1.111 + <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> | 1.112 + <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> 1.113 + </p> 1.114 +EOT 1.115 +} 1.116 + 1.117 +list_all_actions() { 1.118 + cat << EOT 1.119 + <p> 1.120 + `gettext "Selection:"` 1.121 + <input type="submit" name="do" value="install" /> 1.122 + <input type="submit" name="do" value="remove" /> 1.123 + `gettext "List:"` 1.124 + <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> | 1.125 + <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> 1.126 + </p> 1.127 +EOT 1.128 +} 1.129 + 1.130 +# 1.131 +# Commands 1.132 +# 1.133 + 1.134 +case "$QUERY_STRING" in 1.135 + list) 1.136 + # List installed packages. This is the default because parsing 1.137 + # the full packages.desc can be long and take some resources 1.138 + cd /var/lib/tazpkg/installed 1.139 + echo "<form method='get' action='$SCRIPT_NAME'>" 1.140 + list_actions 1.141 + table_start 1.142 + for pkg in * 1.143 + do 1.144 + . $pkg/receipt 1.145 + echo '<tr>' 1.146 + # Use default tazpkg icon since all packages displayed are 1.147 + # installed 1.148 + echo "<td class='pkg'> 1.149 + <input type='checkbox' name='pkg' value=\"$pkg\" /> 1.150 + <a href='$SCRIPT_NAME?info=$pkg'><img 1.151 + src='$IMAGES/tazpkg.png'/></a>$pkg</td>" 1.152 + echo "<td>$VERSION</td>" 1.153 + echo "<td class='desc'>$SHORT_DESC</td>" 1.154 + echo "<td><a href='$WEB_SITE'>web</a></td>" 1.155 + echo '</tr>' 1.156 + done 1.157 + table_end 1.158 + list_actions 1.159 + echo '</form>' ;; 1.160 + list-all) 1.161 + # List all available packages on mirror 1.162 + cd /var/lib/tazpkg 1.163 + echo "<form method='get' action='$SCRIPT_NAME'>" 1.164 + list_all_actions 1.165 + table_start 1.166 + cat packages.desc | parse_packages_desc 1.167 + table_end 1.168 + list_all_actions 1.169 + echo '</form>' ;; 1.170 + search=*) 1.171 + # Search for packages 1.172 + pkg=${QUERY_STRING#*=} 1.173 + cd /var/lib/tazpkg 1.174 + cat << EOT 1.175 +<form method="get" action="$SCRIPT_NAME"> 1.176 + <p> 1.177 + `gettext "Selection:"` 1.178 + <input type="submit" name="do" value="install" /> 1.179 + <input type="submit" name="do" value="remove" /> 1.180 + `gettext "List:"` 1.181 + <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> | 1.182 + <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> | 1.183 + <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> 1.184 + </p> 1.185 +EOT 1.186 + table_start 1.187 + grep $pkg packages.desc | parse_packages_desc 1.188 + table_end 1.189 + echo '</form>' ;; 1.190 + recharge) 1.191 + # Let recharge the packages list 1.192 + echo '<p>' 1.193 + gettext "Recharging the packages lists..." 1.194 + echo '</p><pre>' 1.195 + tazpkg recharge | filter_tazpkg_msgs 1.196 + echo '</pre><p>' 1.197 + gettext "Packages lists are up-to-date" 1.198 + echo '</p>' ;; 1.199 + do=*) 1.200 + # Do an action on one or some packages 1.201 + cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'` 1.202 + cmd=`echo ${cmdline} | awk '{print $1}'` 1.203 + pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//` 1.204 + [ $cmd == install ] && cmd=get-install 1.205 + [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>" 1.206 + for pkg in $pkgs 1.207 + do 1.208 + echo '<p>' 1.209 + gettext "Executing: tazpkg $cmd $pkg" 1.210 + echo '</p><pre>' 1.211 + echo 'y' | tazpkg $cmd $pkg 2>/dev/null | filter_tazpkg_msgs 1.212 + echo '</pre>' 1.213 + done ;; 1.214 + info=*) 1.215 + pkg=${QUERY_STRING#*=} 1.216 + . $INSTALLED/$pkg/receipt 1.217 + cat << EOT 1.218 +<p> 1.219 + `gettext "List:"` 1.220 + <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> 1.221 +</p> 1.222 +<pre> 1.223 +Name : $PACKAGE 1.224 +Version : $VERSION 1.225 +Description : $SHORT_DESC 1.226 +Depends : 1.227 + 1.228 +Website : <a href="$WEB_SITE">$WEB_SITE</a> 1.229 +Sizes : $PACKED_SIZE/$UNPACKED_SIZE 1.230 +Files : `cat $INSTALLED/$pkg/files.list | wc -l` 1.231 +</pre> 1.232 + 1.233 +<p>`gettext "Installed files"`</p> 1.234 +<pre> 1.235 +`cat $INSTALLED/$pkg/files.list` 1.236 +</pre> 1.237 +EOT 1.238 + ;; 1.239 + *) 1.240 + # Default to summary 1.241 + cat << EOT 1.242 +`gettext "List:"` 1.243 +<a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> | 1.244 +<a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> 1.245 +<pre> 1.246 +`packages_summary` 1.247 +</pre> 1.248 +EOT 1.249 + echo "" ;; 1.250 +esac 1.251 + 1.252 +# xHTML 5 footer 1.253 +cd $PANEL && cat $FOOTER 1.254 + 1.255 +exit 0