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

MCS Webmaster
ViewVC Help
Powered by ViewVC 1.0.3