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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3