source: main/tags/2.60/gsdl/cgi-bin/launch@ 32313

Last change on this file since 32313 was 9208, checked in by mdewsnip, 19 years ago

Changed to be executable.

  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 3.8 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 # Unix specific, need to generalise to Windows etc.
18 my $cmd = "source setup.bash > /dev/null ; $prog.pl ";
19
20 foreach my $k ( @arg_keys ) {
21 my $arg_val = $gsdl_cgi->clean_param($k);
22 if ($k eq "about") {
23 # special case (allow most things, but not quotes)
24 $arg_val =~ s/\"/"/g;
25 }
26 else {
27 # ensure only alphanumeric, plus a few special chars
28 $arg_val = $gsdl_cgi->safe_val($arg_val);
29 }
30 $cmd .= " -$k";
31 if ($arg_val ne "") {
32 $cmd .= " \"$arg_val\"";
33 }
34 }
35
36 $cmd .= " $col" if (defined $col);
37
38 my $status;
39
40 print STDOUT "Content-type:text/plain\n\n";
41
42 if (open(PIN,"$cmd 2>&1 |")) {
43 while (defined (my $line=<PIN>)) {
44 print STDOUT $line;
45 }
46 close(PIN);
47
48 $status = $?;
49
50 if ($status>0) {
51 my $exit_status = "Exit status: $status";
52 $gsdl_cgi->generate_error( "'".$cmd."' failed.\n$exit_status");
53 }
54 }
55 else {
56 $gsdl_cgi->generate_error("Unable to execute cmd: $cmd");
57 $status = -1;
58 }
59
60 return $status;
61}
62
63
64sub run_xmlinfo
65{
66 my ($cmd,$col,$gsdl_cgi) = @_;
67
68 if (defined $col) {
69 $gsdl_cgi->param(-name=>"collect",-value=>$col);
70 $col = undef;
71 }
72
73 if ($cmd eq "pluginfo") {
74 my $plug = $gsdl_cgi->clean_param("plug");
75
76 if (defined $plug) {
77 $gsdl_cgi->delete("plug");
78 $col = $gsdl_cgi->safe_val($plug);
79 }
80 }
81 elsif ($cmd eq "classinfo") {
82 my $class = $gsdl_cgi->clean_param("class");
83
84 if (defined $class) {
85 $gsdl_cgi->delete("class");
86 $col = $gsdl_cgi->safe_val($class);
87 }
88 }
89
90 return run_gencmd($cmd,$col,$gsdl_cgi);
91}
92
93
94sub run_buildcol
95{
96 my ($col,$gsdl_cgi) = @_;
97
98 if (defined $col) {
99 $gsdl_cgi->checked_chdir("collect/$col");
100 $gsdl_cgi->rm_rf("building/*");
101 $gsdl_cgi->checked_chdir("../..");
102 }
103
104 my $status = run_gencmd("buildcol",$col,$gsdl_cgi);
105
106 if ($status == 0) {
107 if (defined $col) {
108 $gsdl_cgi->checked_chdir("collect/$col");
109 $gsdl_cgi->rm_rf("index");
110 $gsdl_cgi->unix_cmd("/bin/cp -r building index");
111 $gsdl_cgi->checked_chdir("../..");
112 }
113 }
114 # no need to do else clause as error message will have already
115 # been generated.
116}
117
118
119sub run_deldir
120{
121 my ($col,$gsdl_cgi) = @_;
122
123 if ((!defined $col) || ($col =~ m/^\s*$/)) {
124 $gsdl_cgi->generate_error( "No collection name specified");
125 }
126
127 $gsdl_cgi->checked_chdir("collect");
128
129 my $dir = $gsdl_cgi->clean_param("dir");
130 $dir = "" if ($dir eq ".");
131
132 $gsdl_cgi->rm_rf("$col/$dir");
133 $gsdl_cgi->checked_chdir("..");
134
135 $gsdl_cgi->generate_ok_message("$col deleted successfully");
136}
137
138sub main
139{
140 my $gsdl_cgi = new gsdlCGI("+cmdline");
141 my $gsdlhome = $gsdl_cgi->get_config_info("gsdlhome");
142
143 $gsdl_cgi->checked_chdir($gsdlhome);
144
145 my $cmd = $gsdl_cgi->clean_param("cmd");
146 if (!defined $cmd) {
147 $gsdl_cgi->generate_error("No command specified.");
148 }
149
150 $gsdl_cgi->delete("cmd");
151 $cmd =~ s/\..*$//;
152 $cmd = $gsdl_cgi->safe_val($cmd);
153
154 my $col = $gsdl_cgi->clean_param("c");
155
156 $gsdl_cgi->delete("c");
157 $col = $gsdl_cgi->safe_val($col);
158
159 if ($cmd eq "mkcol") {
160 run_gencmd($cmd,$col,$gsdl_cgi);
161 }
162 elsif ($cmd eq "pluginfo") {
163 run_xmlinfo($cmd,$col,$gsdl_cgi);
164 }
165 elsif ($cmd eq "classinfo") {
166 run_xmlinfo($cmd,$col,$gsdl_cgi);
167 }
168 elsif ($cmd eq "import") {
169 run_gencmd($cmd,$col,$gsdl_cgi);
170 }
171 elsif ($cmd eq "buildcol") {
172 run_buildcol($col,$gsdl_cgi);
173 }
174 elsif ($cmd eq "deldir") {
175 run_deldir($col,$gsdl_cgi);
176 }
177 else {
178 $gsdl_cgi->generate_error("unrecognised command: '$cmd'");
179 }
180
181}
182
183&main();
184
Note: See TracBrowser for help on using the repository browser.