[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.6 - (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 :     retrieve_RAST_job
27 : olson 1.6 kill_RAST_job
28 :     delete_RAST_job
29 : olson 1.2 );
30 :    
31 : olson 1.1 my %methods = map { $_ => 1 } @methods;
32 :    
33 :     use YAML;
34 :    
35 :     $| = 1;
36 :    
37 :     my $header = "Content-type: text/plain\n\n";
38 :    
39 :     my $max_requests = 5000;
40 :    
41 :     #
42 :     # If no CGI vars, assume we are invoked as a fastcgi service.
43 :     #
44 :     my $n_requests = 0;
45 :     if ($have_fcgi && $ENV{REQUEST_METHOD} eq '')
46 :     {
47 :     while ((my $cgi = new CGI::Fast()) &&
48 :     ($max_requests == 0 || $n_requests++ < $max_requests))
49 :     {
50 :     eval {
51 :     &process_request($cgi);
52 :     };
53 :     if ($@)
54 :     {
55 :     if (ref($@) ne 'ARRAY')
56 :     {
57 :     warn "code died, cgi=$cgi returning error\n";
58 :     print $cgi->header(-status => '500 error in body of cgi processing');
59 :     print $@;
60 :     }
61 :     }
62 :     endloop:
63 :     }
64 :     }
65 :     else
66 :     {
67 :     my $cgi = new CGI();
68 :     &process_request($cgi);
69 :     }
70 :    
71 :     exit;
72 :    
73 :     sub process_request
74 :     {
75 :     my($cgi) = @_;
76 :    
77 :     my $function = $cgi->param('function');
78 :     # print STDERR "got function=$function\n";
79 :    
80 :     my $arg_str = $cgi->param('args');
81 :     my @args;
82 :     if ($arg_str)
83 :     {
84 :     eval {
85 :     @args = YAML::Load($arg_str);
86 :     };
87 :     if ($@)
88 :     {
89 :     myerror($cgi, "500 bad YAML parse", "YAML parse failed");
90 :     next;
91 :     }
92 :     }
93 :    
94 :     $function or myerror($cgi, "500 missing argument", "missing function argument");
95 :    
96 :     #
97 :     # Pull username & password from the arguments and authenticate.
98 :     #
99 :    
100 :     my $rast_user = $cgi->param('username');
101 :     my $rast_password = $cgi->param('password');
102 :    
103 :     if ($rast_user eq '')
104 :     {
105 :     &myerror($cgi, '500 missing username', 'RAST username is missing');
106 :     }
107 :    
108 :     #
109 :     # Connect to the authentication database.
110 :     #
111 :    
112 :     my $dbmaster;
113 :     eval {
114 :     $dbmaster = DBMaster->new(-database => $FIG_Config::webapplication_db || "WebAppBackend",
115 :     -host => $FIG_Config::webapplication_host || "localhost",
116 :     -user => $FIG_Config::webapplication_user || "root",
117 :     -password => $FIG_Config::webapplication_password || "");
118 :     };
119 :    
120 :     #
121 :     # And evaluate username and password.
122 :     #
123 :    
124 :     my $user_obj = $dbmaster->User->init( { login => $rast_user });
125 :     if (!ref($user_obj) || !$user_obj->active)
126 :     {
127 :     &myerror($cgi, '500 invalid login', 'Invalid RAST login');
128 :     }
129 :    
130 :     if (crypt($rast_password, $user_obj->password) ne $user_obj->password)
131 :     {
132 :     &myerror($cgi, '500 invalid login', 'Invalid RAST login');
133 :     }
134 :     warn "Authenticated $rast_user\n";
135 :    
136 :     # Connect to the RAST job cache
137 :     my $rast_dbmaster = DBMaster->new(-backend => 'MySQL',
138 :     -database => $FIG_Config::rast_jobcache_db,
139 :     -host => $FIG_Config::rast_jobcache_host,
140 :     -user => $FIG_Config::rast_jobcache_user,
141 :     -password => $FIG_Config::rast_jobcache_password );
142 :    
143 :     my $rast_obj = new RAST_submission($rast_dbmaster, $dbmaster, $user_obj);
144 :    
145 :     if ($methods{$function})
146 :     {
147 :    
148 :     my @results;
149 :     eval {
150 :     @results = $rast_obj->$function(@args);
151 :     };
152 :    
153 :     if ($@)
154 :     {
155 :     myerror($cgi, '500 error in method invocation', $@);
156 :     }
157 :    
158 :     print $cgi->header();
159 : olson 1.4 my $res = YAML::Dump(@results);
160 :     #print STDERR $res;
161 :     print $res;
162 : olson 1.1
163 :     } else {
164 :     myerror($cgi, "500 invalid function", "invalid function $function\n");
165 :     }
166 :     }
167 :    
168 :     exit;
169 :    
170 :     sub get_string_param
171 :     {
172 :     my($cgi, $name) = @_;
173 :    
174 :     my $str = $cgi->param($name);
175 :     if ($str =~ /^(\S+)/)
176 :     {
177 :     return $1;
178 :     }
179 :     else
180 :     {
181 :     return undef;
182 :     }
183 :    
184 :     }
185 :    
186 :    
187 :     sub myerror
188 :     {
189 :     my($cgi, $stat, $msg) = @_;
190 :     print $cgi->header(-status => $stat);
191 :     print "$msg\n";
192 :     goto endloop;
193 :     }
194 :    
195 :    
196 :    
197 :    

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3