diff options
Diffstat (limited to 'Bugzilla/Quantum')
-rw-r--r-- | Bugzilla/Quantum/CGI.pm | 13 | ||||
-rw-r--r-- | Bugzilla/Quantum/Plugin/Glue.pm | 3 | ||||
-rw-r--r-- | Bugzilla/Quantum/Plugin/Helpers.pm (renamed from Bugzilla/Quantum/Plugin/BasicAuth.pm) | 30 |
3 files changed, 40 insertions, 6 deletions
diff --git a/Bugzilla/Quantum/CGI.pm b/Bugzilla/Quantum/CGI.pm index 0a74f1ee5..945a87d5b 100644 --- a/Bugzilla/Quantum/CGI.pm +++ b/Bugzilla/Quantum/CGI.pm @@ -58,16 +58,20 @@ sub load_one { local *STDIN; ## no critic (local) open STDIN, '<', $stdin->path or die "STDIN @{[$stdin->path]}: $!" if -s $stdin->path; tie *STDOUT, 'Bugzilla::Quantum::Stdout', controller => $c; ## no critic (tie) + + # the finally block calls cleanup. + $c->stash->{cleanup_guard}->dismiss; try { Bugzilla->init_page(); $inner->(); } catch { - die $_ unless ref $_ eq 'ARRAY' && $_->[0] eq "EXIT\n"; + die $_ unless _is_exit($_); } finally { + my $error = shift; untie *STDOUT; - $c->finish; + $c->finish if !$error || _is_exit($error); Bugzilla->cleanup; CGI::initialize_globals(); }; @@ -157,4 +161,9 @@ sub _file_to_method { return $name; } +sub _is_exit { + my ($error) = @_; + return ref $error eq 'ARRAY' && $error->[0] eq "EXIT\n"; +} + 1; diff --git a/Bugzilla/Quantum/Plugin/Glue.pm b/Bugzilla/Quantum/Plugin/Glue.pm index a38a12657..e9d0056d0 100644 --- a/Bugzilla/Quantum/Plugin/Glue.pm +++ b/Bugzilla/Quantum/Plugin/Glue.pm @@ -14,6 +14,7 @@ use Bugzilla::Constants; use Bugzilla::Logging; use Bugzilla::RNG (); use JSON::MaybeXS qw(decode_json); +use Scope::Guard; sub register { my ( $self, $app, $conf ) = @_; @@ -42,6 +43,7 @@ sub register { } } Log::Log4perl::MDC->put( request_id => $c->req->request_id ); + $c->stash->{cleanup_guard} = Scope::Guard->new( \&Bugzilla::cleanup ); } ); @@ -72,7 +74,6 @@ sub register { or die $template->error; } ); - $app->renderer->default_handler('bugzilla'); $app->log( MojoX::Log::Log4perl::Tiny->new( logger => Log::Log4perl->get_logger( ref $app ) ) ); } diff --git a/Bugzilla/Quantum/Plugin/BasicAuth.pm b/Bugzilla/Quantum/Plugin/Helpers.pm index e17273404..0aedca338 100644 --- a/Bugzilla/Quantum/Plugin/BasicAuth.pm +++ b/Bugzilla/Quantum/Plugin/Helpers.pm @@ -4,7 +4,7 @@ # # This Source Code Form is "Incompatible With Secondary Licenses", as # defined by the Mozilla Public License, v. 2.0. -package Bugzilla::Quantum::Plugin::BasicAuth; +package Bugzilla::Quantum::Plugin::Helpers; use 5.10.1; use Mojo::Base qw(Mojolicious::Plugin); @@ -14,7 +14,7 @@ use Carp; sub register { my ( $self, $app, $conf ) = @_; - $app->renderer->add_helper( + $app->helper( basic_auth => sub { my ( $c, $realm, $auth_user, $auth_pass ) = @_; my $req = $c->req; @@ -35,6 +35,30 @@ sub register { return 1; } ); + $app->routes->add_shortcut( + static_file => sub { + my ($r, $path, $option) = @_; + my $file = $option->{file}; + my $content_type = $option->{content_type} // 'text/plain'; + unless ($file) { + $file = $path; + $file =~ s!^/!!; + } + + return $r->get($path => sub { + my ($c) = @_; + $c->res->headers->content_type($content_type); + $c->reply->file( $c->app->home->child($file) ); + }) + } + ); + $app->routes->add_shortcut( + page => sub { + my ($r, $path, $id) = @_; + + return $r->any($path)->to('CGI#page_cgi' => { id => $id }); + } + ); } -1;
\ No newline at end of file +1; |