source: main/tags/2.52/gsdl/cgi-bin/launch

Last change on this file 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.