jqueryFileTree.pl 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #!/usr/bin/perl
  2. use strict;
  3. use HTML::Entities ();
  4. #-----------------------------------------------------------
  5. # jQuery File Tree Perl Connector
  6. #
  7. # Version 1.0
  8. #
  9. # Oleg Burlaca
  10. # http://www.burlaca.com/2009/02/jquery-file-tree-connector/
  11. # 12 February 2009
  12. #-----------------------------------------------------------
  13. # for security reasons, specify a root folder
  14. # to prevent the whole filesystem to be shown
  15. # for ex: the root folder of your webbrowser
  16. my $root = "/var/www/html/";
  17. #----------------------------------------------------------
  18. my $params = &getCGIParams();
  19. print "Content-type: text/html\n\n";
  20. my $dir = $params->{dir};
  21. my $fullDir = $root . $dir;
  22. exit if ! -e $fullDir;
  23. opendir(BIN, $fullDir) or die "Can't open $dir: $!";
  24. my (@folders, @files);
  25. my $total = 0;
  26. while( defined (my $file = readdir BIN) ) {
  27. next if $file eq '.' or $file eq '..';
  28. $total++;
  29. if (-d "$fullDir/$file") {
  30. push (@folders, $file);
  31. } else {
  32. push (@files, $file);
  33. }
  34. }
  35. closedir(BIN);
  36. return if $total == 0;
  37. print "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
  38. # print Folders
  39. foreach my $file (sort @folders) {
  40. next if ! -e $fullDir . $file;
  41. print '<li class="directory collapsed"><a href="#" rel="' .
  42. &HTML::Entities::encode($dir . $file) . '/">' .
  43. &HTML::Entities::encode($file) . '</a></li>';
  44. }
  45. # print Files
  46. foreach my $file (sort @files) {
  47. next if ! -e $fullDir . $file;
  48. $file =~ /\.(.+)$/;
  49. my $ext = $1;
  50. print '<li class="file ext_' . $ext . '"><a href="#" rel="' .
  51. &HTML::Entities::encode($dir . $file) . '/">' .
  52. &HTML::Entities::encode($file) . '</a></li>';
  53. }
  54. print "</ul>\n";
  55. #--------------------------------------------------------------------------------------------------
  56. sub getCGIParams {
  57. my $line;
  58. if ($ENV{'REQUEST_METHOD'} eq "POST") {
  59. read(STDIN, $line, $ENV{'CONTENT_LENGTH'});
  60. } else {
  61. $line = $ENV{'QUERY_STRING'};
  62. }
  63. my (@pairs) = split(/&/, $line);
  64. my ($name, $value, %F);
  65. foreach (@pairs) {
  66. ($name, $value) = split(/=/);
  67. $value =~ tr/+/ /;
  68. $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  69. if (! exists $F{$name}) {
  70. $F{$name} = $value;
  71. } elsif (exists $F{$name} and ref($F{$name}) ne 'ARRAY') {
  72. my $prev_value = $F{$name};
  73. delete $F{$name};
  74. $F{$name} = [ $prev_value, $value ];
  75. } else { push @{ $F{$name} }, $value }
  76. }
  77. return \%F;
  78. }
  79. #--------------------------------------------------------------------------------------------------