From baa2be3d787e88fedd58896fa4cbe51bb54512bc Mon Sep 17 00:00:00 2001 From: Xavier Guimard Date: Sun, 21 Jun 2015 19:52:19 +0000 Subject: [PATCH] Create fake type "subContainer" --- .../lib/Lemonldap/NG/Manager/Attributes.pm | 5 ++ .../lib/Lemonldap/NG/Manager/ConfParser.pm | 84 +++++++++++-------- lemonldap-ng-manager/t/03-HTML-forms.t | 20 +++-- 3 files changed, 65 insertions(+), 44 deletions(-) diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm index 8be407c3e..2c4c3f577 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/Attributes.pm @@ -835,6 +835,9 @@ sub attributes { documentation => 'Virtualhost urls/Datas to post', }, + vhostOptions => { + type => 'subContainer', + }, vhostPort => { type => 'int', default => -1, @@ -2003,6 +2006,8 @@ m{^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?: { type => 'oidcOPMetaDataNodeContainer', help => 'oidcop.html', }, oidcRPMetaDataNodes => { type => 'oidcRPMetaDataNodeContainer', help => 'oidcrp.html', }, + oidcOPMetaDataOptions => { type => 'subContainer', }, + oidcRPMetaDataOptions => { type => 'subContainer', }, # OpenID Connect providers oidcOPMetaDataJSON => { type => 'oidcmetadatajson', }, diff --git a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/ConfParser.pm b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/ConfParser.pm index c9077476a..d079744dd 100644 --- a/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/ConfParser.pm +++ b/lemonldap-ng-manager/lib/Lemonldap/NG/Manager/ConfParser.pm @@ -474,52 +474,64 @@ sub _unitTest { foreach my $key ( keys %$conf ) { my ( $attr, $type ); - # Check if key exists - unless ( $attr = $attrs->{$key} ) { - push @{ $self->errors }, { message => "__unknownKey__: $key" }; - next; - } - if ( $key =~ $simpleHashKeys ) { + if ( $attr->{type} and $attr->{type} eq 'subContainer' ) { - #TODO - } - elsif ( defined $attr->{keyTest} ) { - - #TODO + # TODO Recursive } else { - die "Unkown type $attr->{type}" - unless ( $type = $types->{ $attr->{type} } ); - my $test = $attr->{test} // $type->{test}; - my $msg = $attr->{msgFail} // $type->{msgFail}; - if ( my $ref = ref($test) ) { - if ( $ref eq 'CODE' ) { - my ( $r, $w ) = $test->( $conf->{$key}, $conf, $attr ); - unless ($r) { - push @{ $self->errors }, - { message => "$key: " . ( $w ? $w : $msg ) }; - $res = 0; + + # Check if key exists + unless ( $attr = $attrs->{$key} ) { + push @{ $self->errors }, { message => "__unknownKey__: $key" }; + next; + } + if ( $key =~ $simpleHashKeys ) { + + #TODO + } + elsif ( defined $attr->{keyTest} ) { + + #TODO + } + elsif ( $attr->{type} =~ /Container$/ ) { + + #TODO + } + else { + die "Unkown type $attr->{type}" + unless ( $type = $types->{ $attr->{type} } ); + my $test = $attr->{test} // $type->{test}; + my $msg = $attr->{msgFail} // $type->{msgFail}; + if ( my $ref = ref($test) ) { + if ( $ref eq 'CODE' ) { + my ( $r, $w ) = $test->( $conf->{$key}, $conf, $attr ); + unless ($r) { + push @{ $self->errors }, + { message => "$key: " . ( $w ? $w : $msg ) }; + $res = 0; + } + elsif ($w) { + push @{ $self->warnings }, + { message => "$key: $w" }; + } } - elsif ($w) { - push @{ $self->warnings }, { message => "$key: $w" }; + elsif ( $ref eq 'Regexp' ) { + die "msgFail undefined for type \"$attr->{type}\"" + unless ( defined $msg ); + unless ( $conf->{$key} =~ $test ) { + push @{ $self->errors }, + { message => "$key: $msg ($conf->{$key})" }; + } } - } - elsif ( $ref eq 'Regexp' ) { - die "msgFail undefined for type \"$attr->{type}\"" - unless ( defined $msg ); - unless ( $conf->{$key} =~ $test ) { - push @{ $self->errors }, - { message => "$key: $msg ($conf->{$key})" }; + else { + die +"Malformed test: only regexp ref or sub are accepted (type \"$ref\")"; } } else { die -"Malformed test: only regexp ref or sub are accepted (type \"$ref\")"; - } - } - else { - die "Malformed test: only regexp ref or sub are accepted (\"$test\")"; + } } } } diff --git a/lemonldap-ng-manager/t/03-HTML-forms.t b/lemonldap-ng-manager/t/03-HTML-forms.t index f37fa7248..d07718ef9 100644 --- a/lemonldap-ng-manager/t/03-HTML-forms.t +++ b/lemonldap-ng-manager/t/03-HTML-forms.t @@ -15,38 +15,42 @@ $count += 3; ok( opendir( D, $formDir ), 'Found forms dir' ); my %forms = map { s/\.html$// ? ( $_ => 1 ) : () } readdir D; close D; + delete $forms{white}; delete $forms{restore}; my ( @types, $attr, $tree, $ctrees ); ok( $tree = Lemonldap::NG::Manager::Tree::tree(), 'Get tree' ); ok( $ctrees = Lemonldap::NG::Manager::CTrees::cTrees(), 'Get cTrees' ); -ok( $attr = Lemonldap::NG::Manager::Attributes::attributes(), +ok( $attr = Lemonldap::NG::Manager::Attributes::attributes(), 'Get attributes' ); -$count +=4; +$count += 4; my %types = %{ getTypes( $tree, values(%$ctrees), $attr ) }; -foreach(qw(home menuCat menuApp)){ - ok($forms{$_},"Found $_ form"); - $count ++; +foreach (qw(home menuCat menuApp)) { + ok( $forms{$_}, "Found $_ form" ); + $count++; delete $forms{$_}; } foreach my $type ( keys %types ) { delete $types{$type}; - next if($type =~ /^(?:url|PerlModule|hostname|pcre|lmAttrOrMacro|RSAP(?:ublic|rivate)Key)$/); + next + if ( $type =~ +/^(?:url|PerlModule|hostname|pcre|lmAttrOrMacro|subContainer|RSAP(?:ublic|rivate)Key)$/ + ); ok( $forms{$type}, "Found $type" ); delete $forms{$type}; $count++; if ( $type =~ s/Container$// ) { - next if($type eq 'simpleInput'); + next if ( $type eq 'simpleInput' ); ok( $forms{$type}, "Found $type" ); delete $forms{$type}; $count++; } } -ok(!%forms, "No unused forms"); +ok( !%forms, "No unused forms" ); $count++; done_testing($count);