Changeset 7957
- Timestamp:
- 2004-08-16T22:29:36+12:00 (20 years ago)
- Location:
- trunk/gsdl/cgi-bin
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/gsdl/cgi-bin/download
r7766 r7957 1 1 #!/usr/bin/perl -w 2 2 3 use CGI; 4 use usabcgi; 5 6 sub init_cgi 7 { 8 my $line = <STDIN>; 9 my $cgi; 10 11 if ((defined $line) && ($line ne "")) { 12 $cgi = new CGI($line); 13 } 14 else { 15 $cgi = new CGI(); 16 } 17 18 return $cgi; 19 } 20 21 sub clean_param 22 { 23 my ($cgi,$param) = @_; 24 25 my $val = $cgi->param($param); 26 $val =~ s/[\r\n]+$//; 27 28 return $val; 29 } 30 3 use gsdlCGI; 31 4 32 5 sub main 33 6 { 34 my $cgi = init_cgi(); 35 36 my ($gsdlhome) = usabcgi::get_config_info("gsdlhome"); 37 38 my $col = clean_param($cgi,"c"); 39 my $dir = clean_param($cgi,"dir"); 40 $dir = "" if ($dir eq "."); 41 42 chdir "$gsdlhome/collect"; 43 44 my $cmd = "zip -r $col.zip $col/$dir"; 7 my $gsdl_cgi = new gsdlCGI("+cmdline"); 45 8 46 9 47 #print "Content-type:text/plain\n\n"; 48 #print "$cmd"; 10 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome"); 49 11 50 my $output = `$cmd`; 51 52 ### print STDERR "**** output = $output\n"; 12 my $col = $gsdl_cgi->clean_param("c"); 13 if (!defined $col) { 14 $gsdl_cgi->generate_error("No collection specified."); 15 } 53 16 54 print "Content-type:application/zip\n\n";55 ## my $output2 = `cat $col.zip`;17 my $dir = $gsdl_cgi->clean_param("dir"); 18 $dir = "" if ((!defined $dir) || ($dir eq ".")); 56 19 57 ## print $output2;58 20 59 if (open(PIN,"cat $col.zip |")) { 21 $gsdl_cgi->checked_chdir("$gsdlhome/collect"); 22 23 # Change this to Java zip?? 24 my $zip_cmd = "zip -r $col.zip $col/$dir"; 25 $gsdl_cgi->unix_cmd($zip_cmd); 26 27 28 my $pipe_cmd = "cat $col.zip"; # Unix specific 29 30 if (open(PIN,"$pipe_cmd |")) { 60 31 binmode(PIN); 61 32 62 33 my $buf; 63 34 my $num_bytes = 0; 35 36 print "Content-type:application/zip\n\n"; 64 37 65 38 while (read(PIN,$buf,1024)>0) { … … 72 45 my $status = $?; 73 46 } 74 75 76 47 else { 48 $gsdl_cgi->generate_error("Unable to pipe input from: $pipe_cmd"); 49 } 50 77 51 unlink "$col.zip"; 78 52 } -
trunk/gsdl/cgi-bin/launch
r7922 r7957 1 1 #!/usr/bin/perl -w 2 2 3 use CGI; 4 use usabcgi; 5 6 sub init_cgi 7 { 8 my $line = <STDIN>; 9 my $cgi; 10 11 if ((defined $line) && ($line ne "")) { 12 $cgi = new CGI($line); 13 } 14 else { 15 $cgi = new CGI(); 16 } 17 18 return $cgi; 19 } 20 21 sub clean_param 22 { 23 my ($cgi,$param) = @_; 24 25 my $val = $cgi->param($param); 26 $val =~ s/[\r\n]+$// if (defined $val); 27 28 return $val; 29 } 30 31 sub safe_val 32 { 33 my ($val) = @_; 34 35 # ensure only alpha-numeric plus a few other special chars 36 37 $val =~ s/[^[:alnum:]@\.\/\- :]//g if (defined $val); 38 39 return $val; 40 } 3 use gsdlCGI; 41 4 42 5 sub run_gencmd 43 6 { 44 my ($prog,$col,$ cgi) = @_;7 my ($prog,$col,$gsdl_cgi) = @_; 45 8 46 my @arg_keys = $ cgi->param;9 my @arg_keys = $gsdl_cgi->param; 47 10 11 if (!-e "setup.bash") { 12 my $note = "Note: Server side for Greenstone applet must currently be Unix based."; 13 14 $gsdl_cgi->generate_error("Unable to locate setup.bash\n$note"); 15 } 16 17 18 # Unix specific, need to generalise to Windows etc. 48 19 my $cmd = "source setup.bash > /dev/null ; $prog.pl "; 49 20 50 21 foreach my $k ( @arg_keys ) { 51 my $arg_val = clean_param($cgi,$k);22 my $arg_val = $gsdl_cgi->clean_param($k); 52 23 if ($k eq "about") { 53 24 # special case (allow most things, but not quotes) … … 56 27 else { 57 28 # ensure only alphanumeric, plus a few special chars 58 $arg_val = safe_val($arg_val);29 $arg_val = $gsdl_cgi->safe_val($arg_val); 59 30 } 60 31 $cmd .= " -$k"; … … 68 39 my $status; 69 40 41 print STDOUT "Content-type:text/plain\n\n"; 42 70 43 if (open(PIN,"$cmd 2>&1 |")) { 71 44 while (defined (my $line=<PIN>)) { … … 76 49 $status = $?; 77 50 78 # print STDOUT "Exit status: $status\n"; 51 if ($status>0) { 52 my $exit_status = "Exit status: $status"; 53 $gsdl_cgi->generate_error( "'".$cmd."' failed.\n$exit_status"); 54 } 79 55 } 80 56 else { 81 print STDOUT "Error: unable to execute cmd: $cmd\n";57 $gsdl_cgi->generate_error("Unable to execute cmd: $cmd"); 82 58 $status = -1; 83 59 } … … 87 63 88 64 65 sub run_xmlinfo 66 { 67 my ($cmd,$col,$gsdl_cgi) = @_; 68 69 if (defined $col) { 70 $gsdl_cgi->param(-name=>"collect",-value=>$col); 71 $col = undef; 72 } 73 74 if ($cmd eq "pluginfo") { 75 my $plug = $gsdl_cgi->clean_param("plug"); 76 77 if (defined $plug) { 78 $gsdl_cgi->delete("plug"); 79 $col = $gsdl_cgi->safe_val($plug); 80 } 81 } 82 elsif ($cmd eq "classinfo") { 83 my $class = $gsdl_cgi->clean_param("class"); 84 85 if (defined $class) { 86 $gsdl_cgi->delete("class"); 87 $col = $gsdl_cgi->safe_val($class); 88 } 89 } 90 91 return run_gencmd($cmd,$col,$gsdl_cgi); 92 } 93 94 89 95 sub run_buildcol 90 96 { 91 my ($col,$ cgi) = @_;97 my ($col,$gsdl_cgi) = @_; 92 98 93 99 if (defined $col) { 94 chdir("collect/$col");95 `rm -rf building/*; `;96 chdir("../..");100 $gsdl_cgi->checked_chdir("collect/$col"); 101 $gsdl_cgi->rm_rf("building/*"); 102 $gsdl_cgi->checked_chdir("../.."); 97 103 } 98 104 99 my $status = run_gencmd("buildcol",$col,$ cgi);105 my $status = run_gencmd("buildcol",$col,$gsdl_cgi); 100 106 101 107 if ($status == 0) { 102 108 if (defined $col) { 103 chdir("collect/$col"); 104 `rm -rf index; cp -r building index`; 105 chdir("../.."); 109 $gsdl_cgi->checked_chdir("collect/$col"); 110 $gsdl_cgi->rm_rf("index"); 111 $gsdl_cgi->unix_cmd("/bin/cp -r building index"); 112 $gsdl_cgi->checked_chdir("../.."); 106 113 } 107 114 } 108 else { 109 110 # An error has occured 111 } 115 # no need to do else clause as error message will have already 116 # been generated. 112 117 } 113 118 … … 115 120 sub run_deldir 116 121 { 117 my ($col,$ cgi) = @_;122 my ($col,$gsdl_cgi) = @_; 118 123 119 124 if ((!defined $col) || ($col =~ m/^\s*$/)) { 120 print "Content-type:text/plain\n\n"; 121 print "Error: No collection name specified\n"; 122 exit; 125 $gsdl_cgi->generate_error( "No collection name specified"); 123 126 } 124 127 125 chdir("collect");128 $gsdl_cgi->checked_chdir("collect"); 126 129 127 my $dir = clean_param($cgi,"dir");130 my $dir = $gsdl_cgi->clean_param("dir"); 128 131 $dir = "" if ($dir eq "."); 129 132 130 my $cmd = "/bin/rm -rf $col/$dir"; 131 132 my $output = `$cmd`; 133 134 chdir(".."); 133 $gsdl_cgi->rm_rf("$col/$dir"); 134 $gsdl_cgi->checked_chdir(".."); 135 135 } 136 136 137 137 sub main 138 138 { 139 print "Content-type:text/plain\n\n"; 139 my $gsdl_cgi = new gsdlCGI("+cmdline"); 140 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome"); 141 142 $gsdl_cgi->checked_chdir($gsdlhome); 140 143 141 my $cgi = init_cgi(); 144 my $cmd = $gsdl_cgi->clean_param("cmd"); 145 if (!defined $cmd) { 146 $gsdl_cgi->generate_error("No command specified."); 147 } 142 148 143 my ($gsdlhome) = usabcgi::get_config_info("gsdlhome"); 144 chdir($gsdlhome); 149 $gsdl_cgi->delete("cmd"); 150 $cmd =~ s/\..*$//; 151 $cmd = $gsdl_cgi->safe_val($cmd); 145 152 146 my $cmd = clean_param($cgi,"cmd"); 147 $cgi->delete("cmd"); 148 $cmd =~ s/\..*$//; 149 $cmd = safe_val($cmd); 153 my $col = $gsdl_cgi->clean_param("c"); 150 154 151 my $col = clean_param($cgi,"c"); 152 153 $cgi->delete("c"); 154 $col = safe_val($col); 155 $gsdl_cgi->delete("c"); 156 $col = $gsdl_cgi->safe_val($col); 155 157 156 158 if ($cmd eq "mkcol") { 157 run_gencmd($cmd,$col,$cgi); 159 run_gencmd($cmd,$col,$gsdl_cgi); 160 } 161 elsif ($cmd eq "pluginfo") { 162 run_xmlinfo($cmd,$col,$gsdl_cgi); 163 } 164 elsif ($cmd eq "classinfo") { 165 run_xmlinfo($cmd,$col,$gsdl_cgi); 158 166 } 159 167 elsif ($cmd eq "import") { 160 run_gencmd($cmd,$col,$ cgi);168 run_gencmd($cmd,$col,$gsdl_cgi); 161 169 } 162 170 elsif ($cmd eq "buildcol") { 163 run_buildcol($col,$ cgi);171 run_buildcol($col,$gsdl_cgi); 164 172 } 165 173 elsif ($cmd eq "deldir") { 166 run_deldir($col,$ cgi);174 run_deldir($col,$gsdl_cgi); 167 175 } 168 176 else { 169 print "Error: unrecognised command: '$cmd'\n"; 170 exit 1; 177 $gsdl_cgi->generate_error("unrecognised command: '$cmd'"); 171 178 } 172 179 -
trunk/gsdl/cgi-bin/upload
r7821 r7957 1 1 #!/usr/bin/perl -w 2 2 3 require './CGI.pm';4 use usabcgi;5 3 6 sub init_cgi 7 { 8 # my $line = <STDIN>; 9 my $cgi; 10 11 # if ((defined $line) && ($line ne "")) { 12 # print STDERR "**** line = $line\n"; 13 # $cgi = new CGI($line); 14 # } 15 # else { 16 $cgi = new CGI(); 17 # } 18 19 return $cgi; 20 } 21 22 sub clean_param 23 { 24 my ($cgi,$param) = @_; 25 26 my $val = $cgi->param($param); 27 $val =~ s/[\r\n]+$//; 28 29 return $val; 30 } 4 use gsdlCGI; 31 5 32 6 33 7 sub main 34 8 { 35 my $cgi = init_cgi(); 9 my $gsdl_cgi = new gsdlCGI(); 10 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome"); 36 11 37 my ($gsdlhome) = usabcgi::get_config_info("gsdlhome"); 12 my $col = $gsdl_cgi->clean_param("c"); 13 if ((!defined $col) || ($col =~ m/^\s*$/)) { 14 $gsdl_cgi->generate_error("No collection name specified"); 15 } 38 16 39 my $col = clean_param($cgi,"c"); 40 my $dir = clean_param($cgi,"dir"); 17 my $dir = $gsdl_cgi->clean_param("dir"); 18 if ((!defined $dir) || ($dir =~ m/^\s*$/)) { 19 $gsdl_cgi->generate_error("No directory name specified"); 20 } 21 41 22 $dir = "" if (($dir eq ".") || ($dir =~ m/^\.\./)); 42 23 43 if ((!defined $col) || ($col =~ m/^\s*$/)) { 44 print "Content-type:text/plain\n\n"; 45 print "Error: No collection name specified\n"; 46 exit; 47 } 48 49 50 my $zip_content = clean_param($cgi,"zip"); 24 my $zip_content = $gsdl_cgi->clean_param("zip"); 51 25 my $zip_fname = "$col.zip"; 52 26 53 chdir "$gsdlhome/collect/"; 54 `rm -rf $col/$dir`; 55 `mkdir $col/$dir`; 27 $gsdl_cgi->checked_chdir("$gsdlhome/collect/"); 28 my $col_dir = "$col/$dir"; # Unix specific 29 $gsdl_cgi->rm_rf($col_dir); 30 if (!-e $col_dir) { 31 my $mkdir_cmd = "mkdir $col_dir"; 32 $gsdl_cgi->unix_cmd($mkdir_cmd); 33 } 56 34 57 35 if (open(ZOUT,"> $zip_fname")) { 58 36 59 my $ZIN = $ cgi->upload('zip');37 my $ZIN = $gsdl_cgi->upload('zip'); 60 38 binmode($ZIN); 61 39 … … 76 54 77 55 `java -classpath $gsdlhome/bin/java/SignedGatherer.jar org.greenstone.gatherer.util.Unzip $gsdlhome/ $zip_fname`; 78 ## `unzip -o $zip_fname`;79 ## `find $col -type d -perm +001 \;`;80 ## `chmod -R u+x $col`;81 56 82 57 unlink "$zip_fname"; 83 58 84 print "Content-type:text/plain\n\n"; 85 my $content_len = $num_bytes; 86 print "$content_len bytes written.\n"; 87 print "Done.\n"; 59 $gsdl_cgi->generate_ok_message("$dir or $col uploaded successfully."); 88 60 } 89 61 else { 90 # Error 91 print "Content-type:text/plain\n\n"; 92 print "Error: unable to open $zip_fname\n"; 62 $gsdl_cgi->generate_error("unable to open $zip_fname"); 93 63 } 94 64 }
Note:
See TracChangeset
for help on using the changeset viewer.