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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3