Guest User

gui_ftp.cgi

a guest
Aug 6th, 2015
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 12.85 KB | None | 0 0
  1. #!/bin/ash
  2.  
  3. . ./gui_main.cgi
  4. . $pdir/lib/util_file.sh
  5. . $pdir/lib/downloadTransfer.sh
  6.  
  7. # NAS ueberpruefen und dabei $targetdir setzen
  8. _checkNAS
  9.  
  10. Q_fdir=$(urldecode "$Q_fdir")
  11. [ -z "$Q_fdir" ] && Q_fdir=$targetdir
  12. [ -d "$Q_fdir" ] || Q_fdir=$targetdir
  13.  
  14.  
  15. # action submit button was not clicked => no action is selected
  16. [ -z "$Q_doAction" ] && Q_action=
  17.  
  18. search=FTP
  19. search_found=0
  20. #!TODO: Ausgabe in Darstellungstabelle mit checkbox für Aktionen + Sortierfunktionen mit Ergebnis ermöglichen
  21. _search(){
  22.     local ls_option=$1 pattern
  23.     pattern="$(urldecode "$Q_search")"
  24.     if [ "$Q_searchRegex" != 1 ];then
  25.         pattern="*$(quotemeta "$pattern")*"
  26.     fi
  27.     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>"
  28.     $BBox find $Q_fdir -iname "$pattern" -a -type f -print0 | xargs -0r ls $ls_option >$tmp/listdir
  29.     search_found=$( grep -c . $tmp/listdir )
  30.     if [ ${search_found:-0} -eq 0 ];then
  31.         echo "Keine Treffer$N"
  32.     fi
  33.     cat <<-EOF
  34.         <p style="text-align:right;margin-top:-20px"><input type=submit value="OK" onclick="\$('#search_result').hide(); return false;"></p>
  35.         </pre>
  36.         <script>\$('#search_matches').html($search_found)</script>
  37.     EOF
  38.     return 0
  39. }
  40.  
  41. ls_option=
  42. if [ "$Q_sort" = size ];then
  43.     ls_option=-hlS
  44. elif [ "$Q_sort" = date ];then
  45.     ls_option=-hlt
  46. elif [ "$Q_sort" = ext ];then
  47.     ls_option=-hlX
  48. else # by name
  49.     ls_option=-hl
  50. fi
  51.  
  52. [ -n "$Q_search" ] && _search $ls_option
  53. if [ ${search_found:-0} -eq 0 ];then
  54.     ls $ls_option "$Q_fdir" >$tmp/listdir
  55. fi
  56.  
  57. msg=
  58. # Download RAR-Archiv of all selected Files via HTTP
  59. if [ "$Q_action" = rarPKG ];then
  60.     if [ -z "$Q_sfile" -a -z "$Q_all" ];then
  61.         msg="<p class=msg>Keine Datei wurde markiert.</p>";
  62.     else
  63. #       # Relativer Pfad könnte kein "cd" ermöglichen
  64. #       # suche Absoluten Pfad auf USB Speicher
  65.         abspath=$Q_fdir
  66. #       if [ -z "${Q_fdir##*/../*}" ];then
  67. #           if [ -n "${Q_fdir##/var/fritzload/../*}" ];then
  68. #               msg="<p class=msg>Relative Pfadangaben im targetdir können nicht zur TAR-Erstellung verwendet werden.</p>"
  69. #           else
  70. #               subpath="${Q_fdir#/var/fritzload/../}"
  71. #               abspath=""
  72. #               chkpath=""
  73. #           for USBDEVICE in $(mount | grep /var/media/ftp/ | sed -e "s,^.*ftp/,,g" -e "s/ .*$//"); do
  74. #                   dir="/var/media/ftp/$USBDEVICE/$subpath/"
  75. #                   chkpath="$chkpath$N$dir"
  76. #                   if [ -d "$dir" ];then
  77. #                       abspath=$dir
  78. #                       break
  79. #                   fi
  80. #               done
  81. #               if [ -z "$abspath" ];then
  82. #                   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>"
  83. #               fi
  84. #           fi
  85. #       fi
  86. #       if [ -z "$msg" ];then
  87.             if ! cd "$abspath";then
  88.                 msg="<p class=msg>Kann ins Verzeichnis $abspath nicht wechseln!</p>"
  89.             else
  90.                 tarFiles=
  91.                 fcount=0
  92.                 if [ -n "$Q_all" -a -z "$Q_sfile" ];then
  93.                     fcount=ALL
  94.                     tarFiles=*
  95. # überflüssig, da nur entscheidend, falls kein Dateien/Ordner gewählt wurden?
  96. #                   if [ -z "$Q_sfile" ];then
  97. #                       tarFiles="*"
  98. #                   else
  99. #                       oldIFS="$IFS";export IFS="$N"
  100. #                       for line in $(urldecode "$Q_sfile");do
  101. #                           if [ -d "$line" ];then
  102. #                               line="${line#$Q_fdir/}/*"
  103. #                           else
  104. #                               line="${line#$Q_fdir/}"
  105. #                           fi
  106. #                           # Leerzeichen korrigieren
  107. #                           line="$(echo "$line" | sed -e 's, ,\\ ,g')"
  108. #                           tarFiles="$tarFiles $line"
  109. #                       done
  110. #                       export IFS="$oldIFS"
  111. #                   fi
  112.                 else
  113.                     oldIFS=$IFS;export IFS=$N
  114.                     for line in $(urldecode "$Q_sfile");do
  115.                         export IFS=$oldIFS
  116.                         fcount=$(($fcount+1))
  117.                         line=${line#$Q_fdir/}
  118.                         # Leerzeichen korrigieren
  119.                         line=$(echo "$line" | sed -e 's, ,\\ ,g')
  120.                         tarFiles="$tarFiles $line"
  121.                     done
  122.                     export IFS=$oldIFS
  123.                 fi
  124.                 sfile="Fritzload-PKG-$(date "+%Y_%m_%d-%H.%M").Files-$fcount.rar"
  125.                 echo -e "Mime-Version: 1.0"
  126.                 echo -e "Content-Type: application/octet-stream"
  127.                 echo -e "Content-Disposition: attachment; filename=\"$sfile\"\n"
  128.                 tar -c -C "$abspath" -O $tarFiles
  129.                 exit
  130.             fi
  131.         #fi
  132.     fi
  133. fi
  134.  
  135. # Dateidownload via HTTP
  136. if [ -n "$Q_download" ];then
  137.     Q_download=$(urldecode "$Q_download")
  138.     if [ ! -f "$Q_download" ];then
  139.         msg="<p class=msg>HTTP-DOWNLOAD: Datei wurde nicht gefunden.</p>"
  140.         msg="<p class=msg>HTTP-DOWNLOAD: $Q_download</p>"
  141.     else
  142. #       # simplest security
  143. #       rpath="${Q_download#$targetdir}"
  144. #       if [ "$rpath" != "$targetdir" ];then
  145. #           rpath="$(echo -n "$rpath" | tr -d '\\' | sed -e '/\.\./d')"
  146. #           if [ -n "$rpath" ];then
  147.                 ls -la "$Q_download" >/var/tmp/downfile.tmp
  148.                 read v1 v2 v3 v4 size v6 < /var/tmp/downfile.tmp
  149.                 rm -f /var/tmp/downfile.tmp
  150.                 echo -e "Content-type: application/octet-stream"
  151.                 #echo -e "Content-Length: $size"
  152.                 echo -e "Content-disposition: Attachment; filename=\"${Q_download##*/}\n"
  153.                 ${BBox} dd if="$Q_download"
  154.                 exit
  155. #           fi
  156. #       fi
  157.         msg="<p class=msg>HTTP-DOWNLOAD: Ungültiger Dateinamen oder Pfad.</p>"
  158.     fi
  159. fi
  160.  
  161.  
  162. activeButton Ftp
  163. echo "$msg"
  164.  
  165. if [ "$Q_SET" = 1 ];then
  166.     if [ -z "$Q_sfile" -a -z "$Q_all" ];then
  167.         echo "<p class=msg>Keine Datei wurde markiert.</p>";
  168.     elif [ "$Q_action" = del ];then
  169.         echo "<pre class=msg>LÖSCHEN:"
  170.         if [ -z "$Q_sfile" -a  -n "$Q_all" ];then
  171.             removedir="$Q_fdir"
  172.             echo "VERZEICHNIS: $removedir"
  173.             rm -rf "$removedir"/*
  174.             rmdir "$removedir"
  175.         else
  176.             oldIFS=$IFS;export IFS=$N
  177.             for line in $(urldecode "$Q_sfile");do
  178.                 export IFS=$oldIFS
  179.                 if [ -f "$line" ];then
  180.                     echo "$line"
  181.                     rm -f "$line"
  182.                 elif [ -d "$line" ];then
  183.                     echo "Ordner: $line"
  184.                     rm -rf "$line"/*
  185.                     rmdir "$line"
  186.                 else
  187.                     echo "NICHT GEFUNDEN: $line"
  188.                 fi
  189.             done
  190.             export IFS=$oldIFS
  191.         fi
  192.         echo "</pre>"
  193.     elif [ "$Q_action" = Rename ];then
  194.       Q_fname=$(urldecode "$Q_fname")
  195.         echo "<pre class=msg>Umbenennen: $(echo $Q_fname | sed 's#%2F#/#g')"
  196.         oldIFS=$IFS;export IFS=$N
  197.         for line in $(urldecode "$Q_sfile");do
  198.             export IFS=$oldIFS
  199.             if [ -f "$line" ];then
  200.                 echo "$line"
  201.                 ADIR=$(pwd)
  202.                 cd "$(${BBox} dirname $line)"
  203.                 mv "$(basename $line | tr -d '\t\n')" "$(echo $Q_fname | sed 's#%2F#/#g')"
  204.                 cd "$ADIR"
  205.             else
  206.                 echo "NICHT GEFUNDENE DATEI: $line"
  207.             fi
  208.             break
  209.         done
  210.         export IFS=$oldIFS
  211.         echo "</pre>"
  212.     elif [ "$Q_action" = Archive ];then
  213.    
  214.         echo "<pre class=msg>"
  215.        
  216.         if [ -z "$transferDir" ]; then
  217.             echo "Zielverzeichnis (Einstellungen -> Downloadoptionen -> Zielverzeichnis (lokal eingehängt)) nicht konfiguriert."
  218.         elif ! [ -d "$transferDir" ]; then
  219.             echo "Zielverzeichnis $transferDir existiert nicht. Bitte konfigurieren unter (Einstellungen -> Downloadoptionen -> Zielverzeichnis (lokal eingehängt))"
  220.         else
  221.             sfiles=$(urldecode "$Q_sfile")
  222.             echo "Archiviere nach $transferDir im Hintergrund:<br>"
  223.             oldIFS=$IFS;export IFS=$N
  224.             for sfile in $sfiles;do
  225.                 export IFS=$oldIFS
  226.                 sfile2=$(realpath "$sfile")
  227.                 if [ -f "$sfile2" ] || [ -d "$sfile2" ]; then
  228.                     info=$(du -hs "$sfile2")
  229.                     echo "* $info"
  230.                 else
  231.                     echo "Überspringe $sfile2 - Keine Datei oder Verzeichnis"
  232.                 fi
  233.             done
  234.             export IFS=$oldIFS
  235.             nohup $pdir/cgi/archive_web.sh $transferDir "$sfiles" &
  236.             echo "<br>Bitte warten und UnRAR-Logs überprüfen, falls Verschieben nicht erfolgreich."          
  237.         fi
  238.        
  239.         echo "</pre>"
  240.    
  241.     elif [ "$Q_action" = unrar -o "$Q_action" = unrarInfo ];then
  242.         option=
  243.         if [ "$Q_action" = unrarInfo ];then
  244.             option="-i"
  245.         fi
  246.         if [ -z "$Q_sfile" ];then
  247.             sfile=$($BBox find $Q_fdir -maxdepth 1 -iname "*.rar" -a -type f -print)
  248.         else
  249.             sfile=$(urldecode "$Q_sfile")
  250.         fi
  251.         echo "<pre class=msg>UnRAR-Aufgabe hinzugefügt: $N$sfile</pre>";
  252.         $pdir/cgi/unrar_web.sh "$sfile" "$tmp" "$option"
  253.         if [ $? -ne 0 ];then
  254.             echo "<p class=msg>UnRAR konnte nicht gestartet werden!</p>";
  255.         else
  256.             echo "<p class=msg>UnRAR gestartet.</p>";
  257.         fi
  258.     fi
  259. fi
  260.  
  261. if [ "$Q_fdir" != $targetdir ];then
  262.     hdir="${Q_fdir%/*}"
  263.     navi="<th class=navi><a href=\"gui_ftp.cgi?fdir=$hdir\">zurück</a></th>
  264.                 <th class=navi><a href=\"gui_ftp.cgi?fdir=$targetdir\">Home</a></th>"
  265. else
  266.     navi="<th class=navi>&nbsp;</th><th class=navi>&nbsp;</th>"
  267. fi
  268.  
  269. currDir=$Q_fdir
  270. cd $Q_fdir 2>/dev/null && currDir=$(pwd)
  271. # Actions only under targetdir
  272. disableAction=0
  273. #chkPath="${Q_fdir#$targetdir}"
  274. #if [ -n "$chkPath" -a -z "${chkPath##*..*}" ];then
  275. #   disableAction=1
  276. #fi
  277.  
  278.  
  279. Q_sort="${Q_sort:-name}"
  280. #- /$([ "$Q_sort" = ext ] && echo "&raquo;")<a href="gui_ftp.cgi?sort=ext&amp;fdir=$Q_fdir" title="Sortierung nach Dateiendung.">Typ</a>
  281. cat <<-EOF
  282.     <form method=post name=FritzLoad action="">
  283.     <input type=hidden name=instance value="$instance">
  284.     <input type=hidden name=SET value=1>
  285.     <input type=hidden name=fdir value="$Q_fdir">
  286.     <input type=hidden name=fname value="" size=100>
  287.    
  288.     <table class=ftp>
  289.         <tr>
  290.             <th class=chk>&nbsp;</th>
  291.             <th class=date>
  292.                 $([ "$Q_sort" = date ] && echo "&raquo;")
  293.                 <a href="gui_ftp.cgi?sort=date&amp;fdir=$Q_fdir&amp;search=$Q_search&amp;searchRegex=$Q_searchRegex" title="Sortierung nach Datum.">Datum</a>
  294.             </th>
  295.             <th class=size>
  296.                 $([ "$Q_sort" = size ] && echo "&raquo;")
  297.                 <a href="gui_ftp.cgi?sort=size&amp;fdir=$Q_fdir&amp;search=$Q_search&amp;searchRegex=$Q_searchRegex" title="Sortierung nach Größe.">Größe</a>
  298.             </th>
  299.             <th class=naviName>
  300.                 $([ "$Q_sort" = name ] && echo "&raquo;")
  301.                 <a href="gui_ftp.cgi?sort=name&amp;fdir=$Q_fdir&amp;search=$Q_search&amp;searchRegex=$Q_searchRegex" title="Sortierung nach Namen.">Dateien</a>
  302.                 in $currDir
  303.             </th>
  304.             $navi
  305.         </tr>
  306.     </table>
  307.    
  308.     <div class=ftpScreen id=ftpScreen>
  309.         <script type="text/javascript">
  310.             var setHeight=windowHeight()-180
  311.             if (setHeight>0 && setHeight>150 && setHeight<600){
  312.                 document.getElementById('ftpScreen').style.height=setHeight+"px";
  313.             }
  314.             function promptfilename() {
  315.               var FileName=window.prompt("Bitte einen neuen Dateinamen eingeben:","");
  316.               document.FritzLoad.fname.value = FileName;
  317.             }
  318.         </script>
  319.         <table class=ftp>
  320. EOF
  321.  
  322. cat <<-EOF
  323.             <tr class=folder>
  324.                 <td class=chk>-</td>
  325.                 <td class=date></td>
  326.                 <td class=size><a href="gui_ftp.cgi?fdir=$Q_fdir/.." title="Wechsle Verzeichnis nach oben">Verzeichnis</a></td>
  327.                 <td class=file><a href="gui_ftp.cgi?fdir=$Q_fdir/.." title="Wechsle Verzeichnis nach oben">..</a></td>
  328.             </tr>
  329. EOF
  330.  
  331. # drwxrwxrwx    2 root     root         4.0k Mar 22 07:50 unrar
  332. lock ftp_files.tmp
  333. echo -n >/var/tmp/ftp_files.tmp
  334. while read attr kenn own own2 size month day ftime name ; do
  335.     [ ${search_found:-0} -ge 1 ] && name=${name#$Q_fdir/}
  336.     if [ -z "${attr##-*}" ];then
  337.         if [ "$ftpdownload" = 1 ];then
  338.         ftpurl="ftp://$ftpUser:$ftpPass@$ftpAdress$Q_fdir/$name"
  339.         else
  340.         ftpurl="?download=$Q_fdir/$name"
  341.         fi
  342.  
  343.         echo "<tr>" >>/var/tmp/ftp_files.tmp
  344.         if [ "$disableAction" = 0 ];then
  345.             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
  346.         else
  347.             echo -n "<td class=chk>-</td>" >>/var/tmp/ftp_files.tmp
  348.         fi
  349.         cat <<-EOF >>/var/tmp/ftp_files.tmp
  350.                 <td class=date>$month $day $ftime</td>
  351.                 <td class=size>$size</td>
  352.                 <td class=file><a href="$ftpurl">$name</a></td>
  353.             </tr>
  354.         EOF
  355.     elif [ -z "${attr##d*}" ];then
  356.         #check="checked"
  357.          #[ -z "$(grep 'sfile=$name' $tmp/query_string)" ] && check=""
  358.         echo "<tr class=folder>"
  359.         if [ "$disableAction" = 0 ];then
  360.             echo -n "<td class=chk><input type=checkbox name=sfile value=\"$Q_fdir/$name\"></td>"
  361.         else
  362.             echo -n "<td class=chk>-</td>"
  363.         fi
  364.         cat <<-EOF
  365.                 <td class=date>$month $day $ftime</td>
  366.                 <td class=size><a href="gui_ftp.cgi?fdir=$Q_fdir/$name">Verzeichnis</a></td>
  367.                 <td class=file><a href="gui_ftp.cgi?fdir=$Q_fdir/$name">$name</a></td>
  368.             </tr>
  369.         EOF
  370.     fi
  371. done <$tmp/listdir
  372. unlock ftp_files.tmp
  373. cat /var/tmp/ftp_files.tmp
  374. rm -f $tmp/listdir /var/tmp/ftp_files.tmp
  375.  
  376. cat <<-EOF
  377.     </table></div>
  378.    
  379.     <select name=action height=1>
  380.         <option value=unrar>UnRAR</option>
  381.         <option value=unrarInfo>UnRAR-Info</option>
  382.         <option value=rarPKG>RAR-Paket herunterladen</option>
  383.         <option value=decrypt>Container dekodieren</option>
  384.         <option value=del>Löschen</option>
  385.         <option value=Rename>Umbenennen/Verschieben</option>
  386.         <option value=Archive>Archivieren</option>
  387.     </select>
  388.     <input type=submit name=doAction value="Ausführen" onclick="if(document.FritzLoad.action.value == 'Rename') { promptfilename(); }">
  389.     <input type=checkbox name=all value=1 class=ftpDelAll> Auf alle Dateien im Verzeichnis anwenden
  390.     <br>
  391. EOF
  392.  
  393. #   <input type=submit name=unrar value=UnRAR>
  394. #   <input type=submit name=unrarInfo value="UnRAR-Info">
  395. #   <input type=submit name=rarPKG value="RAR-Paket herunterladen">
  396. #   <input type=submit name=del value="Löschen" onclick="if(confirm('Datei wirklich löschen?'))return true; return false">
  397. #   <input type=submit name="Rename" value="Umbenennen/Verschieben" onclick="promptfilename()">
  398.  
  399.  
  400. PAGEEND
Advertisement
Add Comment
Please, Sign In to add comment