codekasten/tracadmin-console.sh

97 lines
3.2 KiB
Bash
Executable File

#!/bin/sh
#
# ein kleines Web-Interface, um die trac-admin-Konsole zu verwenden
#
set -u
# parent-URL der trac-Projekte
TRACURL="/trac"
# das trac-admin-Program
TRACADMIN="/usr/bin/trac-admin"
# das Verzeichnis, das alle trac-Projekte enthaelt
REPOS_ROOT="/data/trac"
# die URL der css-Datei von trac
CSSURL=/trac-shared/css/trac.css
############# Funktionen ###################
hole_uebergabe()
# Parameter: Name der Variablen
# extrahiert eine Variable aus dem Query-String
{
# Parameter holen | in Zeilen aufspalten | die richtige rausfiltern | nur den Wert nehmen | ausmaskierte "+/ " wiedereinsetzen
echo "$QUERY_STRING" | sed "s/&/\n/g" | grep "^$1=" | cut -d "=" -f 2 | sed "s/+/ /g; s/%2B/+/g"
}
hole_project_name()
# ermittelt den Namen des aktuellen Projekts
# entweder: aus dem HTTP_REFERER (vorherige Seite in der History) -> beim ersten Aufruf der Konsole
# oder: aus der Formular-Variable -> nach jedem ausgefuehrten Konsolen-Kommando
{
local proj=`hole_uebergabe trac_project`
if [ -z "$proj" ]
then # hole den Projektnamen aus der History
local ref=`set | grep "^HTTP_REFERER=" | cut -d "=" -f 2`
proj=`echo "$ref" | sed "s#^.*$TRACURL/\([^/]*\).*#\1#"`
fi
echo "$proj"
}
########## es geht los #################
echo 'Content-Type: text/html'
echo
# Header anzeigen
echo '<html><head>'
echo '<title>TracAdmin-Konsole (handgemacht)</title>'
echo '<link rel="stylesheet" type="text/css" href="'$CSSURL'">'
echo '<style type="text/css">'
echo '</head><body>'
# den Namen des trac-Projekts ermitteln
# das geht erst nach dem Header, da diese Ermittlung eventuell eine Fehlermeldung produziert
TRAC_PROJECT=`hole_project_name`
[ -z "$TRAC_PROJECT" -o ! -d "$REPOS_ROOT/$TRAC_PROJECT" ] && echo "ungueltiges trac-Projekt ($TRAC_PROJECT)" && exit 1
# das REPOS-Verzeichnis setzen
REPOS="$REPOS_ROOT/$TRAC_PROJECT"
# die Ueberschrift
echo
echo '<p style="text-align:right;text-style:italic"><a href="'$TRACURL/$TRAC_PROJECT'" title="zur sch&ouml;nen Oberfl&auml;che">'
echo 'zur&uuml;ck zur trac-Oberfl&auml;che</a></p>'
echo '<h1 style="margin:5px; top-margin:7%">'
echo 'Die Mini-TracAdmin-Konsole f&uuml;r <i>'$TRAC_PROJECT'</i>:</h1>'
# das Formular
echo '<form style="text-align:center; background-color:lightgray; padding:5px; margin:5px"'
echo 'action="'$SCRIPT_NAME'" method="get">'
echo 'Argumente f&uuml;r <tt>trac-admin</tt>:'
echo '<input name="commandline" type="text" size="50">'
echo '<input type="submit" name="submit" value=" Ausfuehren ">'
echo '<input type="hidden" name="trac_project" value="'$TRAC_PROJECT'">'
echo '</form>'
################ pruefe, ob Parameter reinkamen #################
para=`hole_uebergabe commandline`
# falls eine Befehlszeile uebergeben wurde, wird sie ausgefuehrt und die Ausgabe angezeigt
if [ -n "$para" ]
then FARBE="lightgreen"
output=`"$TRACADMIN" "$REPOS" "$para"`
echo -e "$output" | grep -q '^\*\*' && FARBE=red
echo '<div style="background-color:'$FARBE'; padding:5px; font-family:monospace; margin:5px">'
echo -e "$output" | sed "s/$/<BR>/"
echo '</div>'
fi
# den Hilfe-Text des tracadmin-Programms anzeigen
echo
echo '<div style="padding:5px; margin:5px; background-color:lightblue;font-family:monospace;">'
"$TRACADMIN" "$REPOS" help | sed "s/$/<br>/"
echo '</div></body></html>'