[Bio] / FigWebServices / rast_submit_server.cgi Repository:
ViewVC logotype

Annotation of /FigWebServices/rast_submit_server.cgi

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.7 - (view) (download)

1 : olson 1.1 use strict;
2 :     use FIG;
3 :    
4 :     my $have_fcgi;
5 :     eval {
6 :     require CGI::Fast;
7 :     $have_fcgi = 1;
8 :     };
9 :    
10 :     use Data::Dumper;
11 :     use DBMaster;
12 :     use FIG_Config;
13 :     use RAST_submission;
14 :    
15 : olson 1.4 $YAML::CompressSeries = 0;
16 :    
17 : olson 1.1 #
18 :     # This is the list of supported methods.
19 :     #
20 :    
21 : olson 1.2 my @methods = qw(
22 : olson 1.3 get_contig_ids_in_project_from_entrez
23 : olson 1.5 get_contigs_from_entrez
24 : olson 1.2 submit_RAST_job
25 :     status_of_RAST_job
26 : olson 1.6 kill_RAST_job
27 :     delete_RAST_job
28 : olson 1.2 );
29 :    
30 : olson 1.1 my %methods = map { $_ => 1 } @methods;
31 :    
32 :     use YAML;
33 :    
34 :     $| = 1;
35 :    
36 :     my $header = "Content-type: text/plain\n\n";
37 :    
38 :     my $max_requests = 5000;
39 :    
40 :     #
41 :     # If no CGI vars, assume we are invoked as a fastcgi service.
42 :     #
43 :     my $n_requests = 0;
44 :     if ($have_fcgi && $ENV{REQUEST_METHOD} eq '')
45 :     {
46 :     while ((my $cgi = new CGI::Fast()) &&
47 :     ($max_requests == 0 || $n_requests++ < $max_requests))
48 :     {
49 :     eval {
50 :     &process_request($cgi);
51 :     };
52 :     if ($@)
53 :     {
54 :     if (ref($@) ne 'ARRAY')
55 :     {
56 :     warn "code died, cgi=$cgi returning error\n";
57 :     print $cgi->header(-status => '500 error in body of cgi processing');
58 :     print $@;
59 :     }
60 :     }
61 :     endloop:
62 :     }
63 :     }
64 :     else
65 :     {
66 :     my $cgi = new CGI();
67 :     &process_request($cgi);
68 :     }
69 :    
70 :     exit;
71 :    
72 :     sub process_request
73 :     {
74 :     my($cgi) = @_;
75 :    
76 :     my $function = $cgi->param('function');
77 :     # print STDERR "got function=$function\n";
78 :    
79 :     my $arg_str = $cgi->param('args');
80 :     my @args;
81 :     if ($arg_str)
82 :     {
83 :     eval {
84 :     @args = YAML::Load($arg_str);
85 :     };
86 :     if ($@)
87 :     {
88 :     myerror($cgi, "500 bad YAML parse", "YAML parse failed");
89 :     next;
90 :     }
91 :     }
92 :    
93 :     $function or myerror($cgi, "500 missing argument", "missing function argument");
94 :    
95 :     #
96 :     # Pull username & password from the arguments and authenticate.
97 :     #
98 :    
99 :     my $rast_user = $cgi->param('username');
100 :     my $rast_password = $cgi->param('password');
101 :    
102 :     if ($rast_user eq '')
103 :     {
104 :     &myerror($cgi, '500 missing username', 'RAST username is missing');
105 :     }
106 :    
107 :     #
108 :     # Connect to the authentication database.
109 :     #
110 :    
111 :     my $dbmaster;
112 :     eval {
113 :     $dbmaster = DBMaster->new(-database => $FIG_Config::webapplication_db || "WebAppBackend",
114 :     -host => $FIG_Config::webapplication_host || "localhost",
115 :     -user => $FIG_Config::webapplication_user || "root",
116 :     -password => $FIG_Config::webapplication_password || "");
117 :     };
118 :    
119 :     #
120 :     # And evaluate username and password.
121 :     #
122 :    
123 :     my $user_obj = $dbmaster->User->init( { login => $rast_user });
124 :     if (!ref($user_obj) || !$user_obj->active)
125 :     {
126 :     &myerror($cgi, '500 invalid login', 'Invalid RAST login');
127 :     }
128 :    
129 :     if (crypt($rast_password, $user_obj->password) ne $user_obj->password)
130 :     {
131 :     &myerror($cgi, '500 invalid login', 'Invalid RAST login');
132 :     }
133 :     warn "Authenticated $rast_user\n";
134 :    
135 :     # Connect to the RAST job cache
136 :     my $rast_dbmaster = DBMaster->new(-backend => 'MySQL',
137 :     -database => $FIG_Config::rast_jobcache_db,
138 :     -host => $FIG_Config::rast_jobcache_host,
139 :     -user => $FIG_Config::rast_jobcache_user,
140 :     -password => $FIG_Config::rast_jobcache_password );
141 :    
142 :     my $rast_obj = new RAST_submission($rast_dbmaster, $dbmaster, $user_obj);
143 :    
144 : olson 1.7
145 :     #
146 :     # We handle retrieve in a different manner.
147 :     #
148 :     if ($function eq 'retrieve_RAST_job')
149 :     {
150 :     my $res;
151 :     eval {
152 :     $res = $rast_obj->retrieve_RAST_job(@args);
153 :     };
154 :    
155 :     if ($@)
156 :     {
157 :     myerror($cgi, '500 error in method invocation', $@);
158 :     }
159 :    
160 :     if ($res->{status} ne 'ok')
161 :     {
162 :     myerror($cgi, "501 retrieve failed: $res->{error_msg}");
163 :     }
164 :    
165 :     if (!open(F, "<", $res->{file}))
166 :     {
167 :     myerror($cgi, "501 could not open output file");
168 :     }
169 :    
170 :     print $cgi->header();
171 :    
172 :     my $buf;
173 :    
174 :     while (read(F, $buf, 4096))
175 :     {
176 :     print $buf;
177 :     }
178 :     close(F);
179 :     }
180 :     elsif ($methods{$function})
181 : olson 1.1 {
182 :    
183 :     my @results;
184 :     eval {
185 :     @results = $rast_obj->$function(@args);
186 :     };
187 :    
188 :     if ($@)
189 :     {
190 :     myerror($cgi, '500 error in method invocation', $@);
191 :     }
192 :    
193 :     print $cgi->header();
194 : olson 1.4 my $res = YAML::Dump(@results);
195 :     #print STDERR $res;
196 :     print $res;
197 : olson 1.1
198 :     } else {
199 :     myerror($cgi, "500 invalid function", "invalid function $function\n");
200 :     }
201 :     }
202 :    
203 :     exit;
204 :    
205 :     sub get_string_param
206 :     {
207 :     my($cgi, $name) = @_;
208 :    
209 :     my $str = $cgi->param($name);
210 :     if ($str =~ /^(\S+)/)
211 :     {
212 :     return $1;
213 :     }
214 :     else
215 :     {
216 :     return undef;
217 :     }
218 :    
219 :     }
220 :    
221 :    
222 :     sub myerror
223 :     {
224 :     my($cgi, $stat, $msg) = @_;
225 :     print $cgi->header(-status => $stat);
226 :     print "$msg\n";
227 :     goto endloop;
228 :     }
229 :    
230 :    
231 :    
232 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3