# 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::Quantum::Plugin::Helpers; use 5.10.1; use Mojo::Base qw(Mojolicious::Plugin); use Bugzilla::Logging; use Carp; sub register { my ( $self, $app, $conf ) = @_; $app->helper( basic_auth => sub { my ( $c, $realm, $auth_user, $auth_pass ) = @_; my $req = $c->req; my ( $user, $password ) = $req->url->to_abs->userinfo =~ /^([^:]+):(.*)/; unless ( $realm && $auth_user && $auth_pass ) { croak 'basic_auth() called with missing parameters.'; } unless ( $user eq $auth_user && $password eq $auth_pass ) { WARN('username and password do not match'); $c->res->headers->www_authenticate("Basic realm=\"$realm\""); $c->res->code(401); $c->rendered; return 0; } 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;