#!/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önen Oberfläche">' echo 'zurück zur trac-Oberfläche</a></p>' echo '<h1 style="margin:5px; top-margin:7%">' echo 'Die Mini-TracAdmin-Konsole fü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ü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>'