Changeset 7957


Ignore:
Timestamp:
2004-08-16T22:29:36+12:00 (20 years ago)
Author:
davidb
Message:

Scripts revised to provide better error handline. Much of useful
functionality is bundled in gsdlCGI.pm

Location:
trunk/gsdl/cgi-bin
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/gsdl/cgi-bin/download

    r7766 r7957  
    11#!/usr/bin/perl -w
    22
    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 
     3use gsdlCGI;
    314
    325sub main
    336{
    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");
    458
    469
    47     #print "Content-type:text/plain\n\n";
    48     #print "$cmd";
     10    my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome");
    4911
    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    }
    5316
    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 "."));
    5619
    57 ##    print $output2;
    5820
    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 |")) {
    6031    binmode(PIN);
    6132
    6233    my $buf;
    6334    my $num_bytes = 0;
     35
     36    print "Content-type:application/zip\n\n";
    6437
    6538    while (read(PIN,$buf,1024)>0) {
     
    7245    my $status = $?;
    7346    }
    74 
    75 
    76 
     47    else {
     48        $gsdl_cgi->generate_error("Unable to pipe input from: $pipe_cmd");
     49    }
     50   
    7751    unlink "$col.zip";
    7852}
  • trunk/gsdl/cgi-bin/launch

    r7922 r7957  
    11#!/usr/bin/perl -w
    22
    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 }
     3use gsdlCGI;
    414
    425sub run_gencmd
    436{
    44     my ($prog,$col,$cgi) = @_;
     7    my ($prog,$col,$gsdl_cgi) = @_;
    458
    46     my @arg_keys = $cgi->param;
     9    my @arg_keys = $gsdl_cgi->param;
    4710
     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.
    4819    my $cmd = "source setup.bash > /dev/null ; $prog.pl ";
    4920
    5021    foreach my $k ( @arg_keys ) {
    51     my $arg_val = clean_param($cgi,$k);
     22    my $arg_val = $gsdl_cgi->clean_param($k);
    5223    if ($k eq "about") {
    5324        # special case (allow most things, but not quotes)
     
    5627    else {
    5728        # ensure only alphanumeric, plus a few special chars
    58         $arg_val = safe_val($arg_val);
     29        $arg_val = $gsdl_cgi->safe_val($arg_val);
    5930    }
    6031    $cmd .= " -$k";
     
    6839    my $status;
    6940
     41    print STDOUT "Content-type:text/plain\n\n";
     42
    7043    if (open(PIN,"$cmd 2>&1 |")) {
    7144    while (defined (my $line=<PIN>)) {
     
    7649    $status = $?;
    7750
    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    }
    7955    }
    8056    else {
    81     print STDOUT "Error: unable to execute cmd: $cmd\n";
     57    $gsdl_cgi->generate_error("Unable to execute cmd: $cmd");
    8258    $status = -1;
    8359    }
     
    8763
    8864
     65sub 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
    8995sub run_buildcol
    9096{
    91     my ($col,$cgi) = @_;
     97    my ($col,$gsdl_cgi) = @_;
    9298   
    9399    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("../..");
    97103    }
    98104
    99     my $status = run_gencmd("buildcol",$col,$cgi);
     105    my $status = run_gencmd("buildcol",$col,$gsdl_cgi);
    100106
    101107    if ($status == 0) {
    102108    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("../..");
    106113    }
    107114    }
    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.
    112117}
    113118
     
    115120sub run_deldir
    116121{
    117     my ($col,$cgi) = @_;
     122    my ($col,$gsdl_cgi) = @_;
    118123
    119124    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");
    123126    }
    124127
    125     chdir("collect");
     128    $gsdl_cgi->checked_chdir("collect");
    126129
    127     my $dir = clean_param($cgi,"dir");
     130    my $dir = $gsdl_cgi->clean_param("dir");
    128131    $dir = "" if ($dir eq ".");
    129132
    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("..");
    135135}
    136136
    137137sub main
    138138{
    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);
    140143
    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    }
    142148
    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);
    145152
    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");
    150154
    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);
    155157
    156158    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);
    158166    }
    159167    elsif ($cmd eq "import") {
    160     run_gencmd($cmd,$col,$cgi);
     168    run_gencmd($cmd,$col,$gsdl_cgi);
    161169    }
    162170    elsif ($cmd eq "buildcol") {
    163     run_buildcol($col,$cgi);
     171    run_buildcol($col,$gsdl_cgi);
    164172    }
    165173    elsif ($cmd eq "deldir") {
    166     run_deldir($col,$cgi);
     174    run_deldir($col,$gsdl_cgi);
    167175    }
    168176    else {
    169     print "Error: unrecognised command: '$cmd'\n";
    170     exit 1;
     177    $gsdl_cgi->generate_error("unrecognised command: '$cmd'");
    171178    }
    172179   
  • trunk/gsdl/cgi-bin/upload

    r7821 r7957  
    11#!/usr/bin/perl -w
    22
    3 require './CGI.pm';
    4 use usabcgi;
    53
    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 }
     4use gsdlCGI;
    315
    326
    337sub main
    348{
    35     my $cgi = init_cgi();
     9    my $gsdl_cgi = new gsdlCGI();
     10    my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome");
    3611
    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    }
    3816
    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
    4122    $dir = "" if (($dir eq ".") || ($dir =~ m/^\.\./));
    4223
    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");
    5125    my $zip_fname = "$col.zip";
    5226
    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    }
    5634
    5735    if (open(ZOUT,"> $zip_fname")) {
    5836   
    59     my $ZIN = $cgi->upload('zip');
     37    my $ZIN = $gsdl_cgi->upload('zip');
    6038    binmode($ZIN);
    6139
     
    7654
    7755    `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`;
    8156
    8257    unlink "$zip_fname";
    8358
    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.");
    8860    }
    8961    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");
    9363    }
    9464}
Note: See TracChangeset for help on using the changeset viewer.