54 lines
1.3 KiB
Perl
54 lines
1.3 KiB
Perl
package Lemonldap::NG::Handler::Server::Traefik;
|
|
|
|
use strict;
|
|
use Mouse;
|
|
use Lemonldap::NG::Handler::Server::Main;
|
|
|
|
our $VERSION = '2.17.0';
|
|
|
|
extends 'Lemonldap::NG::Handler::PSGI';
|
|
|
|
sub init {
|
|
my $self = shift;
|
|
$self->api('Lemonldap::NG::Handler::Server::Main');
|
|
my $tmp = $self->SUPER::init(@_);
|
|
}
|
|
|
|
sub _run {
|
|
my $self = shift;
|
|
|
|
# Create regular _authAndTrace PSGI app
|
|
my $app = $self->psgiAdapter(
|
|
sub {
|
|
my $req = $_[0];
|
|
return $self->_authAndTrace($req);
|
|
}
|
|
);
|
|
|
|
# Middleware to set correct values for Traefik
|
|
return sub {
|
|
my $env = $_[0];
|
|
$env->{HTTP_HOST} = $env->{HTTP_X_FORWARDED_HOST};
|
|
$env->{REQUEST_URI} = $env->{HTTP_X_FORWARDED_URI};
|
|
return $app->($env);
|
|
}
|
|
}
|
|
|
|
sub handler {
|
|
my ( $self, $req ) = @_;
|
|
# See https://gitlab.ow2.org/lemonldap-ng/lemonldap-ng/-/merge_requests/480
|
|
my @convertedHdrs =
|
|
( 'Content-Length' => 0, Cookie => ( $req->env->{HTTP_COOKIE} // '' ) );
|
|
while ( my ( $k, $v ) = splice( @{ $req->{respHeaders} }, 0, 2 ) ) {
|
|
if ( $k =~ /^(?:Deleteheader\d+|Cookie)$/ ) {
|
|
next;
|
|
}
|
|
else {
|
|
push @convertedHdrs, $k, $v;
|
|
}
|
|
}
|
|
return [ 200, \@convertedHdrs, [] ];
|
|
}
|
|
|
|
1;
|