package Lemonldap::NG::Manager::Api::Common; our $VERSION = '2.0.8'; package Lemonldap::NG::Manager::Api; use Lemonldap::NG::Manager::Build::Attributes; use Lemonldap::NG::Manager::Build::CTrees; # use Scalar::Util 'weaken'; ? sub _isSimpleKeyValueHash { my ( $self, $hash ) = @_; return 0 if ( ref($hash) ne "HASH" ); foreach ( keys %$hash ) { return 0 if ( ref( $hash->{$_} ) ne '' || ref($_) ne '' ); } return 1; } sub _setDefaultValues { my ( $self, $attrs, $rootNode ) = @_; my @allAttrs = $self->_listAttributes($rootNode); my $defaultAttrs = Lemonldap::NG::Manager::Build::Attributes::attributes(); foreach $attr (@allAttrs) { unless ( defined $attrs->{$attr} ) { $attrs->{$attr} = $defaultAttrs->{$attr}->{default} if ( defined $defaultAttrs->{$attr} && defined $defaultAttrs->{$attr}->{default} ); } } return $attrs; } sub _hasAllowedAttributes { my ( $self, $attributes, $rootNode ) = @_; my @allowedAttributes = $self->_listAttributes($rootNode); foreach $attribute ( keys %{$attributes} ) { if ( length( ref($attribute) ) ) { return { res => "ko", msg => "Invalid input: Attribute $attribute is not a string." }; } unless ( grep { /^$attribute$/ } @allowedAttributes ) { return { res => "ko", msg => "Invalid input: Attribute $attribute does not exist." }; } } return { res => "ok" }; } sub _listAttributes { my ( $self, $rootNode ) = @_; my $mainTree = Lemonldap::NG::Manager::Build::CTrees::cTrees(); my $rootNodes = [ grep { ref($_) eq "HASH" } @{ $mainTree->{$rootNode} } ]; my @attributes = map { $self->_listNodeAttributes($_) } @$rootNodes; return @attributes; } sub _listNodeAttributes { my ( $self, $node ) = @_; my @attributes = map { ref($_) eq "HASH" ? $self->_listNodeAttributes($_) : $_ } @{ $node->{nodes} }; return @attributes; } 1;