source: main/tags/2.51-fiji/gsdl/cgi-bin/launch@ 31712

Last change on this file since 31712 was 7957, checked in by davidb, 20 years ago

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

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.7 KB
Line 
1#!/usr/bin/perl -w
2
3use gsdlCGI;
4
5sub run_gencmd
6{
7 my ($prog,$col,$gsdl_cgi) = @_;
8
9 my @arg_keys = $gsdl_cgi->param;
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.
19 my $cmd = "source setup.bash > /dev/null ; $prog.pl ";
20
21 foreach my $k ( @arg_keys ) {
22 my $arg_val = $gsdl_cgi->clean_param($k);
23 if ($k eq "about") {
24 # special case (allow most things, but not quotes)
25 $arg_val =~ s/\"/"/g;
26 }
27 else {
28 # ensure only alphanumeric, plus a few special chars
29 $arg_val = $gsdl_cgi->safe_val($arg_val);
30 }
31 $cmd .= " -$k";
32 if ($arg_val ne "") {
33 $cmd .= " \"$arg_val\"";
34 }
35 }
36
37 $cmd .= " $col" if (defined $col);
38
39 my $status;
40
41 print STDOUT "Content-type:text/plain\n\n";
42
43 if (open(PIN,"$cmd 2>&1 |")) {
44 while (defined (my $line=<PIN>)) {
45 print STDOUT $line;
46 }
47 close(PIN);
48
49 $status = $?;
50
51 if ($status>0) {
52 my $exit_status = "Exit status: $status";
53 $gsdl_cgi->generate_error( "'".$cmd."' failed.\n$exit_status");
54 }
55 }
56 else {
57 $gsdl_cgi->generate_error("Unable to execute cmd: $cmd");
58 $status = -1;
59 }
60
61 return $status;
62}
63
64
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
95sub run_buildcol
96{
97 my ($col,$gsdl_cgi) = @_;
98
99 if (defined $col) {
100 $gsdl_cgi->checked_chdir("collect/$col");
101 $gsdl_cgi->rm_rf("building/*");
102 $gsdl_cgi->checked_chdir("../..");
103 }
104
105 my $status = run_gencmd("buildcol",$col,$gsdl_cgi);
106
107 if ($status == 0) {
108 if (defined $col) {
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("../..");
113 }
114 }
115 # no need to do else clause as error message will have already
116 # been generated.
117}
118
119
120sub run_deldir
121{
122 my ($col,$gsdl_cgi) = @_;
123
124 if ((!defined $col) || ($col =~ m/^\s*$/)) {
125 $gsdl_cgi->generate_error( "No collection name specified");
126 }
127
128 $gsdl_cgi->checked_chdir("collect");
129
130 my $dir = $gsdl_cgi->clean_param("dir");
131 $dir = "" if ($dir eq ".");
132
133 $gsdl_cgi->rm_rf("$col/$dir");
134 $gsdl_cgi->checked_chdir("..");
135}
136
137sub main
138{
139 my $gsdl_cgi = new gsdlCGI("+cmdline");
140 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome");
141
142 $gsdl_cgi->checked_chdir($gsdlhome);
143
144 my $cmd = $gsdl_cgi->clean_param("cmd");
145 if (!defined $cmd) {
146 $gsdl_cgi->generate_error("No command specified.");
147 }
148
149 $gsdl_cgi->delete("cmd");
150 $cmd =~ s/\..*$//;
151 $cmd = $gsdl_cgi->safe_val($cmd);
152
153 my $col = $gsdl_cgi->clean_param("c");
154
155 $gsdl_cgi->delete("c");
156 $col = $gsdl_cgi->safe_val($col);
157
158 if ($cmd eq "mkcol") {
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);
166 }
167 elsif ($cmd eq "import") {
168 run_gencmd($cmd,$col,$gsdl_cgi);
169 }
170 elsif ($cmd eq "buildcol") {
171 run_buildcol($col,$gsdl_cgi);
172 }
173 elsif ($cmd eq "deldir") {
174 run_deldir($col,$gsdl_cgi);
175 }
176 else {
177 $gsdl_cgi->generate_error("unrecognised command: '$cmd'");
178 }
179
180}
181
182&main();
183
Note: See TracBrowser for help on using the repository browser.