tazpanel 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 76f75fab376d
children ab6120f11be4
files tazpkg.cgi
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