Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/ash
- . ./gui_main.cgi
- . $pdir/lib/util_file.sh
- . $pdir/lib/downloadTransfer.sh
- # NAS ueberpruefen und dabei $targetdir setzen
- _checkNAS
- Q_fdir=$(urldecode "$Q_fdir")
- [ -z "$Q_fdir" ] && Q_fdir=$targetdir
- [ -d "$Q_fdir" ] || Q_fdir=$targetdir
- # action submit button was not clicked => no action is selected
- [ -z "$Q_doAction" ] && Q_action=
- search=FTP
- search_found=0
- #!TODO: Ausgabe in Darstellungstabelle mit checkbox für Aktionen + Sortierfunktionen mit Ergebnis ermöglichen
- _search(){
- local ls_option=$1 pattern
- pattern="$(urldecode "$Q_search")"
- if [ "$Q_searchRegex" != 1 ];then
- pattern="*$(quotemeta "$pattern")*"
- fi
- echo "<pre class=search_result id=search_result><div class=title>Suchergebnis [ $([ "$Q_searchRegex" = 1 ] && echo "Regex: ")$pattern ]: <span id=search_matches></span> Treffer<br>Verzeichnis: $Q_fdir</div>"
- $BBox find $Q_fdir -iname "$pattern" -a -type f -print0 | xargs -0r ls $ls_option >$tmp/listdir
- search_found=$( grep -c . $tmp/listdir )
- if [ ${search_found:-0} -eq 0 ];then
- echo "Keine Treffer$N"
- fi
- cat <<-EOF
- <p style="text-align:right;margin-top:-20px"><input type=submit value="OK" onclick="\$('#search_result').hide(); return false;"></p>
- </pre>
- <script>\$('#search_matches').html($search_found)</script>
- EOF
- return 0
- }
- ls_option=
- if [ "$Q_sort" = size ];then
- ls_option=-hlS
- elif [ "$Q_sort" = date ];then
- ls_option=-hlt
- elif [ "$Q_sort" = ext ];then
- ls_option=-hlX
- else # by name
- ls_option=-hl
- fi
- [ -n "$Q_search" ] && _search $ls_option
- if [ ${search_found:-0} -eq 0 ];then
- ls $ls_option "$Q_fdir" >$tmp/listdir
- fi
- msg=
- # Download RAR-Archiv of all selected Files via HTTP
- if [ "$Q_action" = rarPKG ];then
- if [ -z "$Q_sfile" -a -z "$Q_all" ];then
- msg="<p class=msg>Keine Datei wurde markiert.</p>";
- else
- # # Relativer Pfad könnte kein "cd" ermöglichen
- # # suche Absoluten Pfad auf USB Speicher
- abspath=$Q_fdir
- # if [ -z "${Q_fdir##*/../*}" ];then
- # if [ -n "${Q_fdir##/var/fritzload/../*}" ];then
- # msg="<p class=msg>Relative Pfadangaben im targetdir können nicht zur TAR-Erstellung verwendet werden.</p>"
- # else
- # subpath="${Q_fdir#/var/fritzload/../}"
- # abspath=""
- # chkpath=""
- # for USBDEVICE in $(mount | grep /var/media/ftp/ | sed -e "s,^.*ftp/,,g" -e "s/ .*$//"); do
- # dir="/var/media/ftp/$USBDEVICE/$subpath/"
- # chkpath="$chkpath$N$dir"
- # if [ -d "$dir" ];then
- # abspath=$dir
- # break
- # fi
- # done
- # if [ -z "$abspath" ];then
- # msg="<pre class=msg>Kein absoluter Pfad von targetdir kann berechnet werden ($Q_fdir). TAR-Erstellung nicht möglich.$N Absolute Verzeichnisse gesucht:$N$chkpath</pre>"
- # fi
- # fi
- # fi
- # if [ -z "$msg" ];then
- if ! cd "$abspath";then
- msg="<p class=msg>Kann ins Verzeichnis $abspath nicht wechseln!</p>"
- else
- tarFiles=
- fcount=0
- if [ -n "$Q_all" -a -z "$Q_sfile" ];then
- fcount=ALL
- tarFiles=*
- # überflüssig, da nur entscheidend, falls kein Dateien/Ordner gewählt wurden?
- # if [ -z "$Q_sfile" ];then
- # tarFiles="*"
- # else
- # oldIFS="$IFS";export IFS="$N"
- # for line in $(urldecode "$Q_sfile");do
- # if [ -d "$line" ];then
- # line="${line#$Q_fdir/}/*"
- # else
- # line="${line#$Q_fdir/}"
- # fi
- # # Leerzeichen korrigieren
- # line="$(echo "$line" | sed -e 's, ,\\ ,g')"
- # tarFiles="$tarFiles $line"
- # done
- # export IFS="$oldIFS"
- # fi
- else
- oldIFS=$IFS;export IFS=$N
- for line in $(urldecode "$Q_sfile");do
- export IFS=$oldIFS
- fcount=$(($fcount+1))
- line=${line#$Q_fdir/}
- # Leerzeichen korrigieren
- line=$(echo "$line" | sed -e 's, ,\\ ,g')
- tarFiles="$tarFiles $line"
- done
- export IFS=$oldIFS
- fi
- sfile="Fritzload-PKG-$(date "+%Y_%m_%d-%H.%M").Files-$fcount.rar"
- echo -e "Mime-Version: 1.0"
- echo -e "Content-Type: application/octet-stream"
- echo -e "Content-Disposition: attachment; filename=\"$sfile\"\n"
- tar -c -C "$abspath" -O $tarFiles
- exit
- fi
- #fi
- fi
- fi
- # Dateidownload via HTTP
- if [ -n "$Q_download" ];then
- Q_download=$(urldecode "$Q_download")
- if [ ! -f "$Q_download" ];then
- msg="<p class=msg>HTTP-DOWNLOAD: Datei wurde nicht gefunden.</p>"
- msg="<p class=msg>HTTP-DOWNLOAD: $Q_download</p>"
- else
- # # simplest security
- # rpath="${Q_download#$targetdir}"
- # if [ "$rpath" != "$targetdir" ];then
- # rpath="$(echo -n "$rpath" | tr -d '\\' | sed -e '/\.\./d')"
- # if [ -n "$rpath" ];then
- ls -la "$Q_download" >/var/tmp/downfile.tmp
- read v1 v2 v3 v4 size v6 < /var/tmp/downfile.tmp
- rm -f /var/tmp/downfile.tmp
- echo -e "Content-type: application/octet-stream"
- #echo -e "Content-Length: $size"
- echo -e "Content-disposition: Attachment; filename=\"${Q_download##*/}\n"
- ${BBox} dd if="$Q_download"
- exit
- # fi
- # fi
- msg="<p class=msg>HTTP-DOWNLOAD: Ungültiger Dateinamen oder Pfad.</p>"
- fi
- fi
- activeButton Ftp
- echo "$msg"
- if [ "$Q_SET" = 1 ];then
- if [ -z "$Q_sfile" -a -z "$Q_all" ];then
- echo "<p class=msg>Keine Datei wurde markiert.</p>";
- elif [ "$Q_action" = del ];then
- echo "<pre class=msg>LÖSCHEN:"
- if [ -z "$Q_sfile" -a -n "$Q_all" ];then
- removedir="$Q_fdir"
- echo "VERZEICHNIS: $removedir"
- rm -rf "$removedir"/*
- rmdir "$removedir"
- else
- oldIFS=$IFS;export IFS=$N
- for line in $(urldecode "$Q_sfile");do
- export IFS=$oldIFS
- if [ -f "$line" ];then
- echo "$line"
- rm -f "$line"
- elif [ -d "$line" ];then
- echo "Ordner: $line"
- rm -rf "$line"/*
- rmdir "$line"
- else
- echo "NICHT GEFUNDEN: $line"
- fi
- done
- export IFS=$oldIFS
- fi
- echo "</pre>"
- elif [ "$Q_action" = Rename ];then
- Q_fname=$(urldecode "$Q_fname")
- echo "<pre class=msg>Umbenennen: $(echo $Q_fname | sed 's#%2F#/#g')"
- oldIFS=$IFS;export IFS=$N
- for line in $(urldecode "$Q_sfile");do
- export IFS=$oldIFS
- if [ -f "$line" ];then
- echo "$line"
- ADIR=$(pwd)
- cd "$(${BBox} dirname $line)"
- mv "$(basename $line | tr -d '\t\n')" "$(echo $Q_fname | sed 's#%2F#/#g')"
- cd "$ADIR"
- else
- echo "NICHT GEFUNDENE DATEI: $line"
- fi
- break
- done
- export IFS=$oldIFS
- echo "</pre>"
- elif [ "$Q_action" = Archive ];then
- echo "<pre class=msg>"
- if [ -z "$transferDir" ]; then
- echo "Zielverzeichnis (Einstellungen -> Downloadoptionen -> Zielverzeichnis (lokal eingehängt)) nicht konfiguriert."
- elif ! [ -d "$transferDir" ]; then
- echo "Zielverzeichnis $transferDir existiert nicht. Bitte konfigurieren unter (Einstellungen -> Downloadoptionen -> Zielverzeichnis (lokal eingehängt))"
- else
- sfiles=$(urldecode "$Q_sfile")
- echo "Archiviere nach $transferDir im Hintergrund:<br>"
- oldIFS=$IFS;export IFS=$N
- for sfile in $sfiles;do
- export IFS=$oldIFS
- sfile2=$(realpath "$sfile")
- if [ -f "$sfile2" ] || [ -d "$sfile2" ]; then
- info=$(du -hs "$sfile2")
- echo "* $info"
- else
- echo "Überspringe $sfile2 - Keine Datei oder Verzeichnis"
- fi
- done
- export IFS=$oldIFS
- nohup $pdir/cgi/archive_web.sh $transferDir "$sfiles" &
- echo "<br>Bitte warten und UnRAR-Logs überprüfen, falls Verschieben nicht erfolgreich."
- fi
- echo "</pre>"
- elif [ "$Q_action" = unrar -o "$Q_action" = unrarInfo ];then
- option=
- if [ "$Q_action" = unrarInfo ];then
- option="-i"
- fi
- if [ -z "$Q_sfile" ];then
- sfile=$($BBox find $Q_fdir -maxdepth 1 -iname "*.rar" -a -type f -print)
- else
- sfile=$(urldecode "$Q_sfile")
- fi
- echo "<pre class=msg>UnRAR-Aufgabe hinzugefügt: $N$sfile</pre>";
- $pdir/cgi/unrar_web.sh "$sfile" "$tmp" "$option"
- if [ $? -ne 0 ];then
- echo "<p class=msg>UnRAR konnte nicht gestartet werden!</p>";
- else
- echo "<p class=msg>UnRAR gestartet.</p>";
- fi
- fi
- fi
- if [ "$Q_fdir" != $targetdir ];then
- hdir="${Q_fdir%/*}"
- navi="<th class=navi><a href=\"gui_ftp.cgi?fdir=$hdir\">zurück</a></th>
- <th class=navi><a href=\"gui_ftp.cgi?fdir=$targetdir\">Home</a></th>"
- else
- navi="<th class=navi> </th><th class=navi> </th>"
- fi
- currDir=$Q_fdir
- cd $Q_fdir 2>/dev/null && currDir=$(pwd)
- # Actions only under targetdir
- disableAction=0
- #chkPath="${Q_fdir#$targetdir}"
- #if [ -n "$chkPath" -a -z "${chkPath##*..*}" ];then
- # disableAction=1
- #fi
- Q_sort="${Q_sort:-name}"
- #- /$([ "$Q_sort" = ext ] && echo "»")<a href="gui_ftp.cgi?sort=ext&fdir=$Q_fdir" title="Sortierung nach Dateiendung.">Typ</a>
- cat <<-EOF
- <form method=post name=FritzLoad action="">
- <input type=hidden name=instance value="$instance">
- <input type=hidden name=SET value=1>
- <input type=hidden name=fdir value="$Q_fdir">
- <input type=hidden name=fname value="" size=100>
- <table class=ftp>
- <tr>
- <th class=chk> </th>
- <th class=date>
- $([ "$Q_sort" = date ] && echo "»")
- <a href="gui_ftp.cgi?sort=date&fdir=$Q_fdir&search=$Q_search&searchRegex=$Q_searchRegex" title="Sortierung nach Datum.">Datum</a>
- </th>
- <th class=size>
- $([ "$Q_sort" = size ] && echo "»")
- <a href="gui_ftp.cgi?sort=size&fdir=$Q_fdir&search=$Q_search&searchRegex=$Q_searchRegex" title="Sortierung nach Größe.">Größe</a>
- </th>
- <th class=naviName>
- $([ "$Q_sort" = name ] && echo "»")
- <a href="gui_ftp.cgi?sort=name&fdir=$Q_fdir&search=$Q_search&searchRegex=$Q_searchRegex" title="Sortierung nach Namen.">Dateien</a>
- in $currDir
- </th>
- $navi
- </tr>
- </table>
- <div class=ftpScreen id=ftpScreen>
- <script type="text/javascript">
- var setHeight=windowHeight()-180
- if (setHeight>0 && setHeight>150 && setHeight<600){
- document.getElementById('ftpScreen').style.height=setHeight+"px";
- }
- function promptfilename() {
- var FileName=window.prompt("Bitte einen neuen Dateinamen eingeben:","");
- document.FritzLoad.fname.value = FileName;
- }
- </script>
- <table class=ftp>
- EOF
- cat <<-EOF
- <tr class=folder>
- <td class=chk>-</td>
- <td class=date></td>
- <td class=size><a href="gui_ftp.cgi?fdir=$Q_fdir/.." title="Wechsle Verzeichnis nach oben">Verzeichnis</a></td>
- <td class=file><a href="gui_ftp.cgi?fdir=$Q_fdir/.." title="Wechsle Verzeichnis nach oben">..</a></td>
- </tr>
- EOF
- # drwxrwxrwx 2 root root 4.0k Mar 22 07:50 unrar
- lock ftp_files.tmp
- echo -n >/var/tmp/ftp_files.tmp
- while read attr kenn own own2 size month day ftime name ; do
- [ ${search_found:-0} -ge 1 ] && name=${name#$Q_fdir/}
- if [ -z "${attr##-*}" ];then
- if [ "$ftpdownload" = 1 ];then
- ftpurl="ftp://$ftpUser:$ftpPass@$ftpAdress$Q_fdir/$name"
- else
- ftpurl="?download=$Q_fdir/$name"
- fi
- echo "<tr>" >>/var/tmp/ftp_files.tmp
- if [ "$disableAction" = 0 ];then
- echo -n "<td class=chk><input type=checkbox name=sfile value=\"$Q_fdir/$name\" onmouseout=\"if (mousebutton != 0){this.checked=true};\"></td>" >>/var/tmp/ftp_files.tmp
- else
- echo -n "<td class=chk>-</td>" >>/var/tmp/ftp_files.tmp
- fi
- cat <<-EOF >>/var/tmp/ftp_files.tmp
- <td class=date>$month $day $ftime</td>
- <td class=size>$size</td>
- <td class=file><a href="$ftpurl">$name</a></td>
- </tr>
- EOF
- elif [ -z "${attr##d*}" ];then
- #check="checked"
- #[ -z "$(grep 'sfile=$name' $tmp/query_string)" ] && check=""
- echo "<tr class=folder>"
- if [ "$disableAction" = 0 ];then
- echo -n "<td class=chk><input type=checkbox name=sfile value=\"$Q_fdir/$name\"></td>"
- else
- echo -n "<td class=chk>-</td>"
- fi
- cat <<-EOF
- <td class=date>$month $day $ftime</td>
- <td class=size><a href="gui_ftp.cgi?fdir=$Q_fdir/$name">Verzeichnis</a></td>
- <td class=file><a href="gui_ftp.cgi?fdir=$Q_fdir/$name">$name</a></td>
- </tr>
- EOF
- fi
- done <$tmp/listdir
- unlock ftp_files.tmp
- cat /var/tmp/ftp_files.tmp
- rm -f $tmp/listdir /var/tmp/ftp_files.tmp
- cat <<-EOF
- </table></div>
- <select name=action height=1>
- <option value=unrar>UnRAR</option>
- <option value=unrarInfo>UnRAR-Info</option>
- <option value=rarPKG>RAR-Paket herunterladen</option>
- <option value=decrypt>Container dekodieren</option>
- <option value=del>Löschen</option>
- <option value=Rename>Umbenennen/Verschieben</option>
- <option value=Archive>Archivieren</option>
- </select>
- <input type=submit name=doAction value="Ausführen" onclick="if(document.FritzLoad.action.value == 'Rename') { promptfilename(); }">
- <input type=checkbox name=all value=1 class=ftpDelAll> Auf alle Dateien im Verzeichnis anwenden
- <br>
- EOF
- # <input type=submit name=unrar value=UnRAR>
- # <input type=submit name=unrarInfo value="UnRAR-Info">
- # <input type=submit name=rarPKG value="RAR-Paket herunterladen">
- # <input type=submit name=del value="Löschen" onclick="if(confirm('Datei wirklich löschen?'))return true; return false">
- # <input type=submit name="Rename" value="Umbenennen/Verschieben" onclick="promptfilename()">
- PAGEEND
Advertisement
Add Comment
Please, Sign In to add comment