summaryrefslogtreecommitdiffstats
path: root/Bugzilla/Quantum/Plugin
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-05-21 04:00:08 +0200
committerDylan William Hardison <dylan@hardison.net>2018-06-28 22:41:56 +0200
commit889d8ad22855191773dd45e67272650d0c00f502 (patch)
treed1c9beb3b9a6aed4997e0596fc5cf178a56284b4 /Bugzilla/Quantum/Plugin
parentf5a81daeeb16c6f64475f3a48b8ea5eb0ec84c9b (diff)
downloadbugzilla-889d8ad22855191773dd45e67272650d0c00f502.tar.gz
bugzilla-889d8ad22855191773dd45e67272650d0c00f502.tar.xz
cool stuff
Diffstat (limited to 'Bugzilla/Quantum/Plugin')
-rw-r--r--Bugzilla/Quantum/Plugin/Glue.pm52
1 files changed, 47 insertions, 5 deletions
diff --git a/Bugzilla/Quantum/Plugin/Glue.pm b/Bugzilla/Quantum/Plugin/Glue.pm
index a28c2598d..abada14f8 100644
--- a/Bugzilla/Quantum/Plugin/Glue.pm
+++ b/Bugzilla/Quantum/Plugin/Glue.pm
@@ -10,8 +10,9 @@ use Mojo::Base 'Mojolicious::Plugin';
use Try::Tiny;
use Bugzilla::Constants;
-use Bugzilla::Quantum::CGI;
use Bugzilla::Quantum::Template;
+use Socket qw(AF_INET inet_aton);
+use Sys::Hostname;
sub register {
my ( $self, $app, $conf ) = @_;
@@ -46,13 +47,13 @@ sub register {
around_dispatch => sub {
my ($next, $c) = @_;
try {
- local %{ Bugzilla->request_cache } = ();
local $CGI::Compile::USE_REAL_EXIT = 0;
- # HACK, should just make i_am_cgi smarter.
- local $ENV{'SERVER_SOFTWARE'} = 1;
- Bugzilla->cgi( Bugzilla::Quantum::CGI->new(controller => $c) );
+ local %ENV = _ENV($c);
+ Bugzilla::init_page();
+ Bugzilla::request_cache->{mojo_controller} = $c;
Bugzilla->template( Bugzilla::Quantum::Template->new( controller => $c, template => $template ) );
$next->();
+ Bugzilla::_cleanup; ## no critic (private)
} catch {
die $_ unless ref $_ eq 'ARRAY' && $_->[0] eq "EXIT\n" || /\bModPerl::Util::exit\b/;
};
@@ -60,4 +61,45 @@ sub register {
);
}
+sub _ENV {
+ my ($c) = @_;
+ my $tx = $c->tx;
+ my $req = $tx->req;
+ my $headers = $req->headers;
+ my $content_length = $req->content->is_multipart ? $req->body_size : $headers->content_length;
+ my %env_headers = ( HTTP_COOKIE => '', HTTP_REFERER => '' );
+
+ for my $name ( @{ $headers->names } ) {
+ my $key = uc "http_$name";
+ $key =~ s!\W!_!g;
+ $env_headers{$key} = $headers->header($name);
+ }
+
+ if ( my $userinfo = $c->req->url->to_abs->userinfo ) {
+ $remote_user = $userinfo =~ /([^:]+)/ ? $1 : '';
+ }
+ elsif ( my $authenticate = $headers->authorization ) {
+ $remote_user = $authenticate =~ /Basic\s+(.*)/ ? b64_decode $1 : '';
+ $remote_user = $remote_user =~ /([^:]+)/ ? $1 : '';
+ }
+
+ return (
+ CONTENT_LENGTH => $content_length || 0,
+ CONTENT_TYPE => $headers->content_type || '',
+ GATEWAY_INTERFACE => 'CGI/1.1',
+ HTTPS => $req->is_secure ? 'YES' : 'NO',
+ %env_headers,
+ QUERY_STRING => $c->stash('cgi.query_string') || $req->url->query->to_string,
+ REMOTE_ADDR => $tx->remote_address,
+ REMOTE_HOST => gethostbyaddr( inet_aton( $tx->remote_address || '127.0.0.1' ), AF_INET ) || '',
+ REMOTE_PORT => $tx->remote_port,
+ REMOTE_USER => $remote_user || '',
+ REQUEST_METHOD => $req->method,
+ SCRIPT_NAME => $req->env->{SCRIPT_NAME} SERVER_NAME => hostname,
+ SERVER_PORT => $tx->local_port,
+ SERVER_PROTOCOL => $req->is_secure ? 'HTTPS' : 'HTTP', # TODO: Version is missing
+ SERVER_SOFTWARE => __PACKAGE__,
+ );
+}
+
1; \ No newline at end of file