diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/RESTServer.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/RESTServer.pm index c421cfb40e5646c9e15e8cd830f335cfe8bd6da5..e17c94165968ad043e3b89b2e476b1e9ba523818 100644 --- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/RESTServer.pm +++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/RESTServer.pm @@ -209,7 +209,7 @@ sub virtualHosts { } return $self->sendJSONresponse( $req, $resp ); } - elsif ( $query =~ /^vhost(?:(?:Aliase|Http)s|Maintenance|Port)$/ ) { + elsif ( $query =~ /^vhost(?:(?:Aliase|Http)s|Maintenance|Port|Type)$/ ) { $self->lmLog( "Query for $vh/$query key", 'debug' ); # TODO: verify how this is done actually diff --git a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm index f3c5b33418a50eeaf904cef70264a7055b90da9b..cdc7b1b972c113686f9ce7fcf984bb1c01c37b69 100644 --- a/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm +++ b/lemonldap-ng-common/lib/Lemonldap/NG/Common/Conf/ReConstants.pm @@ -26,7 +26,7 @@ our $oidcOPMetaDataNodeKeys = 'oidcOPMetaData(?:Options(?:C(?:lient(?:Secret|ID) our $oidcRPMetaDataNodeKeys = 'oidcRPMetaData(?:Options(?:I(?:DToken(?:Expiration|SignAlg)|con)|(?:RedirectUri|ExtraClaim)s|AccessTokenExpiration|Client(?:Secret|ID)|BypassConsent|DisplayName|UserIDAttr)|ExportedVars)'; our $samlIDPMetaDataNodeKeys = 'samlIDPMetaData(?:Options(?:(?:Check(?:S[LS]OMessageSignatur|Audienc|Tim)|EncryptionMod|IsPassiv)e|A(?:llow(?:LoginFromIDP|ProxiedAuthn)|daptSessionUtime)|Re(?:questedAuthnContext|solutionRule|layStateURL)|S(?:ignS[LS]OMessage|toreSAMLToken|[LS]OBinding)|Force(?:Authn|UTF8)|NameIDFormat)|ExportedAttributes|XML)'; our $samlSPMetaDataNodeKeys = 'samlSPMetaData(?:Options(?:N(?:ameID(?:SessionKey|Format)|otOnOrAfterTimeout)|S(?:essionNotOnOrAfterTimeout|ignS[LS]OMessage)|(?:CheckS[LS]OMessageSignatur|OneTimeUs)e|En(?:ableIDPInitiatedURL|cryptionMode)|ForceUTF8)|ExportedAttributes|XML)'; -our $virtualHostKeys = '(?:vhost(?:(?:Aliase|Http)s|Maintenance|Port)|(?:exportedHeader|locationRule)s|post)'; +our $virtualHostKeys = '(?:vhost(?:(?:Maintenanc|Typ)e|(?:Aliase|Http)s|Port)|(?:exportedHeader|locationRule)s|post)'; our $authParameters = { adParams => [qw(ADPwdMaxAge ADPwdExpireWarning)], diff --git a/lemonldap-ng-handler/MANIFEST b/lemonldap-ng-handler/MANIFEST index 02c5f84a3cc54f302c673dba8737e11c84940052..171cb75b0bacc9e05ef14ae33a0b471abdee41ac 100644 --- a/lemonldap-ng-handler/MANIFEST +++ b/lemonldap-ng-handler/MANIFEST @@ -5,8 +5,9 @@ example/scripts/purgeLocalCache example/scripts/purgeLocalCache.cron.d lib/Lemonldap/NG/Handler.pm lib/Lemonldap/NG/Handler/ApacheMP2.pm +lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm +lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm lib/Lemonldap/NG/Handler/API/ExperimentalNginx.pm -lib/Lemonldap/NG/Handler/AuthBasic.pm lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm lib/Lemonldap/NG/Handler/Main.pm lib/Lemonldap/NG/Handler/Main/Init.pm @@ -37,7 +38,6 @@ t/12-Lemonldap-NG-Handler-Jail.t t/13-Lemonldap-NG-Handler-Fake-Safe.t t/50-Lemonldap-NG-Handler-SecureToken.t t/51-Lemonldap-NG-Handler-Zimbra.t -t/52-Lemonldap-NG-Handler-AuthBasic.t t/60-Lemonldap-NG-Handler-PSGI.t t/61-Lemonldap-NG-Handler-PSGI-Server.t t/62-Lemonldap-NG-Handler-Nginx.t diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm index 13cdcbbd1179444621c4d9006a447ddaa07a42c5..514003c78d2c9362566562b1ce6752eaa0c529e6 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2.pm @@ -1,358 +1,21 @@ package Lemonldap::NG::Handler::ApacheMP2; use strict; -use AutoLoader 'AUTOLOAD'; -use Apache2::RequestUtil; -use Apache2::RequestRec; -use Apache2::Log; -use Apache2::ServerUtil; -use Apache2::Connection; -use Apache2::RequestIO; -use Apache2::Const; -use Apache2::Filter; -use APR::Table; -use Apache2::Const -compile => - qw(FORBIDDEN HTTP_UNAUTHORIZED REDIRECT OK DECLINED DONE SERVER_ERROR AUTH_REQUIRED HTTP_SERVICE_UNAVAILABLE); -use Lemonldap::NG::Handler::Main; -use constant FORBIDDEN => Apache2::Const::FORBIDDEN; -use constant HTTP_UNAUTHORIZED => Apache2::Const::HTTP_UNAUTHORIZED; -use constant REDIRECT => Apache2::Const::REDIRECT; -use constant OK => Apache2::Const::OK; -use constant DECLINED => Apache2::Const::DECLINED; -use constant DONE => Apache2::Const::DONE; -use constant SERVER_ERROR => Apache2::Const::SERVER_ERROR; -use constant AUTH_REQUIRED => Apache2::Const::AUTH_REQUIRED; -use constant MAINTENANCE => Apache2::Const::HTTP_SERVICE_UNAVAILABLE; -use constant BUFF_LEN => 8192; - -eval { require threads::shared; }; -print STDERR - "You probably would have better perfs by enabling threads::shared\n" - if ($@); - -our @ISA = qw(Lemonldap::NG::Handler::Main); +use Lemonldap::NG::Handler::ApacheMP2::Main; our $VERSION = '2.0.0'; -our $request; # Apache2::RequestRec object for current request - # PUBLIC METHODS sub handler { - my $class; - $class = $#_ ? shift : __PACKAGE__; + shift if($#_); + my $type = Lemonldap::NG::Handler::ApacheMP2::Main->checkType(@_); + my $class = "Lemonldap::NG::Handler::ApacheMP2::$type"; + eval "require $class"; + die $@ if($@); my ($res) = $class->run(@_); return $res; } -## @rmethod protected int redirectFilter(string url, Apache2::Filter f) -# Launch the current HTTP request then redirects the user to $url. -# Used by logout_app and logout_app_sso targets -# @param $url URL to redirect the user -# @param $f Current Apache2::Filter object -# @return Constant $class->OK -sub redirectFilter { - my $class = shift; - my $url = shift; - my $f = shift; - unless ( $f->ctx ) { - - # Here, we can use Apache2 functions instead of set_header_out - # since this function is used only with Apache2. - $f->r->status( $class->REDIRECT ); - $f->r->status_line("303 See Other"); - $f->r->headers_out->unset('Location'); - $f->r->err_headers_out->set( 'Location' => $url ); - $f->ctx(1); - } - while ( $f->read( my $buffer, 1024 ) ) { - } - $class->updateStatus( $f->r, '$class->REDIRECT', - $class->datas->{ $class->tsv->{whatToTrace} }, 'filter' ); - return $class->OK; -} - -__PACKAGE__->init(); - -# INTERNAL METHODS - -## @method void thread_share(string $variable) -# try to share $variable between threads -# note: eval is needed, -# else it fails to compile if threads::shared is not loaded -# @param $variable the name of the variable to share -sub thread_share { - my ( $class, $variable ) = @_; - eval "threads::shared::share(\$variable);"; -} - -## @method void setServerSignature(string sign) -# modifies web server signature -# @param $sign String to add to server signature -sub setServerSignature { - my ( $class, $sign ) = @_; - eval { - Apache2::ServerUtil->server->push_handlers( - PerlPostConfigHandler => sub { - my ( $c, $l, $t, $s ) = @_; - $s->add_version_component($sign); - } - ); - }; -} - -sub newRequest { - my ( $class, $r ) = @_; - $request = $r; -} - -## @method void _lmLog(string $msg, string $level) -# logs message $msg to Apache logs with loglevel $level -# @param $msg string message to log -# @param $level string loglevel -sub _lmLog { - my ( $class, $msg, $level ) = @_; - - # TODO: remove the useless tag 'ApacheMP2.pm(70):' in debug logs - Apache2::ServerRec->log->$level($msg); -} - -## @method void set_user(string user) -# sets remote_user -# @param user string username -sub set_user { - my ( $class, $user ) = @_; - $request->user($user); -} - -## @method string header_in(string header) -# returns request header value -# @param header string request header -# @return request header value -sub header_in { - my ( $class, $header ) = @_; - $header ||= $class; # to use header_in as a method or as a function - return $request->headers_in->{$header}; -} - -## @method void set_header_in(hash headers) -# sets or modifies request headers -# @param headers hash containing header names => header value -sub set_header_in { - my ( $class, %headers ) = @_; - while ( my ( $h, $v ) = each %headers ) { - $request->headers_in->set( $h => $v ); - } -} - -## @method void unset_header_in(array headers) -# removes request headers -# This function looks a bit heavy: it is to ensure that if a request -# header 'Auth-User' is removed, 'Auth_User' be removed also -# @param headers array with header names to remove -sub unset_header_in { - my ( $class, @headers ) = @_; - foreach my $h1 (@headers) { - $h1 = lc $h1; - $h1 =~ s/-/_/g; - $request->headers_in->do( - sub { - my $h = shift; - my $h2 = lc $h; - $h2 =~ s/-/_/g; - $request->headers_in->unset($h) if ( $h1 eq $h2 ); - return 1; - } - ); - } -} - -## @method void set_header_out(hash headers) -# sets response headers -# @param headers hash containing header names => header value -sub set_header_out { - my ( $class, %headers ) = @_; - while ( my ( $h, $v ) = each %headers ) { - $request->err_headers_out->set( $h => $v ); - } -} - -## @method string hostname() -# returns host, as set by full URI or Host header -# @return host string Host value -sub hostname { - my $class = shift; - return $request->hostname; -} - -## @method string remote_ip -# returns client IP address -# @return IP_Addr string client IP -sub remote_ip { - my $class = shift; - my $remote_ip = ( - $request->connection->can('remote_ip') - ? $request->connection->remote_ip - : $request->connection->client_ip - ); - return $remote_ip; -} - -## @method boolean is_initial_req -# returns true unless the current request is a subrequest -# @return is_initial_req boolean -sub is_initial_req { - my $class = shift; - return $request->is_initial_req; -} - -## @method string args(string args) -# gets the query string -# @return args string Query string -sub args { - my $class = shift; - return $request->args(); -} - -## @method string uri -# returns the path portion of the URI, normalized, i.e. : -# * URL decoded (characters encoded as %XX are decoded, -# except ? in order not to merge path and query string) -# * references to relative path components "." and ".." are resolved -# * two or more adjacent slashes are merged into a single slash -# @return path portion of the URI, normalized -sub uri { - my $class = shift; - my $uri = $request->uri; - $uri =~ s#//+#/#g; - $uri =~ s#\?#%3F#g; - return $uri; -} - -## @method string uri_with_args -# returns the URI, with arguments and with path portion normalized -# @return URI with normalized path portion -sub uri_with_args { - my $class = shift; - return uri . ( $request->args ? "?" . $request->args : "" ); -} - -## @method string unparsed_uri -# returns the full original request URI, with arguments -# @return full original request URI, with arguments -sub unparsed_uri { - my $class = shift; - return $request->unparsed_uri; -} - -## @method string get_server_port -# returns the port the server is receiving the current request on -# @return port string server port -sub get_server_port { - my $class = shift; - return $request->get_server_port; -} - -## @method string method -# returns the port the server is receiving the current request on -# @return port string server port -sub method { - my $class = shift; - return $request->method; -} - -## @method void print(string data) -# write data in HTTP response body -# @param data Text to add in response body -sub print { - my ( $class, $data ) = @_; - $request->print($data); -} - 1; - -__END__ - -## @method void addToHtmlHead(string data) -# add data at end of html head -# @param data Text to add in html head -sub addToHtmlHead { - use APR::Bucket (); - use APR::Brigade (); - my ( $class, $data ) = @_; - $request->add_output_filter( - sub { - my $f = shift; - my $bb = shift; - my $ctx = $f->ctx; - - #unless ($ctx) { - # $f->r->headers_out->unset('Content-Length'); - #} - my $done = 0; - my $buffer = $ctx->{data} ? $ctx->{data} : ''; - my ( $bdata, $seen_eos ) = flatten_bb($bb); - unless ($done) { - $done = 1 - if ( $bdata =~ s/(<\/head>)/$data$1/si - or $bdata =~ s/()/$1$data/si ); - } - $buffer .= $bdata if ($bdata); - if ($seen_eos) { - my $len = length $buffer; - $f->r->headers_out->set( 'Content-Length', $len ); - $f->print($buffer) if ($buffer); - } - else { - $ctx->{data} = $buffer; - $f->ctx($ctx); - } - return OK; - } - ); -} - -sub flatten_bb { - my ($bb) = shift; - - my $seen_eos = 0; - - my @data; - for ( my $b = $bb->first ; $b ; $b = $bb->next($b) ) { - $seen_eos++, last if $b->is_eos; - $b->read( my $bdata ); - push @data, $bdata; - } - return ( join( '', @data ), $seen_eos ); -} - -## @method void setPostParams(hashref $params) -# add or modify parameters in POST request body -# @param $params hashref containing name => value -sub setPostParams { - my ( $class, $params ) = @_; - $request->add_input_filter( - sub { - my $f = shift; - my $buffer; - - # Filter only POST request body - if ( $f->r->method eq "POST" ) { - my $body; - while ( $f->read($buffer) ) { $body .= $buffer; } - while ( my ( $name, $value ) = each(%$params) ) { - $body =~ s/((^|&))$name=[^\&]*/$1$name=$value/ - or $body .= "&$name=$value"; - } - $body =~ s/^&//; - $f->print($body); - } - else { - $f->print($buffer) while ( $f->read($buffer) ); - } - return OK; - } - ); -} - diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm new file mode 100644 index 0000000000000000000000000000000000000000..7c6500491ae8cf877dd395db0fc41d562d569f43 --- /dev/null +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/AuthBasic.pm @@ -0,0 +1,14 @@ +# Auth-basic authentication with Lemonldap::NG rights management + +# This specific handler is intended to be called directly by Apache + +package Lemonldap::NG::Handler::ApacheMP2::AuthBasic; + +use strict; + +use base 'Lemonldap::NG::Handler::Lib::AuthBasic', + 'Lemonldap::NG::Handler::ApacheMP2::Main'; + +our $VERSION = '2.0.0'; + +1; diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm new file mode 100644 index 0000000000000000000000000000000000000000..74eaa82b02c0d00701c6c51731b729a06aa1ef2f --- /dev/null +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ApacheMP2/Main.pm @@ -0,0 +1,344 @@ +package Lemonldap::NG::Handler::ApacheMP2::Main; + +use strict; +use AutoLoader 'AUTOLOAD'; +use Apache2::RequestUtil; +use Apache2::RequestRec; +use Apache2::Log; +use Apache2::ServerUtil; +use Apache2::Connection; +use Apache2::RequestIO; +use Apache2::Const; +use Apache2::Filter; +use APR::Table; +use Apache2::Const -compile => + qw(FORBIDDEN HTTP_UNAUTHORIZED REDIRECT OK DECLINED DONE SERVER_ERROR AUTH_REQUIRED HTTP_SERVICE_UNAVAILABLE); +use base 'Lemonldap::NG::Handler::Main'; + +use constant FORBIDDEN => Apache2::Const::FORBIDDEN; +use constant HTTP_UNAUTHORIZED => Apache2::Const::HTTP_UNAUTHORIZED; +use constant REDIRECT => Apache2::Const::REDIRECT; +use constant OK => Apache2::Const::OK; +use constant DECLINED => Apache2::Const::DECLINED; +use constant DONE => Apache2::Const::DONE; +use constant SERVER_ERROR => Apache2::Const::SERVER_ERROR; +use constant AUTH_REQUIRED => Apache2::Const::AUTH_REQUIRED; +use constant MAINTENANCE => Apache2::Const::HTTP_SERVICE_UNAVAILABLE; +use constant BUFF_LEN => 8192; + +eval { require threads::shared; }; + +our $request; # Apache2::RequestRec object for current request + +#*run = \&Lemonldap::NG::Handler::Main::run; + +## @rmethod protected int redirectFilter(string url, Apache2::Filter f) +# Launch the current HTTP request then redirects the user to $url. +# Used by logout_app and logout_app_sso targets +# @param $url URL to redirect the user +# @param $f Current Apache2::Filter object +# @return Constant $class->OK +sub redirectFilter { + my $class = shift; + my $url = shift; + my $f = shift; + unless ( $f->ctx ) { + + # Here, we can use Apache2 functions instead of set_header_out + # since this function is used only with Apache2. + $f->r->status( $class->REDIRECT ); + $f->r->status_line("303 See Other"); + $f->r->headers_out->unset('Location'); + $f->r->err_headers_out->set( 'Location' => $url ); + $f->ctx(1); + } + while ( $f->read( my $buffer, 1024 ) ) { + } + $class->updateStatus( $f->r, '$class->REDIRECT', + $class->datas->{ $class->tsv->{whatToTrace} }, 'filter' ); + return $class->OK; +} + +__PACKAGE__->init(); + +# INTERNAL METHODS + +## @method void thread_share(string $variable) +# try to share $variable between threads +# note: eval is needed, +# else it fails to compile if threads::shared is not loaded +# @param $variable the name of the variable to share +sub thread_share { + my ( $class, $variable ) = @_; + eval "threads::shared::share(\$variable);"; +} + +## @method void setServerSignature(string sign) +# modifies web server signature +# @param $sign String to add to server signature +sub setServerSignature { + my ( $class, $sign ) = @_; + eval { + Apache2::ServerUtil->server->push_handlers( + PerlPostConfigHandler => sub { + my ( $c, $l, $t, $s ) = @_; + $s->add_version_component($sign); + } + ); + }; +} + +sub newRequest { + my ( $class, $r ) = @_; + $request = $r; +} + +## @method void _lmLog(string $msg, string $level) +# logs message $msg to Apache logs with loglevel $level +# @param $msg string message to log +# @param $level string loglevel +sub _lmLog { + my ( $class, $msg, $level ) = @_; + + # TODO: remove the useless tag 'ApacheMP2.pm(70):' in debug logs + Apache2::ServerRec->log->$level($msg); +} + +## @method void set_user(string user) +# sets remote_user +# @param user string username +sub set_user { + my ( $class, $user ) = @_; + $request->user($user); +} + +## @method string header_in(string header) +# returns request header value +# @param header string request header +# @return request header value +sub header_in { + my ( $class, $header ) = @_; + $header ||= $class; # to use header_in as a method or as a function + return $request->headers_in->{$header}; +} + +## @method void set_header_in(hash headers) +# sets or modifies request headers +# @param headers hash containing header names => header value +sub set_header_in { + my ( $class, %headers ) = @_; + while ( my ( $h, $v ) = each %headers ) { + $request->headers_in->set( $h => $v ); + } +} + +## @method void unset_header_in(array headers) +# removes request headers +# This function looks a bit heavy: it is to ensure that if a request +# header 'Auth-User' is removed, 'Auth_User' be removed also +# @param headers array with header names to remove +sub unset_header_in { + my ( $class, @headers ) = @_; + foreach my $h1 (@headers) { + $h1 = lc $h1; + $h1 =~ s/-/_/g; + $request->headers_in->do( + sub { + my $h = shift; + my $h2 = lc $h; + $h2 =~ s/-/_/g; + $request->headers_in->unset($h) if ( $h1 eq $h2 ); + return 1; + } + ); + } +} + +## @method void set_header_out(hash headers) +# sets response headers +# @param headers hash containing header names => header value +sub set_header_out { + my ( $class, %headers ) = @_; + while ( my ( $h, $v ) = each %headers ) { + $request->err_headers_out->set( $h => $v ); + } +} + +## @method string hostname() +# returns host, as set by full URI or Host header +# @return host string Host value +sub hostname { + my $class = shift; + return $request->hostname; +} + +## @method string remote_ip +# returns client IP address +# @return IP_Addr string client IP +sub remote_ip { + my $class = shift; + my $remote_ip = ( + $request->connection->can('remote_ip') + ? $request->connection->remote_ip + : $request->connection->client_ip + ); + return $remote_ip; +} + +## @method boolean is_initial_req +# returns true unless the current request is a subrequest +# @return is_initial_req boolean +sub is_initial_req { + my $class = shift; + return $request->is_initial_req; +} + +## @method string args(string args) +# gets the query string +# @return args string Query string +sub args { + my $class = shift; + return $request->args(); +} + +## @method string uri +# returns the path portion of the URI, normalized, i.e. : +# * URL decoded (characters encoded as %XX are decoded, +# except ? in order not to merge path and query string) +# * references to relative path components "." and ".." are resolved +# * two or more adjacent slashes are merged into a single slash +# @return path portion of the URI, normalized +sub uri { + my $class = shift; + my $uri = $request->uri; + $uri =~ s#//+#/#g; + $uri =~ s#\?#%3F#g; + return $uri; +} + +## @method string uri_with_args +# returns the URI, with arguments and with path portion normalized +# @return URI with normalized path portion +sub uri_with_args { + my $class = shift; + return uri . ( $request->args ? "?" . $request->args : "" ); +} + +## @method string unparsed_uri +# returns the full original request URI, with arguments +# @return full original request URI, with arguments +sub unparsed_uri { + my $class = shift; + return $request->unparsed_uri; +} + +## @method string get_server_port +# returns the port the server is receiving the current request on +# @return port string server port +sub get_server_port { + my $class = shift; + return $request->get_server_port; +} + +## @method string method +# returns the port the server is receiving the current request on +# @return port string server port +sub method { + my $class = shift; + return $request->method; +} + +## @method void print(string data) +# write data in HTTP response body +# @param data Text to add in response body +sub print { + my ( $class, $data ) = @_; + $request->print($data); +} + +1; + +__END__ + +## @method void addToHtmlHead(string data) +# add data at end of html head +# @param data Text to add in html head +sub addToHtmlHead { + use APR::Bucket (); + use APR::Brigade (); + my ( $class, $data ) = @_; + $request->add_output_filter( + sub { + my $f = shift; + my $bb = shift; + my $ctx = $f->ctx; + + #unless ($ctx) { + # $f->r->headers_out->unset('Content-Length'); + #} + my $done = 0; + my $buffer = $ctx->{data} ? $ctx->{data} : ''; + my ( $bdata, $seen_eos ) = flatten_bb($bb); + unless ($done) { + $done = 1 + if ( $bdata =~ s/(<\/head>)/$data$1/si + or $bdata =~ s/()/$1$data/si ); + } + $buffer .= $bdata if ($bdata); + if ($seen_eos) { + my $len = length $buffer; + $f->r->headers_out->set( 'Content-Length', $len ); + $f->print($buffer) if ($buffer); + } + else { + $ctx->{data} = $buffer; + $f->ctx($ctx); + } + return OK; + } + ); +} + +sub flatten_bb { + my ($bb) = shift; + + my $seen_eos = 0; + + my @data; + for ( my $b = $bb->first ; $b ; $b = $bb->next($b) ) { + $seen_eos++, last if $b->is_eos; + $b->read( my $bdata ); + push @data, $bdata; + } + return ( join( '', @data ), $seen_eos ); +} + +## @method void setPostParams(hashref $params) +# add or modify parameters in POST request body +# @param $params hashref containing name => value +sub setPostParams { + my ( $class, $params ) = @_; + $request->add_input_filter( + sub { + my $f = shift; + my $buffer; + + # Filter only POST request body + if ( $f->r->method eq "POST" ) { + my $body; + while ( $f->read($buffer) ) { $body .= $buffer; } + while ( my ( $name, $value ) = each(%$params) ) { + $body =~ s/((^|&))$name=[^\&]*/$1$name=$value/ + or $body .= "&$name=$value"; + } + $body =~ s/^&//; + $f->print($body); + } + else { + $f->print($buffer) while ( $f->read($buffer) ); + } + return OK; + } + ); +} + diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm deleted file mode 100644 index 96e822d9abc23ea6e2f50debcb4a34335d100885..0000000000000000000000000000000000000000 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/AuthBasic.pm +++ /dev/null @@ -1,65 +0,0 @@ -# Auth-basic authentication with Lemonldap::NG rights management - -# This specific handler is intended to be called directly by Apache - -package Lemonldap::NG::Handler::AuthBasic; - -use strict; -use Lemonldap::NG::Handler::ApacheMP2; -use Lemonldap::NG::Handler::Lib::AuthBasic; - -BEGIN { - our @ISA = ('Lemonldap::NG::Handler::Main'); -} - -our $VERSION = '2.0.0'; - -# PUBLIC METHODS - -sub handler { - my $class; - $class = $#_ ? shift : __PACKAGE__; - my ($res) = $class->run(@_); - return $res; -} - -# For an obscur reason, inheritance isn't possible with ApacheMP2.pm. - -*FORBIDDEN = *Lemonldap::NG::Handler::ApacheMP2::FORBIDDEN; -*HTTP_UNAUTHORIZED = *Lemonldap::NG::Handler::ApacheMP2::HTTP_UNAUTHORIZED; -*REDIRECT = *Lemonldap::NG::Handler::ApacheMP2::REDIRECT; -*OK = *Lemonldap::NG::Handler::ApacheMP2::OK; -*DECLINED = *Lemonldap::NG::Handler::ApacheMP2::DECLINED; -*DONE = *Lemonldap::NG::Handler::ApacheMP2::DONE; -*SERVER_ERROR = *Lemonldap::NG::Handler::ApacheMP2::SERVER_ERROR; -*AUTH_REQUIRED = *Lemonldap::NG::Handler::ApacheMP2::AUTH_REQUIRED; -*MAINTENANCE = *Lemonldap::NG::Handler::ApacheMP2::MAINTENANCE; - -*_lmLog = *Lemonldap::NG::Handler::ApacheMP2::_lmLog; -*addToHtmlHead = *Lemonldap::NG::Handler::ApacheMP2::addToHtmlHead; -*args = *Lemonldap::NG::Handler::ApacheMP2::args; -*flatten_bb = *Lemonldap::NG::Handler::ApacheMP2::flatten_bb; -*get_server_port = *Lemonldap::NG::Handler::ApacheMP2::get_server_port; -*header_in = *Lemonldap::NG::Handler::ApacheMP2::header_in; -*hostname = *Lemonldap::NG::Handler::ApacheMP2::hostname; -*is_initial_req = *Lemonldap::NG::Handler::ApacheMP2::is_initial_req; -*method = *Lemonldap::NG::Handler::ApacheMP2::method; -*newRequest = *Lemonldap::NG::Handler::ApacheMP2::newRequest; -*print = *Lemonldap::NG::Handler::ApacheMP2::print; -*redirectFilter = *Lemonldap::NG::Handler::ApacheMP2::redirectFilter; -*remote_ip = *Lemonldap::NG::Handler::ApacheMP2::remote_ip; -*set_header_in = *Lemonldap::NG::Handler::ApacheMP2::set_header_in; -*set_header_out = *Lemonldap::NG::Handler::ApacheMP2::set_header_out; -*set_user = *Lemonldap::NG::Handler::ApacheMP2::set_user; -*setPostParams = *Lemonldap::NG::Handler::ApacheMP2::setPostParams; -*setServerSignature = *Lemonldap::NG::Handler::ApacheMP2::setServerSignature; -*thread_share = *Lemonldap::NG::Handler::ApacheMP2::thread_share; -*unparsed_uri = *Lemonldap::NG::Handler::ApacheMP2::unparsed_uri; -*unset_header_in = *Lemonldap::NG::Handler::ApacheMP2::unset_header_in; -*uri = *Lemonldap::NG::Handler::ApacheMP2::uri; -*uri_with_args = *Lemonldap::NG::Handler::ApacheMP2::uri_with_args; -*unparsed_uri = *Lemonldap::NG::Handler::ApacheMP2::unparsed_uri; - -__PACKAGE__->init(); - -1; diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm index 844bb8a215ac3afa4cc258362a372ef59abdf797..e3c13abff2f52dd157e72235d06cd26cb267fa22 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Lib/AuthBasic.pm @@ -42,11 +42,11 @@ sub retrieveSession { # First check if session already exists return 1 - if ( $class->Lemonldap::NG::Handler::Main::Run::retrieveSession($id) ); + if ( $class->Lemonldap::NG::Handler::Main::retrieveSession($id) ); # Then ask portal to create it if ( $class->createSession($id) ) { - return $class->Lemonldap::NG::Handler::Main::Run::retrieveSession($id); + return $class->Lemonldap::NG::Handler::Main::retrieveSession($id); } else { return 0; @@ -65,15 +65,16 @@ sub createSession { $xheader .= $class->remote_ip; my $soapHeaders = HTTP::Headers->new( "X-Forwarded-For" => $xheader ); - my $soapClient = SOAP::Lite->proxy( $class->tsv->{portal}->(), - default_headers => $soapHeaders ) - ->uri('urn:Lemonldap/NG/Common/PSGI/SOAPService'); + # TODO: use adminSession or sessions + my $soapClient = SOAP::Lite->proxy( + $class->tsv->{portal}->() . '/sessions', + default_headers => $soapHeaders + )->uri('urn:Lemonldap/NG/Common/PSGI/SOAPService'); my $creds = $class->header_in('Authorization'); $creds =~ s/^Basic\s+//; my ( $user, $pwd ) = ( decode_base64($creds) =~ /^(.*?):(.*)$/ ); $class->lmLog( "AuthBasic authentication for user: $user", 'debug' ); - die 'Replace this by REST call'; my $soapRequest = $soapClient->getCookies( $user, $pwd, $id ); # Catch SOAP errors @@ -116,8 +117,7 @@ sub hideCookie { sub goToPortal { my ( $class, $url, $arg ) = @_; if ($arg) { - return $class->Lemonldap::NG::Handler::Main::Run::goToPortal( $url, - $arg ); + return $class->Lemonldap::NG::Handler::Main::goToPortal( $url, $arg ); } else { $class->set_header_out( diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm index 47842eafd38bf63a6c2d57f8732d2cce03ea8beb..b1c7b0ba159ca6998739053534460cd43cf3a3fb 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main.pm @@ -6,13 +6,6 @@ use Lemonldap::NG::Handler::Main::Reload; use Lemonldap::NG::Handler::Main::Run; use Lemonldap::NG::Handler::Main::SharedVariables; -our @ISA = qw( - Lemonldap::NG::Handler::Main::Init - Lemonldap::NG::Handler::Main::SharedVariables - Lemonldap::NG::Handler::Main::Reload - Lemonldap::NG::Handler::Main::Run -); - our $VERSION = '2.0.0'; 1; diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm index 0d15c2334575d16e96de1ae9de7050b510221ea5..0586d329aec4b9d326cb94dfbbdf5d94f7f16f12 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Init.pm @@ -1,10 +1,12 @@ package Lemonldap::NG::Handler::Main::Init; +our $VERSION = '2.0.0'; + +package Lemonldap::NG::Handler::Main; + use strict; use Lemonldap::NG::Common::Conf; -our $VERSION = '2.0.0'; - ## @imethod void init(hashRef args) # Read parameters and build the Lemonldap::NG::Common::Conf object. # @param $args hash containing parameters diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm index c2e9abc21c9bfc7785a369ead01ea0a1d5985566..0d9c6fd8253b3c0dd9ede8d4843558ed677fe3f8 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Reload.pm @@ -1,5 +1,9 @@ package Lemonldap::NG::Handler::Main::Reload; +our $VERSION = '2.0.0'; + +package Lemonldap::NG::Handler::Main; + use strict; use Lemonldap::NG::Common::Conf::Constants; #inherits use Lemonldap::NG::Common::Crypto; @@ -10,8 +14,6 @@ use Scalar::Util qw(weaken); use constant UNPROTECT => 1; use constant SKIP => 2; -our $VERSION = '2.0.0'; - our @_onReload; sub onReload { @@ -215,6 +217,12 @@ sub defaultValuesInit { } } } + if ( $conf->{vhostOptions} ) { + foreach my $vhost ( keys %{ $conf->{vhostOptions} } ) { + $class->tsv->{type}->{$vhost} = + $conf->{vhostOptions}->{$vhost}->{vhostType}; + } + } return 1; } diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm index 743fb451f2d10021a3a4af45cae22b92b4f7d0ac..28fb017e874105044246935a0c2e98c6b1007033 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Run.pm @@ -1,12 +1,15 @@ package Lemonldap::NG::Handler::Main::Run; +our $VERSION = '2.0.0'; + +package Lemonldap::NG::Handler::Main; + use strict; #use AutoLoader 'AUTOLOAD'; use MIME::Base64; use URI::Escape; use Lemonldap::NG::Common::Session; -our $VERSION = '2.0.0'; # PUBLIC METHODS @@ -45,6 +48,21 @@ sub status { return $class->OK; } +sub checkType { + my ( $class, $req ) = @_; + + $class->newRequest($req); + if ( time() - $class->lastCheck > $class->checkTime ) { + die("$class: No configuration found") + unless ( $class->checkConf ); + } + my $vhost = $class->resolveAlias; + return + ( defined $class->tsv->{type}->{$vhost} ) + ? $class->tsv->{type}->{$vhost} + : 'Main'; +} + ## @rmethod int run # Check configuration and launch Lemonldap::NG::Handler::Main::run(). # Each $checkTime, the Apache child verify if its configuration is the same @@ -56,11 +74,6 @@ sub run { my ( $class, $req, $rule, $protection ) = @_; my ( $id, $session ); - $class->newRequest($req); - if ( time() - $class->lastCheck > $class->checkTime ) { - die("$class: No configuration found") - unless ( $class->checkConf ); - } return $class->DECLINED unless ( $class->is_initial_req ); # Direct return if maintenance mode is active diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/SharedVariables.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/SharedVariables.pm index 800bcf1298e34b821bc15ce92262009968e19799..adf6ffb82b20cb2202f1d7f15600bda22877899a 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/SharedVariables.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/SharedVariables.pm @@ -1,11 +1,13 @@ package Lemonldap::NG::Handler::Main::SharedVariables; +our $VERSION = '2.0.0'; + # Since handler has no instances but only static classes, this module provides # classes properties with accessors -use strict; +package Lemonldap::NG::Handler::Main; -our $VERSION = '2.0.0'; +use strict; # Thread shared properties (if threads are available: needs to be loaded elsewhere) our $_tshv = { diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Menu.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Menu.pm index 5784edd912eadf2d2217749b5701ceb3e6984117..de8fa0faf2a9579bdc8382f5cfe56b99e53d9f32 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Menu.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Menu.pm @@ -8,8 +8,8 @@ package Lemonldap::NG::Handler::Menu; use strict; -use Lemonldap::NG::Handler::ApacheMP2 qw(:all); -use base qw(Lemonldap::NG::Handler::ApacheMP2); +use Lemonldap::NG::Handler::ApacheMP2::Main qw(:all); +use base qw(Lemonldap::NG::Handler::ApacheMP2::Main); use Apache2::Filter (); use constant BUFF_LEN => 8192; diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Base.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Base.pm index 22a4dfea18b0092ad405cd7a505b0c46ac83f76f..46416869f867e422b37dc5187e4d317bb7b55a0a 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Base.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/PSGI/Base.pm @@ -114,6 +114,9 @@ sub reload { # response is 200. sub _authAndTrace { my ( $self, $req, $noCall ) = @_; + + # TODO: handle types + my $type = $self->api->checkType($req); my ( $res, $session ) = $self->api->run( $req, $self->{rule} ); $self->portal( $self->api->tsv->{portal}->() ); $req->userData($session) if ($session); diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ZimbraPreAuth.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ZimbraPreAuth.pm index 1504840afaa29408e9196c823909987690633d9f..5a728fd42ee1fd7721e6a32ae609385dcdb12bcf 100644 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ZimbraPreAuth.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/ZimbraPreAuth.pm @@ -12,7 +12,7 @@ package Lemonldap::NG::Handler::Specific::ZimbraPreAuth; use strict; use Lemonldap::NG::Handler::ApacheMP2 qw(:all); -use base qw(Lemonldap::NG::Handler::ApacheMP2); +use base qw(Lemonldap::NG::Handler::ApacheMP2::Main); use Digest::HMAC_SHA1 qw(hmac_sha1 hmac_sha1_hex); our $VERSION = '2.0.0'; diff --git a/lemonldap-ng-handler/t/10-Lemonldap-NG-Handler-SharedConf.t b/lemonldap-ng-handler/t/10-Lemonldap-NG-Handler-SharedConf.t index e4ae48ac3c630534a8855961103409dc5f3ac94c..fb3cec0e54aca9d535a1d02b3b8866b040130527 100644 --- a/lemonldap-ng-handler/t/10-Lemonldap-NG-Handler-SharedConf.t +++ b/lemonldap-ng-handler/t/10-Lemonldap-NG-Handler-SharedConf.t @@ -5,7 +5,7 @@ # change 'tests => 1' to 'tests => last_test_to_print'; -use Test::More tests => 5; +use Test::More tests => 6; use Cwd 'abs_path'; use File::Basename; use File::Temp; @@ -55,6 +55,8 @@ my $h = 'Lemonldap::NG::Handler::Test'; ok( $h->init(), 'Initialize handler' ); +ok( $h->checkType($apacheRequest) eq 'Main', 'Get Main type'); + ok( $ret = $h->run($apacheRequest), 'run Handler with basic configuration and no cookie' ); diff --git a/lemonldap-ng-handler/t/52-Lemonldap-NG-Handler-AuthBasic.t b/lemonldap-ng-handler/t/52-Lemonldap-NG-Handler-AuthBasic.t deleted file mode 100644 index 305de36c57697b32184ab54ac9d4bb8990637238..0000000000000000000000000000000000000000 --- a/lemonldap-ng-handler/t/52-Lemonldap-NG-Handler-AuthBasic.t +++ /dev/null @@ -1,36 +0,0 @@ -# Before `make install' is performed this script should be runnable with -# `make test'. After `make install' it should work as `perl Lemonldap-NG-Handler-Proxy.t' - -######################### - -# change 'tests => 1' to 'tests => last_test_to_print'; - -use Test::More tests => 1; -use Cwd 'abs_path'; -use File::Basename; -use File::Temp; - -my $ini = File::Temp->new(); -my $dir = dirname( abs_path($0) ); - -print $ini "[all] - -[configuration] -type=File -dirName=$dir -"; - -$ini->flush(); - -use Env qw(LLNG_DEFAULTCONFFILE); -$LLNG_DEFAULTCONFFILE = $ini->filename; - -open STDERR, '>/dev/null'; - -######################### - -# Insert your test code below, the Test::More module is use()ed here so read -# its man page ( perldoc Test::More ) for help writing this test script. -use_ok('Lemonldap::NG::Handler::AuthBasic'); - -$LLNG_DEFAULTCONFFILE = undef; diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm index 79203c5547261e85f3eb0a35a1e44784e1b3eadf..9f20672c280673bd1a44b57b710c28a7b18fecc2 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm @@ -2983,6 +2983,28 @@ qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a- 'default' => -1, 'type' => 'int' }, + 'vhostType' => { + 'default' => 'Main', + 'select' => [ + { + 'k' => 'Main', + 'v' => 'Main' + }, + { + 'k' => 'Zimbra', + 'v' => 'ZimbraPreAuth' + }, + { + 'k' => 'AuthBasic', + 'v' => 'AuthBasic' + }, + { + 'k' => 'SecureToken', + 'v' => 'SecureToken' + } + ], + 'type' => 'select' + }, 'virtualHosts' => { 'type' => 'virtualHostContainer' }, diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm index 01fbd92b9eaa6781cdf83fd628cce4a7dc84318a..f3b549625413570c3b5ee26012ec595892bb848e 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/Attributes.pm @@ -1131,6 +1131,17 @@ sub attributes { vhostAliases => { type => 'text', }, + vhostType => { + type => 'select', + select => [ + { k => 'Main', v => 'Main' }, + { k => 'Zimbra', v => 'ZimbraPreAuth' }, + { k => 'AuthBasic', v => 'AuthBasic' }, + { k => 'SecureToken', v => 'SecureToken' }, + ], + default => 'Main', + documentation => 'Handler type', + }, # CAS IDP casAttr => { type => 'text', }, @@ -2277,19 +2288,19 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?: keyTest => qr/^\w+$/, test => sub { 1 }, documentation => 'Combination module description', - select => [ - { k => 'Apache', v => 'Apache' }, - { k => 'AD', v => 'Active Directory' }, - { k => 'DBI', v => 'Database (DBI)' }, - { k => 'Facebook', v => 'Facebook' }, - { k => 'Google', v => 'Google' }, - { k => 'LDAP', v => 'LDAP' }, - { k => 'Radius', v => 'Radius' }, - { k => 'SSL', v => 'SSL' }, - { k => 'Twitter', v => 'Twitter' }, - { k => 'WebID', v => 'WebID' }, - { k => 'Yubikey', v => 'Yubikey' }, - { k => 'Demo', v => 'Demonstration' }, + select => [ + { k => 'Apache', v => 'Apache' }, + { k => 'AD', v => 'Active Directory' }, + { k => 'DBI', v => 'Database (DBI)' }, + { k => 'Facebook', v => 'Facebook' }, + { k => 'Google', v => 'Google' }, + { k => 'LDAP', v => 'LDAP' }, + { k => 'Radius', v => 'Radius' }, + { k => 'SSL', v => 'SSL' }, + { k => 'Twitter', v => 'Twitter' }, + { k => 'WebID', v => 'WebID' }, + { k => 'Yubikey', v => 'Yubikey' }, + { k => 'Demo', v => 'Demonstration' }, { k => 'CAS', v => 'Central Authentication Service (CAS)' }, { k => 'OpenID', v => 'OpenID' }, { k => 'OpenIDConnect', v => 'OpenID Connect' }, diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm index 8ded254e14c6cecab56b90ac170a40cdfc399cc1..dd044bd823ce8db4086f9827b9fe0b57ef99f633 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Build/CTrees.pm @@ -25,7 +25,7 @@ sub cTrees { help => 'configvhost.html#options', nodes => [ 'vhostPort', 'vhostHttps', - 'vhostMaintenance', 'vhostAliases' + 'vhostMaintenance', 'vhostAliases', 'vhostType', ], }, ], diff --git a/lemonldap-ng-manager/site/static/js/conftree.js b/lemonldap-ng-manager/site/static/js/conftree.js index 416682249f340a28d46ff0ef05dcd545c1bf63dc..022950f6b1cb137c59fa23a9273cbba92577dac8 100644 --- a/lemonldap-ng-manager/site/static/js/conftree.js +++ b/lemonldap-ng-manager/site/static/js/conftree.js @@ -915,6 +915,31 @@ function templates(tpl,key) { "get" : tpl+"s/"+key+"/"+"vhostAliases", "id" : tpl+"s/"+key+"/"+"vhostAliases", "title" : "vhostAliases" + }, + { + "default" : "Main", + "get" : tpl+"s/"+key+"/"+"vhostType", + "id" : tpl+"s/"+key+"/"+"vhostType", + "select" : [ + { + "k" : "Main", + "v" : "Main" + }, + { + "k" : "Zimbra", + "v" : "ZimbraPreAuth" + }, + { + "k" : "AuthBasic", + "v" : "AuthBasic" + }, + { + "k" : "SecureToken", + "v" : "SecureToken" + } + ], + "title" : "vhostType", + "type" : "select" } ], "help" : "configvhost.html#options", diff --git a/lemonldap-ng-manager/site/static/js/conftree.min.js b/lemonldap-ng-manager/site/static/js/conftree.min.js index 6c9f7c06788ef38a9a83e75f0717519b165361b9..fa06208696701a38110bbae697e4c956c77000cc 100644 --- a/lemonldap-ng-manager/site/static/js/conftree.min.js +++ b/lemonldap-ng-manager/site/static/js/conftree.min.js @@ -1 +1 @@ -function templates(b,c){var d;var a=function(e){return{id:b+"s/"+(d++),title:e,get:b+"s/"+c+"/"+e}};switch(b){case"oidcOPMetaDataNode":return[{get:b+"s/"+c+"/oidcOPMetaDataJSON",id:b+"s/"+c+"/oidcOPMetaDataJSON",title:"oidcOPMetaDataJSON",type:"file"},{get:b+"s/"+c+"/oidcOPMetaDataJWKS",id:b+"s/"+c+"/oidcOPMetaDataJWKS",title:"oidcOPMetaDataJWKS",type:"file"},{cnodes:b+"s/"+c+"/oidcOPMetaDataExportedVars","default":[{data:"name",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/cn",title:"cn",type:"keyText"},{data:"email",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/mail",title:"mail",type:"keyText"},{data:"family_name",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/sn",title:"sn",type:"keyText"},{data:"sub",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/uid",title:"uid",type:"keyText"}],id:b+"s/"+c+"/oidcOPMetaDataExportedVars",title:"oidcOPMetaDataExportedVars",type:"keyTextContainer"},{_nodes:[{_nodes:[{get:b+"s/"+c+"/oidcOPMetaDataOptionsConfigurationURI",id:b+"s/"+c+"/oidcOPMetaDataOptionsConfigurationURI",title:"oidcOPMetaDataOptionsConfigurationURI"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsJWKSTimeout",id:b+"s/"+c+"/oidcOPMetaDataOptionsJWKSTimeout",title:"oidcOPMetaDataOptionsJWKSTimeout",type:"int"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsClientID",id:b+"s/"+c+"/oidcOPMetaDataOptionsClientID",title:"oidcOPMetaDataOptionsClientID"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsClientSecret",id:b+"s/"+c+"/oidcOPMetaDataOptionsClientSecret",title:"oidcOPMetaDataOptionsClientSecret",type:"password"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsStoreIDToken",id:b+"s/"+c+"/oidcOPMetaDataOptionsStoreIDToken",title:"oidcOPMetaDataOptionsStoreIDToken",type:"bool"}],id:"oidcOPMetaDataOptionsConfiguration",title:"oidcOPMetaDataOptionsConfiguration",type:"simpleInputContainer"},{_nodes:[{"default":"openid profile",get:b+"s/"+c+"/oidcOPMetaDataOptionsScope",id:b+"s/"+c+"/oidcOPMetaDataOptionsScope",title:"oidcOPMetaDataOptionsScope"},{"default":"",get:b+"s/"+c+"/oidcOPMetaDataOptionsDisplay",id:b+"s/"+c+"/oidcOPMetaDataOptionsDisplay",select:[{k:"",v:""},{k:"page",v:"page"},{k:"popup",v:"popup"},{k:"touch",v:"touch"},{k:"wap",v:"wap"}],title:"oidcOPMetaDataOptionsDisplay",type:"select"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsPrompt",id:b+"s/"+c+"/oidcOPMetaDataOptionsPrompt",title:"oidcOPMetaDataOptionsPrompt"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsMaxAge",id:b+"s/"+c+"/oidcOPMetaDataOptionsMaxAge",title:"oidcOPMetaDataOptionsMaxAge",type:"int"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsUiLocales",id:b+"s/"+c+"/oidcOPMetaDataOptionsUiLocales",title:"oidcOPMetaDataOptionsUiLocales"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsAcrValues",id:b+"s/"+c+"/oidcOPMetaDataOptionsAcrValues",title:"oidcOPMetaDataOptionsAcrValues"},{"default":"client_secret_post",get:b+"s/"+c+"/oidcOPMetaDataOptionsTokenEndpointAuthMethod",id:b+"s/"+c+"/oidcOPMetaDataOptionsTokenEndpointAuthMethod",select:[{k:"client_secret_post",v:"client_secret_post"},{k:"client_secret_basic",v:"client_secret_basic"}],title:"oidcOPMetaDataOptionsTokenEndpointAuthMethod",type:"select"},{"default":1,get:b+"s/"+c+"/oidcOPMetaDataOptionsCheckJWTSignature",id:b+"s/"+c+"/oidcOPMetaDataOptionsCheckJWTSignature",title:"oidcOPMetaDataOptionsCheckJWTSignature",type:"bool"},{"default":30,get:b+"s/"+c+"/oidcOPMetaDataOptionsIDTokenMaxAge",id:b+"s/"+c+"/oidcOPMetaDataOptionsIDTokenMaxAge",title:"oidcOPMetaDataOptionsIDTokenMaxAge",type:"int"},{"default":1,get:b+"s/"+c+"/oidcOPMetaDataOptionsUseNonce",id:b+"s/"+c+"/oidcOPMetaDataOptionsUseNonce",title:"oidcOPMetaDataOptionsUseNonce",type:"bool"}],id:"oidcOPMetaDataOptionsProtocol",title:"oidcOPMetaDataOptionsProtocol",type:"simpleInputContainer"},{_nodes:[{get:b+"s/"+c+"/oidcOPMetaDataOptionsDisplayName",id:b+"s/"+c+"/oidcOPMetaDataOptionsDisplayName",title:"oidcOPMetaDataOptionsDisplayName"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsIcon",id:b+"s/"+c+"/oidcOPMetaDataOptionsIcon",title:"oidcOPMetaDataOptionsIcon"}],id:"oidcOPMetaDataOptionsDisplayParams",title:"oidcOPMetaDataOptionsDisplayParams",type:"simpleInputContainer"}],id:"oidcOPMetaDataOptions",title:"oidcOPMetaDataOptions"}];case"oidcRPMetaDataNode":return[{cnodes:b+"s/"+c+"/oidcRPMetaDataExportedVars","default":[{data:"mail",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/email",title:"email",type:"keyText"},{data:"sn",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/family_name",title:"family_name",type:"keyText"},{data:"cn",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/name",title:"name",type:"keyText"}],id:b+"s/"+c+"/oidcRPMetaDataExportedVars",title:"oidcRPMetaDataExportedVars",type:"keyTextContainer"},{_nodes:[{_nodes:[{get:b+"s/"+c+"/oidcRPMetaDataOptionsClientID",id:b+"s/"+c+"/oidcRPMetaDataOptionsClientID",title:"oidcRPMetaDataOptionsClientID"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsClientSecret",id:b+"s/"+c+"/oidcRPMetaDataOptionsClientSecret",title:"oidcRPMetaDataOptionsClientSecret",type:"password"}],id:"oidcRPMetaDataOptionsAuthentication",title:"oidcRPMetaDataOptionsAuthentication",type:"simpleInputContainer"},{_nodes:[{get:b+"s/"+c+"/oidcRPMetaDataOptionsDisplayName",id:b+"s/"+c+"/oidcRPMetaDataOptionsDisplayName",title:"oidcRPMetaDataOptionsDisplayName"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsIcon",id:b+"s/"+c+"/oidcRPMetaDataOptionsIcon",title:"oidcRPMetaDataOptionsIcon"}],id:"oidcRPMetaDataOptionsDisplay",title:"oidcRPMetaDataOptionsDisplay",type:"simpleInputContainer"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsUserIDAttr",id:b+"s/"+c+"/oidcRPMetaDataOptionsUserIDAttr",title:"oidcRPMetaDataOptionsUserIDAttr"},{"default":"HS512",get:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenSignAlg",id:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenSignAlg",select:[{k:"none",v:"None"},{k:"HS256",v:"HS256"},{k:"HS384",v:"HS384"},{k:"HS512",v:"HS512"},{k:"RS256",v:"RS256"},{k:"RS384",v:"RS384"},{k:"RS512",v:"RS512"}],title:"oidcRPMetaDataOptionsIDTokenSignAlg",type:"select"},{"default":3600,get:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenExpiration",id:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenExpiration",title:"oidcRPMetaDataOptionsIDTokenExpiration",type:"int"},{"default":3600,get:b+"s/"+c+"/oidcRPMetaDataOptionsAccessTokenExpiration",id:b+"s/"+c+"/oidcRPMetaDataOptionsAccessTokenExpiration",title:"oidcRPMetaDataOptionsAccessTokenExpiration",type:"int"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsRedirectUris",id:b+"s/"+c+"/oidcRPMetaDataOptionsRedirectUris",title:"oidcRPMetaDataOptionsRedirectUris"},{"default":0,get:b+"s/"+c+"/oidcRPMetaDataOptionsBypassConsent",id:b+"s/"+c+"/oidcRPMetaDataOptionsBypassConsent",title:"oidcRPMetaDataOptionsBypassConsent",type:"bool"}],id:"oidcRPMetaDataOptions",title:"oidcRPMetaDataOptions"},{cnodes:b+"s/"+c+"/oidcRPMetaDataOptionsExtraClaims","default":[],id:b+"s/"+c+"/oidcRPMetaDataOptionsExtraClaims",title:"oidcRPMetaDataOptionsExtraClaims",type:"keyTextContainer"}];case"samlIDPMetaDataNode":return[{get:b+"s/"+c+"/samlIDPMetaDataXML",id:b+"s/"+c+"/samlIDPMetaDataXML",title:"samlIDPMetaDataXML",type:"file"},{cnodes:b+"s/"+c+"/samlIDPMetaDataExportedAttributes","default":[],help:"authsaml.html#exported_attributes",id:b+"s/"+c+"/samlIDPMetaDataExportedAttributes",title:"samlIDPMetaDataExportedAttributes",type:"samlAttributeContainer"},{_nodes:[{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsResolutionRule",id:b+"s/"+c+"/samlIDPMetaDataOptionsResolutionRule",title:"samlIDPMetaDataOptionsResolutionRule",type:"longtext"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsNameIDFormat",id:b+"s/"+c+"/samlIDPMetaDataOptionsNameIDFormat",select:[{k:"",v:""},{k:"unspecified",v:"Unspecified"},{k:"email",v:"Email"},{k:"x509",v:"X509 certificate"},{k:"windows",v:"Windows"},{k:"kerberos",v:"Kerberos"},{k:"entity",v:"Entity"},{k:"persistent",v:"Persistent"},{k:"transient",v:"Transient"},{k:"encrypted",v:"Encrypted"}],title:"samlIDPMetaDataOptionsNameIDFormat",type:"select"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsForceAuthn",id:b+"s/"+c+"/samlIDPMetaDataOptionsForceAuthn",title:"samlIDPMetaDataOptionsForceAuthn",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsIsPassive",id:b+"s/"+c+"/samlIDPMetaDataOptionsIsPassive",title:"samlIDPMetaDataOptionsIsPassive",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAllowProxiedAuthn",id:b+"s/"+c+"/samlIDPMetaDataOptionsAllowProxiedAuthn",title:"samlIDPMetaDataOptionsAllowProxiedAuthn",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAllowLoginFromIDP",id:b+"s/"+c+"/samlIDPMetaDataOptionsAllowLoginFromIDP",title:"samlIDPMetaDataOptionsAllowLoginFromIDP",type:"bool"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsRequestedAuthnContext",id:b+"s/"+c+"/samlIDPMetaDataOptionsRequestedAuthnContext",select:[{k:"",v:""},{k:"kerberos",v:"Kerberos"},{k:"password-protected-transport",v:"Password protected transport"},{k:"password",v:"Password"},{k:"tls-client",v:"TLS client certificate"}],title:"samlIDPMetaDataOptionsRequestedAuthnContext",type:"select"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsRelayStateURL",id:b+"s/"+c+"/samlIDPMetaDataOptionsRelayStateURL",title:"samlIDPMetaDataOptionsRelayStateURL",type:"bool"}],help:"authsaml.html#options",id:"samlIDPMetaDataOptions",title:"samlIDPMetaDataOptions",type:"simpleInputContainer"},{_nodes:[{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAdaptSessionUtime",id:b+"s/"+c+"/samlIDPMetaDataOptionsAdaptSessionUtime",title:"samlIDPMetaDataOptionsAdaptSessionUtime",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsForceUTF8",id:b+"s/"+c+"/samlIDPMetaDataOptionsForceUTF8",title:"samlIDPMetaDataOptionsForceUTF8",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsStoreSAMLToken",id:b+"s/"+c+"/samlIDPMetaDataOptionsStoreSAMLToken",title:"samlIDPMetaDataOptionsStoreSAMLToken",type:"bool"}],id:"samlIDPMetaDataOptionsSession",title:"samlIDPMetaDataOptionsSession",type:"simpleInputContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/samlIDPMetaDataOptionsSignSSOMessage",id:b+"s/"+c+"/samlIDPMetaDataOptionsSignSSOMessage",title:"samlIDPMetaDataOptionsSignSSOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSSOMessageSignature",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSSOMessageSignature",title:"samlIDPMetaDataOptionsCheckSSOMessageSignature",type:"bool"},{"default":-1,get:b+"s/"+c+"/samlIDPMetaDataOptionsSignSLOMessage",id:b+"s/"+c+"/samlIDPMetaDataOptionsSignSLOMessage",title:"samlIDPMetaDataOptionsSignSLOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSLOMessageSignature",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSLOMessageSignature",title:"samlIDPMetaDataOptionsCheckSLOMessageSignature",type:"bool"}],id:"samlIDPMetaDataOptionsSignature",title:"samlIDPMetaDataOptionsSignature",type:"simpleInputContainer"},{_nodes:[{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsSSOBinding",id:b+"s/"+c+"/samlIDPMetaDataOptionsSSOBinding",select:[{k:"",v:""},{k:"http-post",v:"POST"},{k:"http-redirect",v:"Redirect"},{k:"artifact-get",v:"Artifact GET"}],title:"samlIDPMetaDataOptionsSSOBinding",type:"select"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsSLOBinding",id:b+"s/"+c+"/samlIDPMetaDataOptionsSLOBinding",select:[{k:"",v:""},{k:"http-post",v:"POST"},{k:"http-redirect",v:"Redirect"},{k:"http-soap",v:"SOAP"}],title:"samlIDPMetaDataOptionsSLOBinding",type:"select"}],id:"samlIDPMetaDataOptionsBinding",title:"samlIDPMetaDataOptionsBinding",type:"simpleInputContainer"},{_nodes:[{"default":"none",get:b+"s/"+c+"/samlIDPMetaDataOptionsEncryptionMode",id:b+"s/"+c+"/samlIDPMetaDataOptionsEncryptionMode",select:[{k:"none",v:"None"},{k:"nameid",v:"Name ID"},{k:"assertion",v:"Assertion"}],title:"samlIDPMetaDataOptionsEncryptionMode",type:"select"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckTime",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckTime",title:"samlIDPMetaDataOptionsCheckTime",type:"bool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckAudience",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckAudience",title:"samlIDPMetaDataOptionsCheckAudience",type:"bool"}],id:"samlIDPMetaDataOptionsSecurity",title:"samlIDPMetaDataOptionsSecurity",type:"simpleInputContainer"}];case"samlSPMetaDataNode":return[{get:b+"s/"+c+"/samlSPMetaDataXML",id:b+"s/"+c+"/samlSPMetaDataXML",title:"samlSPMetaDataXML",type:"file"},{cnodes:b+"s/"+c+"/samlSPMetaDataExportedAttributes","default":[],help:"idpsaml.html#exported_attributes",id:b+"s/"+c+"/samlSPMetaDataExportedAttributes",title:"samlSPMetaDataExportedAttributes",type:"samlAttributeContainer"},{_nodes:[{_nodes:[{"default":"",get:b+"s/"+c+"/samlSPMetaDataOptionsNameIDFormat",id:b+"s/"+c+"/samlSPMetaDataOptionsNameIDFormat",select:[{k:"",v:""},{k:"unspecified",v:"Unspecified"},{k:"email",v:"Email"},{k:"x509",v:"X509 certificate"},{k:"windows",v:"Windows"},{k:"kerberos",v:"Kerberos"},{k:"entity",v:"Entity"},{k:"persistent",v:"Persistent"},{k:"transient",v:"Transient"},{k:"encrypted",v:"Encrypted"}],title:"samlSPMetaDataOptionsNameIDFormat",type:"select"},{get:b+"s/"+c+"/samlSPMetaDataOptionsNameIDSessionKey",id:b+"s/"+c+"/samlSPMetaDataOptionsNameIDSessionKey",title:"samlSPMetaDataOptionsNameIDSessionKey"},{"default":0,get:b+"s/"+c+"/samlSPMetaDataOptionsOneTimeUse",id:b+"s/"+c+"/samlSPMetaDataOptionsOneTimeUse",title:"samlSPMetaDataOptionsOneTimeUse",type:"bool"},{"default":72000,get:b+"s/"+c+"/samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",id:b+"s/"+c+"/samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",title:"samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",type:"int"},{"default":72000,get:b+"s/"+c+"/samlSPMetaDataOptionsNotOnOrAfterTimeout",id:b+"s/"+c+"/samlSPMetaDataOptionsNotOnOrAfterTimeout",title:"samlSPMetaDataOptionsNotOnOrAfterTimeout",type:"int"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsForceUTF8",id:b+"s/"+c+"/samlSPMetaDataOptionsForceUTF8",title:"samlSPMetaDataOptionsForceUTF8",type:"bool"}],id:"samlSPMetaDataOptionsAuthnResponse",title:"samlSPMetaDataOptionsAuthnResponse",type:"simpleInputContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/samlSPMetaDataOptionsSignSSOMessage",id:b+"s/"+c+"/samlSPMetaDataOptionsSignSSOMessage",title:"samlSPMetaDataOptionsSignSSOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsCheckSSOMessageSignature",id:b+"s/"+c+"/samlSPMetaDataOptionsCheckSSOMessageSignature",title:"samlSPMetaDataOptionsCheckSSOMessageSignature",type:"bool"},{"default":-1,get:b+"s/"+c+"/samlSPMetaDataOptionsSignSLOMessage",id:b+"s/"+c+"/samlSPMetaDataOptionsSignSLOMessage",title:"samlSPMetaDataOptionsSignSLOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsCheckSLOMessageSignature",id:b+"s/"+c+"/samlSPMetaDataOptionsCheckSLOMessageSignature",title:"samlSPMetaDataOptionsCheckSLOMessageSignature",type:"bool"}],id:"samlSPMetaDataOptionsSignature",title:"samlSPMetaDataOptionsSignature",type:"simpleInputContainer"},{_nodes:[{"default":"none",get:b+"s/"+c+"/samlSPMetaDataOptionsEncryptionMode",id:b+"s/"+c+"/samlSPMetaDataOptionsEncryptionMode",select:[{k:"none",v:"None"},{k:"nameid",v:"Name ID"},{k:"assertion",v:"Assertion"}],title:"samlSPMetaDataOptionsEncryptionMode",type:"select"},{"default":0,get:b+"s/"+c+"/samlSPMetaDataOptionsEnableIDPInitiatedURL",id:b+"s/"+c+"/samlSPMetaDataOptionsEnableIDPInitiatedURL",title:"samlSPMetaDataOptionsEnableIDPInitiatedURL",type:"bool"}],id:"samlSPMetaDataOptionsSecurity",title:"samlSPMetaDataOptionsSecurity",type:"simpleInputContainer"}],help:"idpsaml.html#options",id:"samlSPMetaDataOptions",title:"samlSPMetaDataOptions"}];case"virtualHost":return[{cnodes:b+"s/"+c+"/locationRules","default":[{data:"deny",id:b+"s/"+c+"/locationRules/default",re:"default",title:"default",type:"rule"}],help:"writingrulesand_headers.html#rules",id:b+"s/"+c+"/locationRules",title:"locationRules",type:"ruleContainer"},{cnodes:b+"s/"+c+"/exportedHeaders",help:"writingrulesand_headers.html#headers",id:b+"s/"+c+"/exportedHeaders",title:"exportedHeaders",type:"keyTextContainer"},{cnodes:b+"s/"+c+"/post",help:"formreplay.html",id:b+"s/"+c+"/post",title:"post",type:"postContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/vhostPort",id:b+"s/"+c+"/vhostPort",title:"vhostPort",type:"int"},{"default":-1,get:b+"s/"+c+"/vhostHttps",id:b+"s/"+c+"/vhostHttps",title:"vhostHttps",type:"trool"},{"default":0,get:b+"s/"+c+"/vhostMaintenance",id:b+"s/"+c+"/vhostMaintenance",title:"vhostMaintenance",type:"bool"},{get:b+"s/"+c+"/vhostAliases",id:b+"s/"+c+"/vhostAliases",title:"vhostAliases"}],help:"configvhost.html#options",id:"vhostOptions",title:"vhostOptions"}];default:return[]}}function setScopeVars(a){a.portal=a.data[0]._nodes[0]._nodes[0];a.getKey(a.portal);a.domain=a.data[0]._nodes[4]._nodes[1];a.getKey(a.domain)}; \ No newline at end of file +function templates(b,c){var d;var a=function(e){return{id:b+"s/"+(d++),title:e,get:b+"s/"+c+"/"+e}};switch(b){case"oidcOPMetaDataNode":return[{get:b+"s/"+c+"/oidcOPMetaDataJSON",id:b+"s/"+c+"/oidcOPMetaDataJSON",title:"oidcOPMetaDataJSON",type:"file"},{get:b+"s/"+c+"/oidcOPMetaDataJWKS",id:b+"s/"+c+"/oidcOPMetaDataJWKS",title:"oidcOPMetaDataJWKS",type:"file"},{cnodes:b+"s/"+c+"/oidcOPMetaDataExportedVars","default":[{data:"name",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/cn",title:"cn",type:"keyText"},{data:"email",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/mail",title:"mail",type:"keyText"},{data:"family_name",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/sn",title:"sn",type:"keyText"},{data:"sub",id:b+"s/"+c+"/oidcOPMetaDataExportedVars/uid",title:"uid",type:"keyText"}],id:b+"s/"+c+"/oidcOPMetaDataExportedVars",title:"oidcOPMetaDataExportedVars",type:"keyTextContainer"},{_nodes:[{_nodes:[{get:b+"s/"+c+"/oidcOPMetaDataOptionsConfigurationURI",id:b+"s/"+c+"/oidcOPMetaDataOptionsConfigurationURI",title:"oidcOPMetaDataOptionsConfigurationURI"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsJWKSTimeout",id:b+"s/"+c+"/oidcOPMetaDataOptionsJWKSTimeout",title:"oidcOPMetaDataOptionsJWKSTimeout",type:"int"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsClientID",id:b+"s/"+c+"/oidcOPMetaDataOptionsClientID",title:"oidcOPMetaDataOptionsClientID"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsClientSecret",id:b+"s/"+c+"/oidcOPMetaDataOptionsClientSecret",title:"oidcOPMetaDataOptionsClientSecret",type:"password"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsStoreIDToken",id:b+"s/"+c+"/oidcOPMetaDataOptionsStoreIDToken",title:"oidcOPMetaDataOptionsStoreIDToken",type:"bool"}],id:"oidcOPMetaDataOptionsConfiguration",title:"oidcOPMetaDataOptionsConfiguration",type:"simpleInputContainer"},{_nodes:[{"default":"openid profile",get:b+"s/"+c+"/oidcOPMetaDataOptionsScope",id:b+"s/"+c+"/oidcOPMetaDataOptionsScope",title:"oidcOPMetaDataOptionsScope"},{"default":"",get:b+"s/"+c+"/oidcOPMetaDataOptionsDisplay",id:b+"s/"+c+"/oidcOPMetaDataOptionsDisplay",select:[{k:"",v:""},{k:"page",v:"page"},{k:"popup",v:"popup"},{k:"touch",v:"touch"},{k:"wap",v:"wap"}],title:"oidcOPMetaDataOptionsDisplay",type:"select"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsPrompt",id:b+"s/"+c+"/oidcOPMetaDataOptionsPrompt",title:"oidcOPMetaDataOptionsPrompt"},{"default":0,get:b+"s/"+c+"/oidcOPMetaDataOptionsMaxAge",id:b+"s/"+c+"/oidcOPMetaDataOptionsMaxAge",title:"oidcOPMetaDataOptionsMaxAge",type:"int"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsUiLocales",id:b+"s/"+c+"/oidcOPMetaDataOptionsUiLocales",title:"oidcOPMetaDataOptionsUiLocales"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsAcrValues",id:b+"s/"+c+"/oidcOPMetaDataOptionsAcrValues",title:"oidcOPMetaDataOptionsAcrValues"},{"default":"client_secret_post",get:b+"s/"+c+"/oidcOPMetaDataOptionsTokenEndpointAuthMethod",id:b+"s/"+c+"/oidcOPMetaDataOptionsTokenEndpointAuthMethod",select:[{k:"client_secret_post",v:"client_secret_post"},{k:"client_secret_basic",v:"client_secret_basic"}],title:"oidcOPMetaDataOptionsTokenEndpointAuthMethod",type:"select"},{"default":1,get:b+"s/"+c+"/oidcOPMetaDataOptionsCheckJWTSignature",id:b+"s/"+c+"/oidcOPMetaDataOptionsCheckJWTSignature",title:"oidcOPMetaDataOptionsCheckJWTSignature",type:"bool"},{"default":30,get:b+"s/"+c+"/oidcOPMetaDataOptionsIDTokenMaxAge",id:b+"s/"+c+"/oidcOPMetaDataOptionsIDTokenMaxAge",title:"oidcOPMetaDataOptionsIDTokenMaxAge",type:"int"},{"default":1,get:b+"s/"+c+"/oidcOPMetaDataOptionsUseNonce",id:b+"s/"+c+"/oidcOPMetaDataOptionsUseNonce",title:"oidcOPMetaDataOptionsUseNonce",type:"bool"}],id:"oidcOPMetaDataOptionsProtocol",title:"oidcOPMetaDataOptionsProtocol",type:"simpleInputContainer"},{_nodes:[{get:b+"s/"+c+"/oidcOPMetaDataOptionsDisplayName",id:b+"s/"+c+"/oidcOPMetaDataOptionsDisplayName",title:"oidcOPMetaDataOptionsDisplayName"},{get:b+"s/"+c+"/oidcOPMetaDataOptionsIcon",id:b+"s/"+c+"/oidcOPMetaDataOptionsIcon",title:"oidcOPMetaDataOptionsIcon"}],id:"oidcOPMetaDataOptionsDisplayParams",title:"oidcOPMetaDataOptionsDisplayParams",type:"simpleInputContainer"}],id:"oidcOPMetaDataOptions",title:"oidcOPMetaDataOptions"}];case"oidcRPMetaDataNode":return[{cnodes:b+"s/"+c+"/oidcRPMetaDataExportedVars","default":[{data:"mail",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/email",title:"email",type:"keyText"},{data:"sn",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/family_name",title:"family_name",type:"keyText"},{data:"cn",id:b+"s/"+c+"/oidcRPMetaDataExportedVars/name",title:"name",type:"keyText"}],id:b+"s/"+c+"/oidcRPMetaDataExportedVars",title:"oidcRPMetaDataExportedVars",type:"keyTextContainer"},{_nodes:[{_nodes:[{get:b+"s/"+c+"/oidcRPMetaDataOptionsClientID",id:b+"s/"+c+"/oidcRPMetaDataOptionsClientID",title:"oidcRPMetaDataOptionsClientID"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsClientSecret",id:b+"s/"+c+"/oidcRPMetaDataOptionsClientSecret",title:"oidcRPMetaDataOptionsClientSecret",type:"password"}],id:"oidcRPMetaDataOptionsAuthentication",title:"oidcRPMetaDataOptionsAuthentication",type:"simpleInputContainer"},{_nodes:[{get:b+"s/"+c+"/oidcRPMetaDataOptionsDisplayName",id:b+"s/"+c+"/oidcRPMetaDataOptionsDisplayName",title:"oidcRPMetaDataOptionsDisplayName"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsIcon",id:b+"s/"+c+"/oidcRPMetaDataOptionsIcon",title:"oidcRPMetaDataOptionsIcon"}],id:"oidcRPMetaDataOptionsDisplay",title:"oidcRPMetaDataOptionsDisplay",type:"simpleInputContainer"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsUserIDAttr",id:b+"s/"+c+"/oidcRPMetaDataOptionsUserIDAttr",title:"oidcRPMetaDataOptionsUserIDAttr"},{"default":"HS512",get:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenSignAlg",id:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenSignAlg",select:[{k:"none",v:"None"},{k:"HS256",v:"HS256"},{k:"HS384",v:"HS384"},{k:"HS512",v:"HS512"},{k:"RS256",v:"RS256"},{k:"RS384",v:"RS384"},{k:"RS512",v:"RS512"}],title:"oidcRPMetaDataOptionsIDTokenSignAlg",type:"select"},{"default":3600,get:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenExpiration",id:b+"s/"+c+"/oidcRPMetaDataOptionsIDTokenExpiration",title:"oidcRPMetaDataOptionsIDTokenExpiration",type:"int"},{"default":3600,get:b+"s/"+c+"/oidcRPMetaDataOptionsAccessTokenExpiration",id:b+"s/"+c+"/oidcRPMetaDataOptionsAccessTokenExpiration",title:"oidcRPMetaDataOptionsAccessTokenExpiration",type:"int"},{get:b+"s/"+c+"/oidcRPMetaDataOptionsRedirectUris",id:b+"s/"+c+"/oidcRPMetaDataOptionsRedirectUris",title:"oidcRPMetaDataOptionsRedirectUris"},{"default":0,get:b+"s/"+c+"/oidcRPMetaDataOptionsBypassConsent",id:b+"s/"+c+"/oidcRPMetaDataOptionsBypassConsent",title:"oidcRPMetaDataOptionsBypassConsent",type:"bool"}],id:"oidcRPMetaDataOptions",title:"oidcRPMetaDataOptions"},{cnodes:b+"s/"+c+"/oidcRPMetaDataOptionsExtraClaims","default":[],id:b+"s/"+c+"/oidcRPMetaDataOptionsExtraClaims",title:"oidcRPMetaDataOptionsExtraClaims",type:"keyTextContainer"}];case"samlIDPMetaDataNode":return[{get:b+"s/"+c+"/samlIDPMetaDataXML",id:b+"s/"+c+"/samlIDPMetaDataXML",title:"samlIDPMetaDataXML",type:"file"},{cnodes:b+"s/"+c+"/samlIDPMetaDataExportedAttributes","default":[],help:"authsaml.html#exported_attributes",id:b+"s/"+c+"/samlIDPMetaDataExportedAttributes",title:"samlIDPMetaDataExportedAttributes",type:"samlAttributeContainer"},{_nodes:[{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsResolutionRule",id:b+"s/"+c+"/samlIDPMetaDataOptionsResolutionRule",title:"samlIDPMetaDataOptionsResolutionRule",type:"longtext"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsNameIDFormat",id:b+"s/"+c+"/samlIDPMetaDataOptionsNameIDFormat",select:[{k:"",v:""},{k:"unspecified",v:"Unspecified"},{k:"email",v:"Email"},{k:"x509",v:"X509 certificate"},{k:"windows",v:"Windows"},{k:"kerberos",v:"Kerberos"},{k:"entity",v:"Entity"},{k:"persistent",v:"Persistent"},{k:"transient",v:"Transient"},{k:"encrypted",v:"Encrypted"}],title:"samlIDPMetaDataOptionsNameIDFormat",type:"select"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsForceAuthn",id:b+"s/"+c+"/samlIDPMetaDataOptionsForceAuthn",title:"samlIDPMetaDataOptionsForceAuthn",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsIsPassive",id:b+"s/"+c+"/samlIDPMetaDataOptionsIsPassive",title:"samlIDPMetaDataOptionsIsPassive",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAllowProxiedAuthn",id:b+"s/"+c+"/samlIDPMetaDataOptionsAllowProxiedAuthn",title:"samlIDPMetaDataOptionsAllowProxiedAuthn",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAllowLoginFromIDP",id:b+"s/"+c+"/samlIDPMetaDataOptionsAllowLoginFromIDP",title:"samlIDPMetaDataOptionsAllowLoginFromIDP",type:"bool"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsRequestedAuthnContext",id:b+"s/"+c+"/samlIDPMetaDataOptionsRequestedAuthnContext",select:[{k:"",v:""},{k:"kerberos",v:"Kerberos"},{k:"password-protected-transport",v:"Password protected transport"},{k:"password",v:"Password"},{k:"tls-client",v:"TLS client certificate"}],title:"samlIDPMetaDataOptionsRequestedAuthnContext",type:"select"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsRelayStateURL",id:b+"s/"+c+"/samlIDPMetaDataOptionsRelayStateURL",title:"samlIDPMetaDataOptionsRelayStateURL",type:"bool"}],help:"authsaml.html#options",id:"samlIDPMetaDataOptions",title:"samlIDPMetaDataOptions",type:"simpleInputContainer"},{_nodes:[{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsAdaptSessionUtime",id:b+"s/"+c+"/samlIDPMetaDataOptionsAdaptSessionUtime",title:"samlIDPMetaDataOptionsAdaptSessionUtime",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsForceUTF8",id:b+"s/"+c+"/samlIDPMetaDataOptionsForceUTF8",title:"samlIDPMetaDataOptionsForceUTF8",type:"bool"},{"default":0,get:b+"s/"+c+"/samlIDPMetaDataOptionsStoreSAMLToken",id:b+"s/"+c+"/samlIDPMetaDataOptionsStoreSAMLToken",title:"samlIDPMetaDataOptionsStoreSAMLToken",type:"bool"}],id:"samlIDPMetaDataOptionsSession",title:"samlIDPMetaDataOptionsSession",type:"simpleInputContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/samlIDPMetaDataOptionsSignSSOMessage",id:b+"s/"+c+"/samlIDPMetaDataOptionsSignSSOMessage",title:"samlIDPMetaDataOptionsSignSSOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSSOMessageSignature",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSSOMessageSignature",title:"samlIDPMetaDataOptionsCheckSSOMessageSignature",type:"bool"},{"default":-1,get:b+"s/"+c+"/samlIDPMetaDataOptionsSignSLOMessage",id:b+"s/"+c+"/samlIDPMetaDataOptionsSignSLOMessage",title:"samlIDPMetaDataOptionsSignSLOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSLOMessageSignature",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckSLOMessageSignature",title:"samlIDPMetaDataOptionsCheckSLOMessageSignature",type:"bool"}],id:"samlIDPMetaDataOptionsSignature",title:"samlIDPMetaDataOptionsSignature",type:"simpleInputContainer"},{_nodes:[{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsSSOBinding",id:b+"s/"+c+"/samlIDPMetaDataOptionsSSOBinding",select:[{k:"",v:""},{k:"http-post",v:"POST"},{k:"http-redirect",v:"Redirect"},{k:"artifact-get",v:"Artifact GET"}],title:"samlIDPMetaDataOptionsSSOBinding",type:"select"},{"default":"",get:b+"s/"+c+"/samlIDPMetaDataOptionsSLOBinding",id:b+"s/"+c+"/samlIDPMetaDataOptionsSLOBinding",select:[{k:"",v:""},{k:"http-post",v:"POST"},{k:"http-redirect",v:"Redirect"},{k:"http-soap",v:"SOAP"}],title:"samlIDPMetaDataOptionsSLOBinding",type:"select"}],id:"samlIDPMetaDataOptionsBinding",title:"samlIDPMetaDataOptionsBinding",type:"simpleInputContainer"},{_nodes:[{"default":"none",get:b+"s/"+c+"/samlIDPMetaDataOptionsEncryptionMode",id:b+"s/"+c+"/samlIDPMetaDataOptionsEncryptionMode",select:[{k:"none",v:"None"},{k:"nameid",v:"Name ID"},{k:"assertion",v:"Assertion"}],title:"samlIDPMetaDataOptionsEncryptionMode",type:"select"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckTime",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckTime",title:"samlIDPMetaDataOptionsCheckTime",type:"bool"},{"default":1,get:b+"s/"+c+"/samlIDPMetaDataOptionsCheckAudience",id:b+"s/"+c+"/samlIDPMetaDataOptionsCheckAudience",title:"samlIDPMetaDataOptionsCheckAudience",type:"bool"}],id:"samlIDPMetaDataOptionsSecurity",title:"samlIDPMetaDataOptionsSecurity",type:"simpleInputContainer"}];case"samlSPMetaDataNode":return[{get:b+"s/"+c+"/samlSPMetaDataXML",id:b+"s/"+c+"/samlSPMetaDataXML",title:"samlSPMetaDataXML",type:"file"},{cnodes:b+"s/"+c+"/samlSPMetaDataExportedAttributes","default":[],help:"idpsaml.html#exported_attributes",id:b+"s/"+c+"/samlSPMetaDataExportedAttributes",title:"samlSPMetaDataExportedAttributes",type:"samlAttributeContainer"},{_nodes:[{_nodes:[{"default":"",get:b+"s/"+c+"/samlSPMetaDataOptionsNameIDFormat",id:b+"s/"+c+"/samlSPMetaDataOptionsNameIDFormat",select:[{k:"",v:""},{k:"unspecified",v:"Unspecified"},{k:"email",v:"Email"},{k:"x509",v:"X509 certificate"},{k:"windows",v:"Windows"},{k:"kerberos",v:"Kerberos"},{k:"entity",v:"Entity"},{k:"persistent",v:"Persistent"},{k:"transient",v:"Transient"},{k:"encrypted",v:"Encrypted"}],title:"samlSPMetaDataOptionsNameIDFormat",type:"select"},{get:b+"s/"+c+"/samlSPMetaDataOptionsNameIDSessionKey",id:b+"s/"+c+"/samlSPMetaDataOptionsNameIDSessionKey",title:"samlSPMetaDataOptionsNameIDSessionKey"},{"default":0,get:b+"s/"+c+"/samlSPMetaDataOptionsOneTimeUse",id:b+"s/"+c+"/samlSPMetaDataOptionsOneTimeUse",title:"samlSPMetaDataOptionsOneTimeUse",type:"bool"},{"default":72000,get:b+"s/"+c+"/samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",id:b+"s/"+c+"/samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",title:"samlSPMetaDataOptionsSessionNotOnOrAfterTimeout",type:"int"},{"default":72000,get:b+"s/"+c+"/samlSPMetaDataOptionsNotOnOrAfterTimeout",id:b+"s/"+c+"/samlSPMetaDataOptionsNotOnOrAfterTimeout",title:"samlSPMetaDataOptionsNotOnOrAfterTimeout",type:"int"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsForceUTF8",id:b+"s/"+c+"/samlSPMetaDataOptionsForceUTF8",title:"samlSPMetaDataOptionsForceUTF8",type:"bool"}],id:"samlSPMetaDataOptionsAuthnResponse",title:"samlSPMetaDataOptionsAuthnResponse",type:"simpleInputContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/samlSPMetaDataOptionsSignSSOMessage",id:b+"s/"+c+"/samlSPMetaDataOptionsSignSSOMessage",title:"samlSPMetaDataOptionsSignSSOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsCheckSSOMessageSignature",id:b+"s/"+c+"/samlSPMetaDataOptionsCheckSSOMessageSignature",title:"samlSPMetaDataOptionsCheckSSOMessageSignature",type:"bool"},{"default":-1,get:b+"s/"+c+"/samlSPMetaDataOptionsSignSLOMessage",id:b+"s/"+c+"/samlSPMetaDataOptionsSignSLOMessage",title:"samlSPMetaDataOptionsSignSLOMessage",type:"trool"},{"default":1,get:b+"s/"+c+"/samlSPMetaDataOptionsCheckSLOMessageSignature",id:b+"s/"+c+"/samlSPMetaDataOptionsCheckSLOMessageSignature",title:"samlSPMetaDataOptionsCheckSLOMessageSignature",type:"bool"}],id:"samlSPMetaDataOptionsSignature",title:"samlSPMetaDataOptionsSignature",type:"simpleInputContainer"},{_nodes:[{"default":"none",get:b+"s/"+c+"/samlSPMetaDataOptionsEncryptionMode",id:b+"s/"+c+"/samlSPMetaDataOptionsEncryptionMode",select:[{k:"none",v:"None"},{k:"nameid",v:"Name ID"},{k:"assertion",v:"Assertion"}],title:"samlSPMetaDataOptionsEncryptionMode",type:"select"},{"default":0,get:b+"s/"+c+"/samlSPMetaDataOptionsEnableIDPInitiatedURL",id:b+"s/"+c+"/samlSPMetaDataOptionsEnableIDPInitiatedURL",title:"samlSPMetaDataOptionsEnableIDPInitiatedURL",type:"bool"}],id:"samlSPMetaDataOptionsSecurity",title:"samlSPMetaDataOptionsSecurity",type:"simpleInputContainer"}],help:"idpsaml.html#options",id:"samlSPMetaDataOptions",title:"samlSPMetaDataOptions"}];case"virtualHost":return[{cnodes:b+"s/"+c+"/locationRules","default":[{data:"deny",id:b+"s/"+c+"/locationRules/default",re:"default",title:"default",type:"rule"}],help:"writingrulesand_headers.html#rules",id:b+"s/"+c+"/locationRules",title:"locationRules",type:"ruleContainer"},{cnodes:b+"s/"+c+"/exportedHeaders",help:"writingrulesand_headers.html#headers",id:b+"s/"+c+"/exportedHeaders",title:"exportedHeaders",type:"keyTextContainer"},{cnodes:b+"s/"+c+"/post",help:"formreplay.html",id:b+"s/"+c+"/post",title:"post",type:"postContainer"},{_nodes:[{"default":-1,get:b+"s/"+c+"/vhostPort",id:b+"s/"+c+"/vhostPort",title:"vhostPort",type:"int"},{"default":-1,get:b+"s/"+c+"/vhostHttps",id:b+"s/"+c+"/vhostHttps",title:"vhostHttps",type:"trool"},{"default":0,get:b+"s/"+c+"/vhostMaintenance",id:b+"s/"+c+"/vhostMaintenance",title:"vhostMaintenance",type:"bool"},{get:b+"s/"+c+"/vhostAliases",id:b+"s/"+c+"/vhostAliases",title:"vhostAliases"},{"default":"Main",get:b+"s/"+c+"/vhostType",id:b+"s/"+c+"/vhostType",select:[{k:"Main",v:"Main"},{k:"Zimbra",v:"ZimbraPreAuth"},{k:"AuthBasic",v:"AuthBasic"},{k:"SecureToken",v:"SecureToken"}],title:"vhostType",type:"select"}],help:"configvhost.html#options",id:"vhostOptions",title:"vhostOptions"}];default:return[]}}function setScopeVars(a){a.portal=a.data[0]._nodes[0]._nodes[0];a.getKey(a.portal);a.domain=a.data[0]._nodes[4]._nodes[1];a.getKey(a.domain)}; \ No newline at end of file diff --git a/lemonldap-ng-manager/site/static/languages/en.json b/lemonldap-ng-manager/site/static/languages/en.json index 34b75c2921762f8788b68dbd160291a2db74b5e6..18c5bb51b28bdcd889068aaa9424caac7e0a88c0 100644 --- a/lemonldap-ng-manager/site/static/languages/en.json +++ b/lemonldap-ng-manager/site/static/languages/en.json @@ -671,6 +671,7 @@ "vhostMaintenance": "Maintenance mode", "vhostOptions": "Options", "vhostPort": "Port", +"vhostType": "Type", "view": "View", "virtualHost": "Virtual Host", "virtualHostName": "Virtual host hostname", diff --git a/lemonldap-ng-manager/site/static/languages/fr.json b/lemonldap-ng-manager/site/static/languages/fr.json index 4d5540ecbf79e9748e119aa3d94127c3901bd74a..50516c05c82eb62e24761cc800eb1f33312981e9 100644 --- a/lemonldap-ng-manager/site/static/languages/fr.json +++ b/lemonldap-ng-manager/site/static/languages/fr.json @@ -671,6 +671,7 @@ "vhostMaintenance": "Mode maintenance", "vhostOptions": "Options", "vhostPort": "Port", +"vhostType": "Type", "view": "Aperçu", "virtualHost": "Hôte virtuel", "virtualHostName": "Nom de l'hôte virtuel", diff --git a/lemonldap-ng-portal/MANIFEST b/lemonldap-ng-portal/MANIFEST index 8e1204aa5001b7425dbd78d4b4d9fd5bb521e382..57a89a9a83f9306f589ede897e0ea04d93d26a3b 100644 --- a/lemonldap-ng-portal/MANIFEST +++ b/lemonldap-ng-portal/MANIFEST @@ -307,6 +307,8 @@ site/templates/dark/password.tpl site/templates/dark/redirect.tpl site/templates/dark/register.tpl site/templates/dark/standardform.tpl +site/templates/dark/u2fcheck.tpl +site/templates/dark/u2fregister.tpl site/templates/dark/yubikeyform.tpl site/templates/impact/authmessage.tpl site/templates/impact/confirm.tpl @@ -327,6 +329,8 @@ site/templates/impact/password.tpl site/templates/impact/redirect.tpl site/templates/impact/register.tpl site/templates/impact/standardform.tpl +site/templates/impact/u2fcheck.tpl +site/templates/impact/u2fregister.tpl site/templates/impact/yubikeyform.tpl site/templates/pastel/confirm.tpl site/templates/pastel/customfooter.tpl @@ -346,6 +350,8 @@ site/templates/pastel/password.tpl site/templates/pastel/redirect.tpl site/templates/pastel/register.tpl site/templates/pastel/standardform.tpl +site/templates/pastel/u2fcheck.tpl +site/templates/pastel/u2fregister.tpl site/templates/pastel/yubikeyform.tpl t/01-AuthDemo.t t/02-Password-Demo.t diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm index a5ead65cee391f97ba5f4f4b1b7903ba4b316c5a..931636db879244d5a38a929857f2e3ac12f0b674 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Init.pm @@ -92,7 +92,7 @@ sub init { # Purge loaded module list $self->loadedModules( {} ); - Lemonldap::NG::Handler::Main::Reload->onReload( $self, 'reloadConf' ); + Lemonldap::NG::Handler::Main->onReload( $self, 'reloadConf' ); return 0 unless ( $self->SUPER::init($args) ); return 0 if ( $self->error ); diff --git a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm index 1a913f79b455296f42fac108562edc67a19384e3..42710705758027235c5e9103edfdcf6d9490bf3d 100644 --- a/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm +++ b/lemonldap-ng-portal/lib/Lemonldap/NG/Portal/Main/Process.pm @@ -418,7 +418,7 @@ sub store { # Main session my $session = - $self->getApacheSession( $req->{id}, force => $self->{force} ); + $self->getApacheSession( $req->{id}, force => $req->{force} ); return PE_APACHESESSIONERROR unless ($session); $req->id( $session->{id} ); diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO-IdP-initiated.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO-IdP-initiated.t index b4e5163645d62c7952e68d35b401a10815c6e98d..d2dc1d1e8f6b50a5efde76a0871c28069fa5cbc1 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO-IdP-initiated.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO-IdP-initiated.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple authentication on IdP switch ('issuer'); @@ -168,7 +168,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO.t index 1a588436fa622c00919ec7be4d3792d77b6a59f9..7ef58b7a34a82bd85d2c9bd3bf8e175d1ab347d2 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Artifact-with-SOAP-SLO.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -218,7 +218,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Metadata.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Metadata.t index 55f7251134beff6450443934d4716bf3fac2c0f1..ac51e56d8d60d152f435c0636f9793a4e31a471c 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Metadata.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Metadata.t @@ -20,7 +20,7 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; ok( $res = $issuer->_get('/saml/metadata'), 'Get metadata'); ok( $res->[2]->[0] =~ m#^<\?xml version="1.0"\?>#s, 'Metadata is XML'); diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST-IdP-initiated.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST-IdP-initiated.t index 45b27874b41c00413da981f1401fc9b3fc0b0311..c2d509f9350ab56e5affe7b595ad4374f67ba78e 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST-IdP-initiated.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST-IdP-initiated.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple authentication on IdP switch ('issuer'); @@ -194,7 +194,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST.t index 222321957bd901ff8528006aacfcfaad57d80ec6..9a4e6e73bc1ac8fb8946145713cdb5d6c1b066a8 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-POST.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -212,7 +212,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-IdP-initiated.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-IdP-initiated.t index ce30daf3da63f1e374406579c3128904a469b781..fc7f556c926520a98482c1d6b3ff001490b2a50b 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-IdP-initiated.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect-IdP-initiated.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple authentication on IdP switch ('issuer'); @@ -174,7 +174,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect.t b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect.t index 768b96c5786da98fbeaa97db207bc8cf17f31382..82b3a762932a1efb2fc5d78919202e82034f1349 100644 --- a/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect.t +++ b/lemonldap-ng-portal/t/30-Auth-and-issuer-SAML-Redirect.t @@ -20,11 +20,11 @@ SKIP: { # Initialization ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -226,7 +226,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/31-Auth-and-issuer-CAS.t b/lemonldap-ng-portal/t/31-Auth-and-issuer-CAS.t index 9a95808d7cdae341fbb823a792aae56aa8fd94ed..3a0b10acc128aaea14d75efa4a4c3a630757ee60 100644 --- a/lemonldap-ng-portal/t/31-Auth-and-issuer-CAS.t +++ b/lemonldap-ng-portal/t/31-Auth-and-issuer-CAS.t @@ -23,11 +23,11 @@ SKIP: { *AuthCAS::get_https2 = *mygethttps2; ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -168,7 +168,7 @@ sub mygethttps2 { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-authorization_code.t b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-authorization_code.t index 3ba667a9c48dac1d9bbf09590c04f09c4424b08e..373a9bb6b5aa302a673da002f2544f584cfa9b48 100644 --- a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-authorization_code.t +++ b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-authorization_code.t @@ -241,7 +241,7 @@ sub switch { my $type = shift; pass( '==> Switching to ' . uc($type) . ' <==' ); count(1); - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-hybrid.t b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-hybrid.t index 0b2b7bf462c277e8123b6091164424d8cdf4f7ca..5131da8736028a4adf16309b01c4315228c501c4 100644 --- a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-hybrid.t +++ b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-hybrid.t @@ -160,7 +160,7 @@ sub switch { my $type = shift; pass( '==> Switching to ' . uc($type) . ' <==' ); count(1); - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-implicit.t b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-implicit.t index 735ec2e9878dba25f1cf4dec6b2ca6154f1cdf0c..861400056f9633ae1143400de8085fa331a39519 100644 --- a/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-implicit.t +++ b/lemonldap-ng-portal/t/32-Auth-and-issuer-OIDC-implicit.t @@ -151,7 +151,7 @@ sub switch { my $type = shift; pass( '==> Switching to ' . uc($type) . ' <==' ); count(1); - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/33-Auth-and-issuer-OpenID2.t b/lemonldap-ng-portal/t/33-Auth-and-issuer-OpenID2.t index 665455f174c178a566e9c8594469a1017fb092c9..804e6f0ee93118d07861a95772e14c83c0a92ec3 100644 --- a/lemonldap-ng-portal/t/33-Auth-and-issuer-OpenID2.t +++ b/lemonldap-ng-portal/t/33-Auth-and-issuer-OpenID2.t @@ -18,11 +18,11 @@ SKIP: { skip 'Net::OpenID::* notfound', $maintests; } ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -99,7 +99,7 @@ done_testing( count() ); sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/34-Auth-Proxy-and-REST-Server.t b/lemonldap-ng-portal/t/34-Auth-Proxy-and-REST-Server.t index a177f66d99dcad0c113e8beb1b3073a64508d21c..8fc3a69d42c039a489f0fbc2c25c49c25dfb471d 100644 --- a/lemonldap-ng-portal/t/34-Auth-Proxy-and-REST-Server.t +++ b/lemonldap-ng-portal/t/34-Auth-Proxy-and-REST-Server.t @@ -11,11 +11,11 @@ my ( $issuer, $sp, $res, $spId, $idpId ); my %handlerOR = ( issuer => [], sp => [] ); ok( $issuer = issuer(), 'Issuer portal' ); -$handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; +$handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); -$handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; +$handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; count(2); # Simple SP access @@ -234,7 +234,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/34-Auth-Proxy-and-SOAP-Server.t b/lemonldap-ng-portal/t/34-Auth-Proxy-and-SOAP-Server.t index d784e94ef741b1ab60d39da7983ae0baa53d2a6b..7cac5df8e6cc1a6f9bb7d97cdb8e6510d41329bb 100644 --- a/lemonldap-ng-portal/t/34-Auth-Proxy-and-SOAP-Server.t +++ b/lemonldap-ng-portal/t/34-Auth-Proxy-and-SOAP-Server.t @@ -18,11 +18,11 @@ SKIP: { } ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -138,7 +138,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/35-REST-sessions-with-REST-server.t b/lemonldap-ng-portal/t/35-REST-sessions-with-REST-server.t index 9af9a0d2749d3cd780ef55a5f19fc5815ccb309b..1292268f2bbb8bfce5dba42c2787b057fae8e361 100644 --- a/lemonldap-ng-portal/t/35-REST-sessions-with-REST-server.t +++ b/lemonldap-ng-portal/t/35-REST-sessions-with-REST-server.t @@ -11,11 +11,11 @@ my ( $issuer, $sp, $res, $spId ); my %handlerOR = ( issuer => [], sp => [] ); ok( $issuer = issuer(), 'Issuer portal' ); -$handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; +$handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); -$handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; +$handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; count(2); # Simple SP access @@ -147,7 +147,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; } diff --git a/lemonldap-ng-portal/t/35-SOAP-sessions-with-SOAP-server.t b/lemonldap-ng-portal/t/35-SOAP-sessions-with-SOAP-server.t index 2b3e0d5519254c7353fab069024cab9b0258f8b1..a7ba0b0ab56ceac784b4f40f878484d0cd5d5912 100644 --- a/lemonldap-ng-portal/t/35-SOAP-sessions-with-SOAP-server.t +++ b/lemonldap-ng-portal/t/35-SOAP-sessions-with-SOAP-server.t @@ -18,11 +18,11 @@ SKIP: { } ok( $issuer = issuer(), 'Issuer portal' ); - $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{issuer} = \@Lemonldap::NG::Handler::Main::_onReload; switch ('sp'); ok( $sp = sp(), 'SP portal' ); - $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::Reload::_onReload; + $handlerOR{sp} = \@Lemonldap::NG::Handler::Main::_onReload; # Simple SP access my $res; @@ -120,7 +120,7 @@ sub LWP::UserAgent::request { sub switch { my $type = shift; - @Lemonldap::NG::Handler::Main::Reload::_onReload = @{ + @Lemonldap::NG::Handler::Main::_onReload = @{ $handlerOR{$type}; }; }