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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3