diff options
-rw-r--r-- | Bugzilla/PSGI.pm | 42 | ||||
-rw-r--r-- | Bugzilla/Quantum.pm | 24 |
2 files changed, 66 insertions, 0 deletions
diff --git a/Bugzilla/PSGI.pm b/Bugzilla/PSGI.pm new file mode 100644 index 000000000..46352b319 --- /dev/null +++ b/Bugzilla/PSGI.pm @@ -0,0 +1,42 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. +# +# This Source Code Form is "Incompatible With Secondary Licenses", as +# defined by the Mozilla Public License, v. 2.0. + +package Bugzilla::PSGI; +use 5.10.1; +use strict; +use warnings; + +use base qw(Exporter); + +use Bugzilla::Logging; +our @EXPORT_OK = qw(compile_cgi); + +sub compile_cgi { + my ($script) = @_; + require CGI::Compile; + require CGI::Emulate::PSGI; + + my $cgi = CGI::Compile->compile($script); + my $app = CGI::Emulate::PSGI->handler( + sub { + Bugzilla::init_page(); + $cgi->(); + } + ); + return sub { + my $env = shift; + if ($env->{'psgix.cleanup'}) { + push @{ $env->{'psgix.cleanup.handler'} }, \&Bugzilla::_cleanup; + } + my $res = $app->($env); + Bugzilla::_cleanup() if not $env->{'psgix.cleanup'}; + return $res; + }; +} + + +1;
\ No newline at end of file diff --git a/Bugzilla/Quantum.pm b/Bugzilla/Quantum.pm index b5ed66760..20050131f 100644 --- a/Bugzilla/Quantum.pm +++ b/Bugzilla/Quantum.pm @@ -11,11 +11,35 @@ use Mojo::Base 'Mojolicious'; use Bugzilla::Quantum::CGI; use Bugzilla::Quantum::Template; use Bugzilla::Quantum::Legacy; +use Bugzilla::PSGI qw(compile_cgi); + +use Bugzilla (); +use Bugzilla::Constants (); +use Bugzilla::BugMail (); +use Bugzilla::CGI (); +use Bugzilla::Extension (); +use Bugzilla::Install::Requirements (); +use Bugzilla::Util (); +use Bugzilla::RNG (); sub startup { my ($self) = @_; + Bugzilla::Extension->load_all(); + Bugzilla->preload_features(); + Bugzilla->template; + $self->plugin('Bugzilla::Quantum::Plugin::Glue'); + + $self->plugin( + 'MountPSGI' => { + rewrite => 1, + '/rest' => $rest, + '/rest.cgi' => $rest, + '/jsonrpc.cgi' => compile_cgi('jsonrpc.cgi'), + '/xmlrpc.cgi' => compile_cgi('xmlrpc.cgi'), + } + ); my $r = $self->routes; $r->any( '/' )->to('legacy#index_cgi'); |