# This file is generated by Lemonldap::NG::Manager::Build. Don't modify it by hand package Lemonldap::NG::Manager::Attributes; our $VERSION = '2.0.15'; sub perlExpr { my ( $val, $conf ) = @_; my $cpt = 'Safe'->new; $cpt->share_from( 'MIME::Base64', ['&encode_base64'] ); $cpt->share_from( 'Lemonldap::NG::Handler::Main::Jail', [ '&encrypt', '&token', @Lemonldap::NG::Handler::Main::Jail::builtCustomFunctions ] ); $cpt->share_from( 'Lemonldap::NG::Common::Safelib', $Lemonldap::NG::Common::Safelib::functions ); $cpt->reval("BEGIN { 'warnings'->unimport; } $val"); my $err = join( '', grep( { $_ =~ /(?:Undefined subroutine|Devel::StackTrace)/ ? () : $_; } split( /\n/, $@, 0 ) ) ); return -1, "__badExpression__: $err" if $err and $conf->{'useSafeJail'}; return $val =~ qr/(?<=[^=\|\?])=(?![>=~])/ && $conf->{'avoidAssignment'} ? ( 1, '__badExpressionAssignment__' ) : 1; } sub types { return { 'array' => { 'test' => sub { 1; } }, 'authParamsText' => { 'test' => sub { 1; } }, 'blackWhiteList' => { 'test' => sub { 1; } }, 'bool' => { 'msgFail' => '__notABoolean__', 'test' => qr/^[01]$/ }, 'boolOrExpr' => { 'msgFail' => '__notAValidPerlExpression__', 'test' => sub { return perlExpr(@_); } }, 'catAndAppList' => { 'test' => sub { 1; } }, 'file' => { 'test' => sub { 1; } }, 'hostname' => { 'form' => 'text', 'msgFail' => '__badHostname__', 'test' => qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))?$/ }, 'int' => { 'msgFail' => '__notAnInteger__', 'test' => qr/^\-?\d+$/ }, 'keyText' => { 'keyTest' => qr/^[a-zA-Z0-9_]+$/, 'msgFail' => '__badValue__', 'test' => qr/^.*$/ }, 'keyTextContainer' => { 'keyMsgFail' => '__badKeyName__', 'keyTest' => qr/^\w[\w\.\-]*$/, 'msgFail' => '__emptyValueNotAllowed__', 'test' => qr/./ }, 'lmAttrOrMacro' => { 'form' => 'text', 'test' => sub { my ( $val, $conf ) = @_; return 1 if defined $conf->{'macros'}{$val} or $val =~ /^_/; foreach $_ ( keys %$conf ) { return 1 if $_ =~ /exportedvars$/i and defined $conf->{$_}{$val}; } return 1, "__unknownAttrOrMacro__: $val"; } }, 'longtext' => { 'test' => sub { 1; } }, 'menuApp' => { 'test' => sub { 1; } }, 'menuCat' => { 'test' => sub { 1; } }, 'oidcAttribute' => { 'test' => sub { 1; } }, 'oidcmetadatajson' => { 'test' => sub { 1; } }, 'oidcmetadatajwks' => { 'test' => sub { 1; } }, 'oidcOPMetaDataNode' => { 'test' => sub { 1; } }, 'oidcRPMetaDataNode' => { 'test' => sub { 1; } }, 'password' => { 'msgFail' => '__malformedValue__', 'test' => sub { 1; } }, 'pcre' => { 'form' => 'text', 'test' => sub { eval { do { qr/$_[0]/; } }; return $@ ? ( 0, "__badRegexp__: $@" ) : 1; } }, 'PerlModule' => { 'form' => 'text', 'msgFail' => '__badPerlPackageName__', 'test' => qr/^(?:[a-zA-Z][a-zA-Z0-9]*)*(?:::[a-zA-Z][a-zA-Z0-9]*)*$/ }, 'portalskin' => { 'test' => sub { 1; } }, 'portalskinbackground' => { 'test' => sub { 1; } }, 'post' => { 'test' => sub { 1; } }, 'RSAPrivateKey' => { 'test' => sub { return $_[0] =~ m[^(?:(?:\-+\s*BEGIN\s+(?:(?:RSA|ENCRYPTED)\s+)?PRIVATE\s+KEY\s*\-+\r?\n)?(?:Proc-Type:.*\r?\nDEK-Info:.*\r?\n[\r\n]*)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+(?:(?:RSA|ENCRYPTED)\s+)?PRIVATE\s+KEY\s*\-+)?[\r\n]*)?$]s ? 1 : ( 1, '__badPemEncoding__' ); } }, 'RSAPublicKey' => { 'test' => sub { return $_[0] =~ m[^(?:(?:\-+\s*BEGIN\s+PUBLIC\s+KEY\s*\-+\r?\n)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+PUBLIC\s+KEY\s*\-+)?[\r\n]*)?$]s ? 1 : ( 1, '__badPemEncoding__' ); } }, 'RSAPublicKeyOrCertificate' => { 'test' => sub { return $_[0] =~ m[^(?:(?:\-+\s*BEGIN\s+(?:PUBLIC\s+KEY|CERTIFICATE)\s*\-+\r?\n)?[a-zA-Z0-9/\+\r\n]+={0,2}(?:\r?\n\-+\s*END\s+(?:PUBLIC\s+KEY|CERTIFICATE)\s*\-+)?[\r\n]*)?$]s ? 1 : ( 1, '__badPemEncoding__' ); } }, 'rule' => { 'test' => sub { 1; } }, 'samlAssertion' => { 'test' => sub { 1; } }, 'samlAttribute' => { 'test' => sub { 1; } }, 'samlIDPMetaDataNode' => { 'test' => sub { 1; } }, 'samlService' => { 'test' => sub { 1; } }, 'samlSPMetaDataNode' => { 'test' => sub { 1; } }, 'select' => { 'test' => sub { return 0, 'Value is not a scalar' if ref $_[0]; my $test = grep( { $_ eq $_[0]; } map( { $_->{'k'}; } @{ $_[2]{'select'}; } ) ); return $test ? 1 : ( 1, "Invalid value '$_[0]' for this select" ); } }, 'subContainer' => { 'keyTest' => qr/\w/, 'test' => sub { 1; } }, 'text' => { 'msgFail' => '__malformedValue__', 'test' => sub { 1; } }, 'trool' => { 'msgFail' => '__authorizedValues__: -1, 0, 1', 'test' => qr/^(?:-1|0|1)$/ }, 'url' => { 'form' => 'text', 'msgFail' => '__badUrl__', 'test' => qr/(?:^$|(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?))/ } }; } sub attributes { return { 'activeTimer' => { 'default' => 1, 'type' => 'bool' }, 'adaptativeAuthenticationLevelRules' => { 'keyMsgFail' => '__badRegexp__', 'keyTest' => sub { eval { do { qr/$_[0]/; } }; return $@ ? 0 : 1; }, 'type' => 'keyTextContainer' }, 'ADPwdExpireWarning' => { 'default' => 0, 'type' => 'int' }, 'ADPwdMaxAge' => { 'default' => 0, 'type' => 'int' }, 'apacheAuthnLevel' => { 'default' => 3, 'type' => 'int' }, 'applicationList' => { 'default' => { 'default' => { 'catname' => 'Default category', 'type' => 'category' } }, 'keyTest' => qr/\w/, 'type' => 'catAndAppList' }, 'authChoiceAuthBasic' => { 'type' => 'text' }, 'authChoiceFindUser' => { 'type' => 'text' }, 'authChoiceModules' => { 'keyMsgFail' => '__badChoiceKey__', 'keyTest' => qr/^(\d*)?[a-zA-Z0-9_]+$/, 'select' => [ [ { 'k' => 'Apache', 'v' => 'Apache' }, { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'CAS', 'v' => 'Central Authentication Service (CAS)' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Demo', 'v' => 'Demo' }, { 'k' => 'Facebook', 'v' => 'Facebook' }, { 'k' => 'GitHub', 'v' => 'GitHub' }, { 'k' => 'GPG', 'v' => 'GPG' }, { 'k' => 'Kerberos', 'v' => 'Kerberos' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'LinkedIn', 'v' => 'LinkedIn' }, { 'k' => 'PAM', 'v' => 'PAM' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'OpenID', 'v' => 'OpenID' }, { 'k' => 'OpenIDConnect', 'v' => 'OpenID Connect' }, { 'k' => 'Proxy', 'v' => 'Proxy' }, { 'k' => 'Radius', 'v' => 'Radius' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Remote', 'v' => 'Remote' }, { 'k' => 'SAML', 'v' => 'SAML v2' }, { 'k' => 'Slave', 'v' => 'Slave' }, { 'k' => 'SSL', 'v' => 'SSL' }, { 'k' => 'Twitter', 'v' => 'Twitter' }, { 'k' => 'WebID', 'v' => 'WebID' }, { 'k' => 'Custom', 'v' => 'customModule' } ], [ { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'CAS', 'v' => 'Central Authentication Service (CAS)' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Demo', 'v' => 'Demo' }, { 'k' => 'Facebook', 'v' => 'Facebook' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'OpenID', 'v' => 'OpenID' }, { 'k' => 'OpenIDConnect', 'v' => 'OpenID Connect' }, { 'k' => 'Proxy', 'v' => 'Proxy' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Remote', 'v' => 'Remote' }, { 'k' => 'SAML', 'v' => 'SAML v2' }, { 'k' => 'Slave', 'v' => 'Slave' }, { 'k' => 'WebID', 'v' => 'WebID' }, { 'k' => 'Custom', 'v' => 'customModule' } ], [ { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Demo', 'v' => 'Demo' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Custom', 'v' => 'customModule' } ] ], 'test' => sub { 1; }, 'type' => 'authChoiceContainer' }, 'authChoiceParam' => { 'default' => 'lmAuth', 'type' => 'text' }, 'authentication' => { 'default' => 'Demo', 'select' => [ { 'k' => 'Apache', 'v' => 'Apache' }, { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Facebook', 'v' => 'Facebook' }, { 'k' => 'GitHub', 'v' => 'GitHub' }, { 'k' => 'GPG', 'v' => 'GPG' }, { 'k' => 'Kerberos', 'v' => 'Kerberos' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'LinkedIn', 'v' => 'LinkedIn' }, { 'k' => 'PAM', 'v' => 'PAM' }, { 'k' => 'Radius', 'v' => 'Radius' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'SSL', 'v' => 'SSL' }, { 'k' => 'Twitter', 'v' => 'Twitter' }, { 'k' => 'WebID', 'v' => 'WebID' }, { 'k' => 'Demo', 'v' => 'Demonstration' }, { 'k' => 'Choice', 'v' => 'authChoice' }, { 'k' => 'Combination', 'v' => 'combineMods' }, { 'k' => 'CAS', 'v' => 'Central Authentication Service (CAS)' }, { 'k' => 'OpenID', 'v' => 'OpenID' }, { 'k' => 'OpenIDConnect', 'v' => 'OpenID Connect' }, { 'k' => 'SAML', 'v' => 'SAML v2' }, { 'k' => 'Proxy', 'v' => 'Proxy' }, { 'k' => 'Remote', 'v' => 'Remote' }, { 'k' => 'Slave', 'v' => 'Slave' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Custom', 'v' => 'customModule' } ], 'type' => 'select' }, 'AuthLDAPFilter' => { 'type' => 'text' }, 'autoSigninRules' => { 'type' => 'keyTextContainer' }, 'available2F' => { 'default' => 'UTOTP,TOTP,U2F,REST,Mail2F,Ext2F,WebAuthn,Yubikey,Radius', 'type' => 'text' }, 'available2FSelfRegistration' => { 'default' => 'TOTP,U2F,WebAuthn,Yubikey', 'type' => 'text' }, 'avoidAssignment' => { 'default' => 0, 'type' => 'bool' }, 'browsersDontStorePassword' => { 'default' => 0, 'type' => 'bool' }, 'bruteForceProtection' => { 'default' => 0, 'type' => 'bool' }, 'bruteForceProtectionIncrementalTempo' => { 'default' => 0, 'type' => 'bool' }, 'bruteForceProtectionLockTimes' => { 'default' => '15, 30, 60, 300, 600', 'type' => 'text' }, 'bruteForceProtectionMaxAge' => { 'default' => 300, 'type' => 'int' }, 'bruteForceProtectionMaxFailed' => { 'default' => 3, 'type' => 'int' }, 'bruteForceProtectionMaxLockTime' => { 'default' => 900, 'type' => 'int' }, 'bruteForceProtectionTempo' => { 'default' => 30, 'type' => 'int' }, 'captcha' => { 'type' => 'PerlModule' }, 'captcha_login_enabled' => { 'default' => 0, 'type' => 'bool' }, 'captcha_mail_enabled' => { 'default' => 1, 'type' => 'bool' }, 'captcha_register_enabled' => { 'default' => 1, 'type' => 'bool' }, 'captcha_size' => { 'default' => 6, 'type' => 'int' }, 'captchaOptions' => { 'type' => 'keyTextContainer' }, 'casAccessControlPolicy' => { 'default' => 'none', 'select' => [ { 'k' => 'none', 'v' => 'None' }, { 'k' => 'error', 'v' => 'Display error on portal' }, { 'k' => 'faketicket', 'v' => 'Send a fake service ticket' } ], 'type' => 'select' }, 'casAppMetaDataExportedVars' => { 'default' => { 'cn' => 'cn', 'mail' => 'mail', 'uid' => 'uid' }, 'type' => 'keyTextContainer' }, 'casAppMetaDataMacros' => { 'default' => {}, 'test' => { 'keyMsgFail' => '__badMacroName__', 'keyTest' => qr/^[_a-zA-Z][a-zA-Z0-9_]*$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'casAppMetaDataNodes' => { 'type' => 'casAppMetaDataNodeContainer' }, 'casAppMetaDataOptions' => { 'type' => 'subContainer' }, 'casAppMetaDataOptionsAuthnLevel' => { 'type' => 'int' }, 'casAppMetaDataOptionsRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'casAppMetaDataOptionsService' => { 'type' => 'text' }, 'casAppMetaDataOptionsUserAttribute' => { 'type' => 'text' }, 'casAttr' => { 'type' => 'text' }, 'casAttributes' => { 'type' => 'keyTextContainer' }, 'casAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'casSrvMetaDataExportedVars' => { 'default' => { 'cn' => 'cn', 'mail' => 'mail', 'uid' => 'uid' }, 'type' => 'keyTextContainer' }, 'casSrvMetaDataNodes' => { 'type' => 'casSrvMetaDataNodeContainer' }, 'casSrvMetaDataOptions' => { 'type' => 'subContainer' }, 'casSrvMetaDataOptionsDisplayName' => { 'type' => 'text' }, 'casSrvMetaDataOptionsGateway' => { 'default' => 0, 'type' => 'bool' }, 'casSrvMetaDataOptionsIcon' => { 'type' => 'text' }, 'casSrvMetaDataOptionsProxiedServices' => { 'keyMsgFail' => '__badCasProxyId__', 'keyTest' => qr/^\w/, 'type' => 'keyTextContainer' }, 'casSrvMetaDataOptionsRenew' => { 'default' => 0, 'type' => 'bool' }, 'casSrvMetaDataOptionsResolutionRule' => { 'default' => '', 'type' => 'longtext' }, 'casSrvMetaDataOptionsSortNumber' => { 'type' => 'int' }, 'casSrvMetaDataOptionsUrl' => { 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'text' }, 'casStorage' => { 'type' => 'PerlModule' }, 'casStorageOptions' => { 'type' => 'keyTextContainer' }, 'casStrictMatching' => { 'default' => 0, 'type' => 'bool' }, 'casTicketExpiration' => { 'default' => 0, 'type' => 'int' }, 'cda' => { 'default' => 0, 'type' => 'bool' }, 'certificateResetByMailCeaAttribute' => { 'default' => 'description', 'type' => 'text' }, 'certificateResetByMailCertificateAttribute' => { 'default' => 'userCertificate;binary', 'type' => 'text' }, 'certificateResetByMailStep1Body' => { 'type' => 'longtext' }, 'certificateResetByMailStep1Subject' => { 'type' => 'text' }, 'certificateResetByMailStep2Body' => { 'type' => 'longtext' }, 'certificateResetByMailStep2Subject' => { 'type' => 'text' }, 'certificateResetByMailURL' => { 'default' => 'http://auth.example.com/certificateReset', 'type' => 'url' }, 'certificateResetByMailValidityDelay' => { 'default' => 0, 'type' => 'int' }, 'cfgAuthor' => { 'type' => 'text' }, 'cfgAuthorIP' => { 'type' => 'text' }, 'cfgDate' => { 'type' => 'int' }, 'cfgLog' => { 'type' => 'longtext' }, 'cfgNum' => { 'default' => 0, 'type' => 'int' }, 'cfgVersion' => { 'type' => 'text' }, 'checkDevOps' => { 'default' => 0, 'type' => 'bool' }, 'checkDevOpsCheckSessionAttributes' => { 'default' => 1, 'type' => 'bool' }, 'checkDevOpsDisplayNormalizedHeaders' => { 'default' => 1, 'type' => 'bool' }, 'checkDevOpsDownload' => { 'default' => 1, 'type' => 'bool' }, 'checkState' => { 'default' => 0, 'type' => 'bool' }, 'checkStateSecret' => { 'type' => 'text' }, 'checkTime' => { 'default' => 600, 'type' => 'int' }, 'checkUser' => { 'default' => 0, 'type' => 'bool' }, 'checkUserDisplayComputedSession' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'checkUserDisplayEmptyHeaders' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserDisplayEmptyValues' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserDisplayHiddenAttributes' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserDisplayHistory' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserDisplayNormalizedHeaders' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserDisplayPersistentInfo' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'checkUserHiddenAttributes' => { 'default' => '_loginHistory, _session_id, hGroups', 'type' => 'text' }, 'checkUserHiddenHeaders' => { 'keyMsgFail' => '__badHostname__', 'keyTest' => qr/^\S+$/, 'test' => { 'keyMsgFail' => '__badHeaderName__', 'keyTest' => qr/^(?=[^\-])[\w\-\s]+(?<=[^-])$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'checkUserIdRule' => { 'default' => 1, 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'checkUserSearchAttributes' => { 'type' => 'text' }, 'checkUserUnrestrictedUsersRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'checkXSS' => { 'default' => 1, 'type' => 'bool' }, 'combination' => { 'type' => 'text' }, 'combModules' => { 'keyTest' => qr/^\w+$/, 'select' => [ { 'k' => 'Apache', 'v' => 'Apache' }, { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Facebook', 'v' => 'Facebook' }, { 'k' => 'GitHub', 'v' => 'GitHub' }, { 'k' => 'GPG', 'v' => 'GPG' }, { 'k' => 'Kerberos', 'v' => 'Kerberos' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'LinkedIn', 'v' => 'LinkedIn' }, { 'k' => 'PAM', 'v' => 'PAM' }, { 'k' => 'Radius', 'v' => 'Radius' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'SSL', 'v' => 'SSL' }, { 'k' => 'Twitter', 'v' => 'Twitter' }, { 'k' => 'WebID', 'v' => 'WebID' }, { 'k' => 'Demo', 'v' => 'Demonstration' }, { 'k' => 'CAS', 'v' => 'Central Authentication Service (CAS)' }, { 'k' => 'OpenID', 'v' => 'OpenID' }, { 'k' => 'OpenIDConnect', 'v' => 'OpenID Connect' }, { 'k' => 'SAML', 'v' => 'SAML v2' }, { 'k' => 'Proxy', 'v' => 'Proxy' }, { 'k' => 'Remote', 'v' => 'Remote' }, { 'k' => 'Slave', 'v' => 'Slave' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Custom', 'v' => 'customModule' } ], 'test' => sub { 1; }, 'type' => 'cmbModuleContainer' }, 'compactConf' => { 'default' => 0, 'type' => 'bool' }, 'configStorage' => { 'type' => 'text' }, 'confirmFormMethod' => { 'default' => 'post', 'select' => [ { 'k' => 'get', 'v' => 'GET' }, { 'k' => 'post', 'v' => 'POST' } ], 'type' => 'select' }, 'contextSwitchingAllowed2fModifications' => { 'default' => 0, 'type' => 'bool' }, 'contextSwitchingIdRule' => { 'default' => 1, 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'contextSwitchingPrefix' => { 'default' => 'switching', 'type' => 'text' }, 'contextSwitchingRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'contextSwitchingStopWithLogout' => { 'default' => 1, 'type' => 'bool' }, 'contextSwitchingUnrestrictedUsersRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'cookieExpiration' => { 'type' => 'int' }, 'cookieName' => { 'default' => 'lemonldap', 'msgFail' => '__badCookieName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'type' => 'text' }, 'corsAllow_Credentials' => { 'default' => 'true', 'type' => 'text' }, 'corsAllow_Headers' => { 'default' => '*', 'type' => 'text' }, 'corsAllow_Methods' => { 'default' => 'POST,GET', 'type' => 'text' }, 'corsAllow_Origin' => { 'default' => '*', 'type' => 'text' }, 'corsEnabled' => { 'default' => 1, 'type' => 'bool' }, 'corsExpose_Headers' => { 'default' => '*', 'type' => 'text' }, 'corsMax_Age' => { 'default' => '86400', 'type' => 'text' }, 'crowdsec' => { 'type' => 'bool' }, 'crowdsecAction' => { 'default' => 'reject', 'select' => [ { 'k' => 'reject', 'v' => 'Reject' }, { 'k' => 'warn', 'v' => 'Warn' } ], 'type' => 'select' }, 'crowdsecKey' => { 'type' => 'text' }, 'crowdsecUrl' => { 'type' => 'url' }, 'cspConnect' => { 'default' => '\'self\'', 'type' => 'text' }, 'cspDefault' => { 'default' => '\'self\'', 'type' => 'text' }, 'cspFont' => { 'default' => '\'self\'', 'type' => 'text' }, 'cspFormAction' => { 'default' => '*', 'type' => 'text' }, 'cspFrameAncestors' => { 'default' => '', 'type' => 'text' }, 'cspImg' => { 'default' => '\'self\' data:', 'type' => 'text' }, 'cspScript' => { 'default' => '\'self\'', 'type' => 'text' }, 'cspStyle' => { 'default' => '\'self\'', 'type' => 'text' }, 'customAddParams' => { 'type' => 'keyTextContainer' }, 'customAuth' => { 'type' => 'text' }, 'customFunctions' => { 'msgFail' => '__badCustomFuncName__', 'test' => qr/^(?:\w+(?:::\w+)*(?:\s+\w+(?:::\w+)*)*)?$/, 'type' => 'text' }, 'customPassword' => { 'type' => 'text' }, 'customPlugins' => { 'type' => 'text' }, 'customPluginsParams' => { 'type' => 'keyTextContainer' }, 'customRegister' => { 'type' => 'text' }, 'customResetCertByMail' => { 'type' => 'text' }, 'customToTrace' => { 'type' => 'lmAttrOrMacro' }, 'customUserDB' => { 'type' => 'text' }, 'dbiAuthChain' => { 'type' => 'text' }, 'dbiAuthLoginCol' => { 'type' => 'text' }, 'dbiAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'dbiAuthPassword' => { 'type' => 'password' }, 'dbiAuthPasswordCol' => { 'type' => 'text' }, 'dbiAuthPasswordHash' => { 'type' => 'text' }, 'dbiAuthTable' => { 'type' => 'text' }, 'dbiAuthUser' => { 'type' => 'text' }, 'dbiDynamicHashEnabled' => { 'type' => 'bool' }, 'dbiDynamicHashNewPasswordScheme' => { 'type' => 'text' }, 'dbiDynamicHashValidSaltedSchemes' => { 'type' => 'text' }, 'dbiDynamicHashValidSchemes' => { 'type' => 'text' }, 'dbiExportedVars' => { 'default' => {}, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'dbiPasswordMailCol' => { 'type' => 'text' }, 'dbiUserChain' => { 'type' => 'text' }, 'dbiUserPassword' => { 'type' => 'password' }, 'dbiUserTable' => { 'type' => 'text' }, 'dbiUserUser' => { 'type' => 'text' }, 'decryptValueFunctions' => { 'msgFail' => '__badCustomFuncName__', 'test' => qr/^(?:\w+(?:::\w+)*(?:\s+\w+(?:::\w+)*)*)?$/, 'type' => 'text' }, 'decryptValueRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'demoExportedVars' => { 'default' => { 'cn' => 'cn', 'mail' => 'mail', 'uid' => 'uid' }, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'disablePersistentStorage' => { 'default' => 0, 'type' => 'bool' }, 'displaySessionId' => { 'default' => 1, 'type' => 'bool' }, 'domain' => { 'default' => 'example.com', 'msgFail' => '__badDomainName__', 'test' => qr/^(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?))?$/, 'type' => 'text' }, 'exportedAttr' => { 'type' => 'text' }, 'exportedHeaders' => { 'keyMsgFail' => '__badHostname__', 'keyTest' => qr/^\S+$/, 'test' => { 'keyMsgFail' => '__badHeaderName__', 'keyTest' => qr/^(?=[^\-])[\w\-]+(?<=[^-])$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'exportedVars' => { 'default' => { 'UA' => 'HTTP_USER_AGENT' }, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[_a-zA-Z][a-zA-Z0-9_]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[_a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'ext2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'ext2fAuthnLevel' => { 'type' => 'int' }, 'ext2fCodeActivation' => { 'default' => '\\d{6}', 'type' => 'pcre' }, 'ext2fLabel' => { 'type' => 'text' }, 'ext2fLogo' => { 'type' => 'text' }, 'ext2fResendInterval' => { 'type' => 'text' }, 'ext2FSendCommand' => { 'type' => 'text' }, 'ext2FValidateCommand' => { 'type' => 'text' }, 'facebookAppId' => { 'type' => 'text' }, 'facebookAppSecret' => { 'type' => 'text' }, 'facebookAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'facebookExportedVars' => { 'default' => {}, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'facebookUserField' => { 'default' => 'id', 'type' => 'text' }, 'failedLoginNumber' => { 'default' => 5, 'type' => 'int' }, 'findUser' => { 'default' => 0, 'type' => 'bool' }, 'findUserControl' => { 'default' => '^[*\\w]+$', 'type' => 'pcre' }, 'findUserExcludingAttributes' => { 'keyTest' => qr/^\S+$/, 'type' => 'keyTextContainer' }, 'findUserSearchingAttributes' => { 'keyTest' => qr/^\S+$/, 'type' => 'keyTextContainer' }, 'findUserWildcard' => { 'default' => '*', 'type' => 'text' }, 'forceGlobalStorageIssuerOTT' => { 'type' => 'bool' }, 'forceGlobalStorageUpgradeOTT' => { 'type' => 'bool' }, 'formTimeout' => { 'default' => 120, 'type' => 'int' }, 'githubAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'githubClientID' => { 'type' => 'text' }, 'githubClientSecret' => { 'type' => 'password' }, 'githubScope' => { 'default' => 'user:email', 'type' => 'text' }, 'githubUserField' => { 'default' => 'login', 'type' => 'text' }, 'globalLogoutCustomParam' => { 'type' => 'text' }, 'globalLogoutRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'globalLogoutTimer' => { 'default' => 1, 'type' => 'bool' }, 'globalStorage' => { 'default' => 'Apache::Session::File', 'type' => 'PerlModule' }, 'globalStorageOptions' => { 'default' => { 'Directory' => '/var/lib/lemonldap-ng/sessions/', 'generateModule' => 'Lemonldap::NG::Common::Apache::Session::Generate::SHA256', 'LockDirectory' => '/var/lib/lemonldap-ng/sessions/lock/' }, 'type' => 'keyTextContainer' }, 'gpgAuthnLevel' => { 'default' => 5, 'type' => 'int' }, 'gpgDb' => { 'default' => '', 'type' => 'text' }, 'grantSessionRules' => { 'default' => {}, 'keyTest' => sub { return perlExpr(@_); }, 'test' => sub { 1; }, 'type' => 'grantContainer' }, 'groups' => { 'default' => {}, 'test' => sub { return perlExpr(@_); }, 'type' => 'keyTextContainer' }, 'groupsBeforeMacros' => { 'default' => 0, 'type' => 'bool' }, 'handlerInternalCache' => { 'default' => 15, 'type' => 'int' }, 'handlerServiceTokenTTL' => { 'default' => 30, 'type' => 'int' }, 'hiddenAttributes' => { 'default' => '_password, _2fDevices', 'type' => 'text' }, 'hideOldPassword' => { 'default' => 0, 'type' => 'bool' }, 'httpOnly' => { 'default' => 1, 'type' => 'bool' }, 'https' => { 'default' => -1, 'type' => 'trool' }, 'impersonationHiddenAttributes' => { 'default' => '_2fDevices, _loginHistory', 'type' => 'text' }, 'impersonationIdRule' => { 'default' => 1, 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'impersonationMergeSSOgroups' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'impersonationPrefix' => { 'default' => 'real_', 'type' => 'text' }, 'impersonationRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'impersonationSkipEmptyValues' => { 'default' => 1, 'type' => 'bool' }, 'impersonationUnrestrictedUsersRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'infoFormMethod' => { 'default' => 'get', 'select' => [ { 'k' => 'get', 'v' => 'GET' }, { 'k' => 'post', 'v' => 'POST' } ], 'type' => 'select' }, 'issuerDBCASActivation' => { 'default' => 0, 'type' => 'bool' }, 'issuerDBCASPath' => { 'default' => '^/cas/', 'type' => 'pcre' }, 'issuerDBCASRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'issuerDBGetActivation' => { 'default' => 0, 'type' => 'bool' }, 'issuerDBGetParameters' => { 'default' => {}, 'keyMsgFail' => '__badHostname__', 'keyTest' => qr/^(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)$/, 'test' => { 'keyMsgFail' => '__badKeyName__', 'keyTest' => qr/^(?=[^\-])[\w\-]+(?<=[^-])$/, 'test' => sub { my ( $val, $conf ) = @_; return 1 if defined $conf->{'macros'}{$val} or $val eq '_timezone'; foreach $_ ( keys %$conf ) { return 1 if $_ =~ /exportedvars$/i and defined $conf->{$_}{$val}; } return 1, "__unknownAttrOrMacro__: $val"; } }, 'type' => 'doubleHash' }, 'issuerDBGetPath' => { 'default' => '^/get/', 'type' => 'text' }, 'issuerDBGetRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'issuerDBOpenIDActivation' => { 'default' => 0, 'type' => 'bool' }, 'issuerDBOpenIDConnectActivation' => { 'default' => 0, 'type' => 'bool' }, 'issuerDBOpenIDConnectPath' => { 'default' => '^/oauth2/', 'type' => 'text' }, 'issuerDBOpenIDConnectRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'issuerDBOpenIDPath' => { 'default' => '^/openidserver/', 'type' => 'pcre' }, 'issuerDBOpenIDRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'issuerDBSAMLActivation' => { 'default' => 0, 'type' => 'bool' }, 'issuerDBSAMLPath' => { 'default' => '^/saml/', 'type' => 'pcre' }, 'issuerDBSAMLRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'issuersTimeout' => { 'default' => 120, 'type' => 'int' }, 'jsRedirect' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'key' => { 'type' => 'password' }, 'krbAllowedDomains' => { 'type' => 'text' }, 'krbAuthnLevel' => { 'default' => 3, 'type' => 'int' }, 'krbByJs' => { 'default' => 0, 'type' => 'bool' }, 'krbKeytab' => { 'type' => 'text' }, 'krbRemoveDomain' => { 'default' => 1, 'type' => 'bool' }, 'ldapAllowResetExpiredPassword' => { 'default' => 0, 'type' => 'bool' }, 'ldapAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'ldapBase' => { 'default' => 'dc=example,dc=com', 'msgFail' => '__badValue__', 'test' => qr/^(?:\w+=.*|)$/, 'type' => 'text' }, 'ldapCAFile' => { 'type' => 'text' }, 'ldapCAPath' => { 'type' => 'text' }, 'ldapChangePasswordAsUser' => { 'default' => 0, 'type' => 'bool' }, 'ldapExportedVars' => { 'default' => { 'cn' => 'cn', 'mail' => 'mail', 'uid' => 'uid' }, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'LDAPFilter' => { 'type' => 'text' }, 'ldapGetUserBeforePasswordChange' => { 'default' => 0, 'type' => 'bool' }, 'ldapGroupAttributeName' => { 'default' => 'member', 'type' => 'text' }, 'ldapGroupAttributeNameGroup' => { 'default' => 'dn', 'type' => 'text' }, 'ldapGroupAttributeNameSearch' => { 'default' => 'cn', 'type' => 'text' }, 'ldapGroupAttributeNameUser' => { 'default' => 'dn', 'type' => 'text' }, 'ldapGroupBase' => { 'type' => 'text' }, 'ldapGroupDecodeSearchedValue' => { 'default' => 0, 'type' => 'bool' }, 'ldapGroupObjectClass' => { 'default' => 'groupOfNames', 'type' => 'text' }, 'ldapGroupRecursive' => { 'default' => 0, 'type' => 'bool' }, 'ldapIOTimeout' => { 'default' => 10, 'type' => 'int' }, 'ldapITDS' => { 'default' => 0, 'type' => 'bool' }, 'ldapPasswordResetAttribute' => { 'default' => 'pwdReset', 'type' => 'text' }, 'ldapPasswordResetAttributeValue' => { 'default' => 'TRUE', 'type' => 'text' }, 'ldapPort' => { 'type' => 'int' }, 'ldapPpolicyControl' => { 'default' => 0, 'type' => 'bool' }, 'ldapPwdEnc' => { 'default' => 'utf-8', 'msgFail' => '__badEncoding__', 'test' => qr/^[a-zA-Z0-9_][a-zA-Z0-9_\-]*[a-zA-Z0-9_]$/, 'type' => 'text' }, 'ldapRaw' => { 'type' => 'text' }, 'ldapSearchDeref' => { 'default' => 'find', 'select' => [ { 'k' => 'never', 'v' => 'never' }, { 'k' => 'search', 'v' => 'search' }, { 'k' => 'find', 'v' => 'find' }, { 'k' => 'always', 'v' => 'always' } ], 'type' => 'select' }, 'ldapServer' => { 'default' => 'ldap://localhost', 'test' => sub { my $l = shift(); my @s = split( /[\s,]+/, $l, 0 ); foreach my $s (@s) { return 0, qq[__badLdapUri__: "$s"] unless $s =~ m[^(?:ldapi://[^/]*/?|\w[\w\-\.]*(?::\d{1,5})?|ldap(?:s|\+tls)?://\w[\w\-\.]*(?::\d{1,5})?/?.*)$]o; } return 1; }, 'type' => 'text' }, 'ldapSetPassword' => { 'default' => 0, 'type' => 'bool' }, 'ldapTimeout' => { 'default' => 10, 'type' => 'int' }, 'ldapUsePasswordResetAttribute' => { 'default' => 1, 'type' => 'bool' }, 'ldapVerify' => { 'default' => 'require', 'select' => [ { 'k' => 'none', 'v' => 'None' }, { 'k' => 'optional', 'v' => 'Optional' }, { 'k' => 'require', 'v' => 'Require' } ], 'type' => 'select' }, 'ldapVersion' => { 'default' => 3, 'type' => 'int' }, 'linkedInAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'linkedInClientID' => { 'type' => 'text' }, 'linkedInClientSecret' => { 'type' => 'password' }, 'linkedInFields' => { 'default' => 'id,first-name,last-name,email-address', 'type' => 'text' }, 'linkedInScope' => { 'default' => 'r_liteprofile r_emailaddress', 'type' => 'text' }, 'linkedInUserField' => { 'default' => 'emailAddress', 'type' => 'text' }, 'localSessionStorage' => { 'default' => 'Cache::FileCache', 'type' => 'PerlModule' }, 'localSessionStorageOptions' => { 'default' => { 'cache_depth' => 3, 'cache_root' => '/var/cache/lemonldap-ng', 'default_expires_in' => 600, 'directory_umask' => '007', 'namespace' => 'lemonldap-ng-sessions' }, 'type' => 'keyTextContainer' }, 'localStorage' => { 'type' => 'text' }, 'localStorageOptions' => { 'type' => 'keyTextContainer' }, 'locationRules' => { 'default' => { 'default' => 'deny' }, 'keyMsgFail' => '__badHostname__', 'keyTest' => qr/^\S+$/, 'test' => { 'keyMsgFail' => '__badRegexp__', 'keyTest' => sub { eval { do { qr/$_[0]/; } }; return $@ ? 0 : 1; }, 'msgFail' => '__badExpression__', 'test' => sub { my ( $val, $conf ) = @_; my $s = $val; if ( $s =~ s/^logout(?:_(?:sso|app(?:_sso)?))?\s*// ) { return $s =~ m[^(?:https?://.*)?$] ? 1 : ( 0, '__badUrl__' ); } $s =~ s/\b(accept|deny|unprotect|skip)\b/1/g; return &perlExpr( $s, $conf ); } }, 'type' => 'ruleContainer' }, 'log4perlConfFile' => { 'type' => 'text' }, 'logger' => { 'type' => 'text' }, 'loginHistoryEnabled' => { 'default' => 0, 'type' => 'bool' }, 'logLevel' => { 'type' => 'text' }, 'logoutServices' => { 'default' => {}, 'type' => 'keyTextContainer' }, 'lwpOpts' => { 'type' => 'keyTextContainer' }, 'lwpSslOpts' => { 'type' => 'keyTextContainer' }, 'macros' => { 'default' => {}, 'keyMsgFail' => '__badMacroName__', 'keyTest' => qr/^[_a-zA-Z][a-zA-Z0-9_]*$/, 'test' => sub { return perlExpr(@_); }, 'type' => 'keyTextContainer' }, 'mail2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'mail2fAuthnLevel' => { 'type' => 'int' }, 'mail2fBody' => { 'type' => 'longtext' }, 'mail2fCodeRegex' => { 'default' => '\\d{6}', 'type' => 'pcre' }, 'mail2fLabel' => { 'type' => 'text' }, 'mail2fLogo' => { 'type' => 'text' }, 'mail2fResendInterval' => { 'type' => 'text' }, 'mail2fSessionKey' => { 'type' => 'text' }, 'mail2fSubject' => { 'type' => 'text' }, 'mail2fTimeout' => { 'type' => 'int' }, 'mailBody' => { 'type' => 'longtext' }, 'mailCharset' => { 'default' => 'utf-8', 'type' => 'text' }, 'mailConfirmBody' => { 'type' => 'longtext' }, 'mailConfirmSubject' => { 'type' => 'text' }, 'mailFrom' => { 'default' => 'noreply@example.com', 'type' => 'text' }, 'mailLDAPFilter' => { 'type' => 'text' }, 'mailOnPasswordChange' => { 'default' => 0, 'type' => 'bool' }, 'mailReplyTo' => { 'type' => 'text' }, 'mailSessionKey' => { 'default' => 'mail', 'type' => 'text' }, 'mailSubject' => { 'type' => 'text' }, 'mailTimeout' => { 'default' => 0, 'type' => 'int' }, 'mailUrl' => { 'default' => 'http://auth.example.com/resetpwd', 'type' => 'url' }, 'maintenance' => { 'default' => 0, 'type' => 'bool' }, 'managerDn' => { 'default' => '', 'msgFail' => '__badValue__', 'test' => qr/^.*$/, 'type' => 'text' }, 'managerPassword' => { 'default' => '', 'msgFail' => '__badValue__', 'test' => qr/^\S*$/, 'type' => 'password' }, 'max2FDevices' => { 'default' => 10, 'type' => 'int' }, 'max2FDevicesNameLength' => { 'default' => 20, 'type' => 'int' }, 'multiValuesSeparator' => { 'default' => '; ', 'type' => 'authParamsText' }, 'mySessionAuthorizedRWKeys' => { 'default' => [ '_appsListOrder', '_oidcConnectedRP', '_oidcConsents' ], 'type' => 'array' }, 'newLocationWarning' => { 'default' => 0, 'type' => 'bool' }, 'newLocationWarningLocationAttribute' => { 'default' => 'ipAddr', 'type' => 'text' }, 'newLocationWarningLocationDisplayAttribute' => { 'default' => '', 'type' => 'text' }, 'newLocationWarningMailAttribute' => { 'type' => 'text' }, 'newLocationWarningMailBody' => { 'type' => 'longtext' }, 'newLocationWarningMailSubject' => { 'type' => 'text' }, 'newLocationWarningMaxValues' => { 'default' => '0', 'type' => 'int' }, 'nginxCustomHandlers' => { 'keyTest' => qr/^\w+$/, 'msgFail' => '__badPerlPackageName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9]*(?:::[a-zA-Z][a-zA-Z0-9]*)*$/, 'type' => 'keyTextContainer' }, 'noAjaxHook' => { 'default' => 0, 'type' => 'bool' }, 'notification' => { 'default' => 0, 'type' => 'bool' }, 'notificationDefaultCond' => { 'default' => '', 'type' => 'text' }, 'notificationServer' => { 'default' => 0, 'type' => 'bool' }, 'notificationServerDELETE' => { 'default' => 0, 'type' => 'bool' }, 'notificationServerGET' => { 'default' => 0, 'type' => 'bool' }, 'notificationServerPOST' => { 'default' => 1, 'type' => 'bool' }, 'notificationServerSentAttributes' => { 'default' => 'uid reference date title subtitle text check', 'type' => 'text' }, 'notificationsExplorer' => { 'default' => 0, 'type' => 'bool' }, 'notificationsMaxRetrieve' => { 'default' => 3, 'type' => 'int' }, 'notificationStorage' => { 'default' => 'File', 'type' => 'PerlModule' }, 'notificationStorageOptions' => { 'default' => { 'dirName' => '/var/lib/lemonldap-ng/notifications' }, 'type' => 'keyTextContainer' }, 'notificationWildcard' => { 'default' => 'allusers', 'type' => 'text' }, 'notificationXSLTfile' => { 'type' => 'text' }, 'notifyDeleted' => { 'default' => 1, 'type' => 'bool' }, 'notifyOther' => { 'default' => 0, 'type' => 'bool' }, 'nullAuthnLevel' => { 'default' => 0, 'type' => 'int' }, 'oidcAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'oidcOPMetaDataExportedVars' => { 'default' => { 'cn' => 'name', 'mail' => 'email', 'sn' => 'family_name', 'uid' => 'sub' }, 'type' => 'keyTextContainer' }, 'oidcOPMetaDataJSON' => { 'keyTest' => sub { 1; }, 'type' => 'file' }, 'oidcOPMetaDataJWKS' => { 'keyTest' => sub { 1; }, 'type' => 'file' }, 'oidcOPMetaDataNodes' => { 'type' => 'oidcOPMetaDataNodeContainer' }, 'oidcOPMetaDataOptions' => { 'type' => 'subContainer' }, 'oidcOPMetaDataOptionsAcrValues' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsCheckJWTSignature' => { 'default' => 1, 'type' => 'bool' }, 'oidcOPMetaDataOptionsClientID' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsClientSecret' => { 'type' => 'password' }, 'oidcOPMetaDataOptionsConfigurationURI' => { 'type' => 'url' }, 'oidcOPMetaDataOptionsDisplay' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => '' }, { 'k' => 'page', 'v' => 'page' }, { 'k' => 'popup', 'v' => 'popup' }, { 'k' => 'touch', 'v' => 'touch' }, { 'k' => 'wap', 'v' => 'wap' } ], 'type' => 'select' }, 'oidcOPMetaDataOptionsDisplayName' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsIcon' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsIDTokenMaxAge' => { 'default' => 30, 'type' => 'int' }, 'oidcOPMetaDataOptionsJWKSTimeout' => { 'default' => 0, 'type' => 'int' }, 'oidcOPMetaDataOptionsMaxAge' => { 'default' => 0, 'type' => 'int' }, 'oidcOPMetaDataOptionsPrompt' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsResolutionRule' => { 'default' => '', 'type' => 'longtext' }, 'oidcOPMetaDataOptionsScope' => { 'default' => 'openid profile', 'type' => 'text' }, 'oidcOPMetaDataOptionsSortNumber' => { 'type' => 'int' }, 'oidcOPMetaDataOptionsStoreIDToken' => { 'default' => 0, 'type' => 'bool' }, 'oidcOPMetaDataOptionsTokenEndpointAuthMethod' => { 'default' => 'client_secret_post', 'select' => [ { 'k' => 'client_secret_post', 'v' => 'client_secret_post' }, { 'k' => 'client_secret_basic', 'v' => 'client_secret_basic' } ], 'type' => 'select' }, 'oidcOPMetaDataOptionsUiLocales' => { 'type' => 'text' }, 'oidcOPMetaDataOptionsUseNonce' => { 'default' => 1, 'type' => 'bool' }, 'oidcRPCallbackGetParam' => { 'default' => 'openidconnectcallback', 'type' => 'text' }, 'oidcRPMetaDataExportedVars' => { 'default' => { 'email' => 'mail', 'family_name' => 'sn', 'name' => 'cn' }, 'keyTest' => qr/\w/, 'test' => qr/\w/, 'type' => 'oidcAttributeContainer' }, 'oidcRPMetaDataMacros' => { 'default' => {}, 'test' => { 'keyMsgFail' => '__badMacroName__', 'keyTest' => qr/^[_a-zA-Z][a-zA-Z0-9_]*$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'oidcRPMetaDataNodes' => { 'type' => 'oidcRPMetaDataNodeContainer' }, 'oidcRPMetaDataOptions' => { 'type' => 'subContainer' }, 'oidcRPMetaDataOptionsAccessTokenClaims' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsAccessTokenExpiration' => { 'type' => 'int' }, 'oidcRPMetaDataOptionsAccessTokenJWT' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsAccessTokenSignAlg' => { 'default' => 'RS256', 'select' => [ { 'k' => 'RS256', 'v' => 'RS256' }, { 'k' => 'RS384', 'v' => 'RS384' }, { 'k' => 'RS512', 'v' => 'RS512' } ], 'type' => 'select' }, 'oidcRPMetaDataOptionsAdditionalAudiences' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsAllowClientCredentialsGrant' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsAllowOffline' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsAllowPasswordGrant' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsAuthnLevel' => { 'type' => 'int' }, 'oidcRPMetaDataOptionsAuthorizationCodeExpiration' => { 'type' => 'int' }, 'oidcRPMetaDataOptionsBypassConsent' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsClientID' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsClientSecret' => { 'type' => 'password' }, 'oidcRPMetaDataOptionsDisplayName' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsExtraClaims' => { 'default' => {}, 'keyTest' => qr/^[\x21\x23-\x5B\x5D-\x7E]+$/, 'type' => 'keyTextContainer' }, 'oidcRPMetaDataOptionsIcon' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsIDTokenExpiration' => { 'type' => 'int' }, 'oidcRPMetaDataOptionsIDTokenForceClaims' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsIDTokenSignAlg' => { 'default' => 'HS512', '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' } ], 'type' => 'select' }, 'oidcRPMetaDataOptionsLogoutBypassConfirm' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsLogoutSessionRequired' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsLogoutType' => { 'default' => 'front', 'select' => [ { 'k' => 'front', 'v' => 'Front Channel' } ], 'type' => 'select' }, 'oidcRPMetaDataOptionsLogoutUrl' => { 'type' => 'url' }, 'oidcRPMetaDataOptionsOfflineSessionExpiration' => { 'type' => 'int' }, 'oidcRPMetaDataOptionsPostLogoutRedirectUris' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsPublic' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsRedirectUris' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsRefreshToken' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsRequirePKCE' => { 'default' => 0, 'type' => 'bool' }, 'oidcRPMetaDataOptionsRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'oidcRPMetaDataOptionsUserIDAttr' => { 'type' => 'text' }, 'oidcRPMetaDataOptionsUserInfoSignAlg' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => 'JSON' }, { 'k' => 'none', 'v' => 'JWT/None' }, { 'k' => 'HS256', 'v' => 'JWT/HS256' }, { 'k' => 'HS384', 'v' => 'JWT/HS384' }, { 'k' => 'HS512', 'v' => 'JWT/HS512' }, { 'k' => 'RS256', 'v' => 'JWT/RS256' }, { 'k' => 'RS384', 'v' => 'JWT/RS384' }, { 'k' => 'RS512', 'v' => 'JWT/RS512' } ], 'type' => 'select' }, 'oidcRPMetaDataScopeRules' => { 'default' => {}, 'test' => { 'keyMsgFail' => '__badMacroName__', 'keyTest' => qr/^[\x21\x23-\x5B\x5D-\x7E]+$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'oidcRPStateTimeout' => { 'default' => 600, 'type' => 'int' }, 'oidcServiceAccessTokenExpiration' => { 'default' => 3600, 'type' => 'int' }, 'oidcServiceAllowAuthorizationCodeFlow' => { 'default' => 1, 'type' => 'bool' }, 'oidcServiceAllowDynamicRegistration' => { 'default' => 0, 'type' => 'bool' }, 'oidcServiceAllowHybridFlow' => { 'default' => 0, 'type' => 'bool' }, 'oidcServiceAllowImplicitFlow' => { 'default' => 0, 'type' => 'bool' }, 'oidcServiceAllowOnlyDeclaredScopes' => { 'default' => 0, 'type' => 'bool' }, 'oidcServiceAuthorizationCodeExpiration' => { 'default' => 60, 'type' => 'int' }, 'oidcServiceDynamicRegistrationExportedVars' => { 'type' => 'keyTextContainer' }, 'oidcServiceDynamicRegistrationExtraClaims' => { 'keyTest' => qr/^[\x21\x23-\x5B\x5D-\x7E]+$/, 'type' => 'keyTextContainer' }, 'oidcServiceIDTokenExpiration' => { 'default' => 3600, 'type' => 'int' }, 'oidcServiceKeyIdSig' => { 'type' => 'text' }, 'oidcServiceMetaDataAuthnContext' => { 'default' => { 'loa-1' => 1, 'loa-2' => 2, 'loa-3' => 3, 'loa-4' => 4, 'loa-5' => 5 }, 'keyTest' => qr/\w/, 'type' => 'keyTextContainer' }, 'oidcServiceMetaDataAuthorizeURI' => { 'default' => 'authorize', 'type' => 'text' }, 'oidcServiceMetaDataBackChannelURI' => { 'default' => 'blogout', 'type' => 'text' }, 'oidcServiceMetaDataCheckSessionURI' => { 'default' => 'checksession.html', 'type' => 'text' }, 'oidcServiceMetaDataEndSessionURI' => { 'default' => 'logout', 'type' => 'text' }, 'oidcServiceMetaDataFrontChannelURI' => { 'default' => 'flogout', 'type' => 'text' }, 'oidcServiceMetaDataIntrospectionURI' => { 'default' => 'introspect', 'type' => 'text' }, 'oidcServiceMetaDataIssuer' => { 'type' => 'text' }, 'oidcServiceMetaDataJWKSURI' => { 'default' => 'jwks', 'type' => 'text' }, 'oidcServiceMetaDataRegistrationURI' => { 'default' => 'register', 'type' => 'text' }, 'oidcServiceMetaDataTokenURI' => { 'default' => 'token', 'type' => 'text' }, 'oidcServiceMetaDataUserInfoURI' => { 'default' => 'userinfo', 'type' => 'text' }, 'oidcServiceOfflineSessionExpiration' => { 'default' => 2592000, 'type' => 'int' }, 'oidcServicePrivateKeySig' => { 'type' => 'RSAPrivateKey' }, 'oidcServicePublicKeySig' => { 'type' => 'RSAPublicKey' }, 'oidcStorage' => { 'type' => 'PerlModule' }, 'oidcStorageOptions' => { 'type' => 'keyTextContainer' }, 'oldNotifFormat' => { 'default' => 0, 'type' => 'bool' }, 'openIdAttr' => { 'type' => 'text' }, 'openIdAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'openIdExportedVars' => { 'default' => {}, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'openIdIDPList' => { 'default' => '0;', 'type' => 'blackWhiteList' }, 'openIdIssuerSecret' => { 'type' => 'text' }, 'openIdSecret' => { 'type' => 'text' }, 'openIdSPList' => { 'default' => '0;', 'type' => 'blackWhiteList' }, 'openIdSreg_country' => { 'type' => 'lmAttrOrMacro' }, 'openIdSreg_dob' => { 'type' => 'lmAttrOrMacro' }, 'openIdSreg_email' => { 'default' => 'mail', 'type' => 'lmAttrOrMacro' }, 'openIdSreg_fullname' => { 'default' => 'cn', 'type' => 'lmAttrOrMacro' }, 'openIdSreg_gender' => { 'type' => 'lmAttrOrMacro' }, 'openIdSreg_language' => { 'type' => 'lmAttrOrMacro' }, 'openIdSreg_nickname' => { 'default' => 'uid', 'type' => 'lmAttrOrMacro' }, 'openIdSreg_postcode' => { 'type' => 'lmAttrOrMacro' }, 'openIdSreg_timezone' => { 'default' => '_timezone', 'type' => 'lmAttrOrMacro' }, 'pamAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'pamService' => { 'default' => 'login', 'type' => 'text' }, 'passwordDB' => { 'default' => 'Demo', 'select' => [ { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'Choice', 'v' => 'authChoice' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'Demo', 'v' => 'Demonstration' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Combination', 'v' => 'combineMods' }, { 'k' => 'Custom', 'v' => 'customModule' } ], 'type' => 'select' }, 'passwordPolicyActivation' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'passwordPolicyMinDigit' => { 'default' => 0, 'type' => 'int' }, 'passwordPolicyMinLower' => { 'default' => 0, 'type' => 'int' }, 'passwordPolicyMinSize' => { 'default' => 0, 'type' => 'int' }, 'passwordPolicyMinSpeChar' => { 'default' => 0, 'type' => 'int' }, 'passwordPolicyMinUpper' => { 'default' => 0, 'type' => 'int' }, 'passwordPolicySpecialChar' => { 'default' => '__ALL__', 'test' => qr/^(?:__ALL__|[\S\W]*)$/, 'type' => 'text' }, 'passwordResetAllowedRetries' => { 'default' => 3, 'type' => 'int' }, 'pdataDomain' => { 'default' => '', 'msgFail' => '__badDomainName__', 'test' => qr/^(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?))?$/, 'type' => 'text' }, 'persistentSessionAttributes' => { 'default' => '_loginHistory _2fDevices notification_', 'type' => 'text' }, 'persistentStorage' => { 'type' => 'PerlModule' }, 'persistentStorageOptions' => { 'type' => 'keyTextContainer' }, 'port' => { 'default' => -1, 'type' => 'int' }, 'portal' => { 'default' => 'http://auth.example.com/', 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'url' }, 'portalAntiFrame' => { 'default' => 1, 'type' => 'bool' }, 'portalCheckLogins' => { 'default' => 1, 'type' => 'bool' }, 'portalCustomCss' => { 'type' => 'text' }, 'portalDisplayAppslist' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'portalDisplayCertificateResetByMail' => { 'default' => 0, 'type' => 'bool' }, 'portalDisplayChangePassword' => { 'default' => '$_auth =~ /^(LDAP|DBI|Demo)$/', 'type' => 'boolOrExpr' }, 'portalDisplayGeneratePassword' => { 'default' => 1, 'type' => 'bool' }, 'portalDisplayLoginHistory' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'portalDisplayLogout' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'portalDisplayOidcConsents' => { 'default' => '$_oidcConsents && $_oidcConsents =~ /\\w+/', 'type' => 'boolOrExpr' }, 'portalDisplayPasswordPolicy' => { 'default' => 0, 'type' => 'bool' }, 'portalDisplayRefreshMyRights' => { 'default' => 1, 'type' => 'bool' }, 'portalDisplayRegister' => { 'default' => 1, 'type' => 'bool' }, 'portalDisplayResetPassword' => { 'default' => 0, 'type' => 'bool' }, 'portalEnablePasswordDisplay' => { 'default' => 0, 'type' => 'bool' }, 'portalErrorOnExpiredSession' => { 'default' => 1, 'type' => 'bool' }, 'portalErrorOnMailNotFound' => { 'default' => 0, 'type' => 'bool' }, 'portalFavicon' => { 'default' => 'common/favicon.ico', 'type' => 'text' }, 'portalForceAuthn' => { 'default' => 0, 'type' => 'bool' }, 'portalForceAuthnInterval' => { 'default' => 5, 'type' => 'int' }, 'portalMainLogo' => { 'default' => 'common/logos/logo_llng_400px.png', 'type' => 'text' }, 'portalOpenLinkInNewWindow' => { 'default' => 0, 'type' => 'bool' }, 'portalPingInterval' => { 'default' => 60000, 'type' => 'int' }, 'portalRequireOldPassword' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'portalSkin' => { 'default' => 'bootstrap', 'select' => [ { 'k' => 'bootstrap', 'v' => 'Bootstrap' } ], 'type' => 'portalskin' }, 'portalSkinBackground' => { 'select' => [ { 'k' => '', 'v' => 'None' }, { 'k' => '1280px-Anse_Source_d\'Argent_2-La_Digue.jpg', 'v' => 'Anse' }, { 'k' => '1280px-Autumn-clear-water-waterfall-landscape_-_Virginia_-_ForestWander.jpg', 'v' => 'Waterfall' }, { 'k' => '1280px-BrockenSnowedTrees.jpg', 'v' => 'Snowed Trees' }, { 'k' => '1280px-Cedar_Breaks_National_Monument_partially.jpg', 'v' => 'National Monument' }, { 'k' => '1280px-Parry_Peak_from_Winter_Park.jpg', 'v' => 'Winter' }, { 'k' => 'Aletschgletscher_mit_Pinus_cembra1.jpg', 'v' => 'Pinus' } ], 'type' => 'portalskinbackground' }, 'portalSkinRules' => { 'keyMsgFail' => '__badSkinRule__', 'keyTest' => sub { return perlExpr(@_); }, 'msgFail' => '__badValue__', 'test' => sub { 1; }, 'type' => 'keyTextContainer' }, 'portalStatus' => { 'default' => 0, 'type' => 'bool' }, 'portalUserAttr' => { 'default' => '_user', 'type' => 'text' }, 'post' => { 'keyMsgFail' => '__badHostname__', 'keyTest' => qr/^\S+$/, 'test' => sub { 1; }, 'type' => 'postContainer' }, 'protection' => { 'msgFail' => '__authorizedValues__: none authenticate manager', 'test' => qr/^(?:none|authenticate|manager|)$/, 'type' => 'text' }, 'proxyAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'proxyAuthService' => { 'type' => 'text' }, 'proxyAuthServiceChoiceParam' => { 'default' => 'lmAuth', 'type' => 'text' }, 'proxyAuthServiceChoiceValue' => { 'type' => 'text' }, 'proxyAuthServiceImpersonation' => { 'default' => 0, 'type' => 'bool' }, 'proxyCookieName' => { 'msgFail' => '__badCookieName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'type' => 'text' }, 'proxySessionService' => { 'type' => 'text' }, 'proxyUseSoap' => { 'default' => 0, 'type' => 'bool' }, 'radius2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'radius2fAuthnLevel' => { 'type' => 'int' }, 'radius2fLabel' => { 'type' => 'text' }, 'radius2fLogo' => { 'type' => 'text' }, 'radius2fSecret' => { 'type' => 'text' }, 'radius2fServer' => { 'type' => 'text' }, 'radius2fTimeout' => { 'default' => 20, 'type' => 'int' }, 'radius2fUsernameSessionKey' => { 'type' => 'text' }, 'radiusAuthnLevel' => { 'default' => 3, 'type' => 'int' }, 'radiusSecret' => { 'type' => 'text' }, 'radiusServer' => { 'type' => 'text' }, 'randomPasswordRegexp' => { 'default' => '[A-Z]{3}[a-z]{5}.\\d{2}', 'type' => 'pcre' }, 'redirectFormMethod' => { 'default' => 'get', 'select' => [ { 'k' => 'get', 'v' => 'GET' }, { 'k' => 'post', 'v' => 'POST' } ], 'type' => 'select' }, 'refreshSessions' => { 'type' => 'bool' }, 'registerConfirmBody' => { 'type' => 'longtext' }, 'registerConfirmSubject' => { 'type' => 'text' }, 'registerDB' => { 'default' => 'Null', 'select' => [ { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'Demo', 'v' => 'Demonstration' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Custom', 'v' => 'customModule' } ], 'type' => 'select' }, 'registerDoneBody' => { 'type' => 'longtext' }, 'registerDoneSubject' => { 'type' => 'text' }, 'registerTimeout' => { 'default' => 0, 'type' => 'int' }, 'registerUrl' => { 'default' => 'http://auth.example.com/register', 'type' => 'text' }, 'reloadTimeout' => { 'default' => 5, 'type' => 'int' }, 'reloadUrls' => { 'keyTest' => qr/^(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+))(?::\d+)?$/, 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'keyTextContainer' }, 'rememberAuthChoiceRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'rememberCookieName' => { 'default' => 'llngrememberauthchoice', 'msgFail' => '__badCookieName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'type' => 'text' }, 'rememberCookieTimeout' => { 'default' => 31536000, 'type' => 'int' }, 'rememberDefaultChecked' => { 'default' => 0, 'type' => 'bool' }, 'rememberTimer' => { 'default' => 5, 'type' => 'int' }, 'remoteCookieName' => { 'msgFail' => '__badCookieName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'type' => 'text' }, 'remoteGlobalStorage' => { 'default' => 'Lemonldap::NG::Common::Apache::Session::SOAP', 'type' => 'PerlModule' }, 'remoteGlobalStorageOptions' => { 'default' => { 'ns' => 'http://auth.example.com/Lemonldap/NG/Common/PSGI/SOAPService', 'proxy' => 'http://auth.example.com/sessions' }, 'type' => 'keyTextContainer' }, 'remotePortal' => { 'type' => 'text' }, 'requireToken' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'rest2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'rest2fAuthnLevel' => { 'type' => 'int' }, 'rest2fCodeActivation' => { 'type' => 'pcre' }, 'rest2fInitArgs' => { 'keyMsgFail' => '__badKeyName__', 'keyTest' => qr/^\w+$/, 'msgFail' => '__badValue__', 'test' => qr/^\w+$/, 'type' => 'keyTextContainer' }, 'rest2fInitUrl' => { 'type' => 'url' }, 'rest2fLabel' => { 'type' => 'text' }, 'rest2fLogo' => { 'type' => 'text' }, 'rest2fResendInterval' => { 'type' => 'text' }, 'rest2fVerifyArgs' => { 'type' => 'keyTextContainer' }, 'rest2fVerifyUrl' => { 'keyMsgFail' => '__badKeyName__', 'keyTest' => qr/^\w+$/, 'msgFail' => '__badValue__', 'test' => qr/^\w+$/, 'type' => 'url' }, 'restAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'restAuthServer' => { 'default' => 0, 'type' => 'bool' }, 'restAuthUrl' => { 'type' => 'url' }, 'restClockTolerance' => { 'default' => 15, 'type' => 'int' }, 'restConfigServer' => { 'default' => 0, 'type' => 'bool' }, 'restExportSecretKeys' => { 'default' => 0, 'type' => 'bool' }, 'restFindUserDBUrl' => { 'type' => 'url' }, 'restPasswordServer' => { 'default' => 0, 'type' => 'bool' }, 'restPwdConfirmUrl' => { 'type' => 'url' }, 'restPwdModifyUrl' => { 'type' => 'url' }, 'restSessionServer' => { 'default' => 0, 'type' => 'bool' }, 'restUserDBUrl' => { 'type' => 'url' }, 'sameSite' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => '' }, { 'k' => 'Strict', 'v' => 'Strict' }, { 'k' => 'Lax', 'v' => 'Lax' }, { 'k' => 'None', 'v' => 'None' } ], 'type' => 'select' }, 'samlAttributeAuthorityDescriptorAttributeServiceSOAP' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/AA/SOAP;', 'type' => 'samlService' }, 'samlAuthnContextMapKerberos' => { 'default' => 4, 'type' => 'int' }, 'samlAuthnContextMapPassword' => { 'default' => 2, 'type' => 'int' }, 'samlAuthnContextMapPasswordProtectedTransport' => { 'default' => 3, 'type' => 'int' }, 'samlAuthnContextMapTLSClient' => { 'default' => 5, 'type' => 'int' }, 'samlCommonDomainCookieActivation' => { 'default' => 0, 'type' => 'bool' }, 'samlCommonDomainCookieDomain' => { 'msgFail' => '__badDomainName__', 'test' => qr/^(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)$/, 'type' => 'text' }, 'samlCommonDomainCookieReader' => { 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'text' }, 'samlCommonDomainCookieWriter' => { 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'text' }, 'samlDiscoveryProtocolActivation' => { 'default' => 0, 'type' => 'bool' }, 'samlDiscoveryProtocolIsPassive' => { 'default' => 0, 'type' => 'bool' }, 'samlDiscoveryProtocolPolicy' => { 'type' => 'text' }, 'samlDiscoveryProtocolURL' => { 'msgFail' => '__badUrl__', 'test' => qr/(?:(?:https?):\/\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)))(?::(?:(?:[0-9]*)))?(?:\/(?:(?:(?:(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*)(?:\/(?:(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)(?:;(?:(?:[a-zA-Z0-9\-_.!~*'():@&=+\$,]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*))*))*))(?:[?](?:(?:(?:[;\/?:@&=+\$,a-zA-Z0-9\-_.!~*'()]+|(?:%[a-fA-F0-9][a-fA-F0-9]))*)))?))?)/, 'type' => 'text' }, 'samlEntityID' => { 'default' => '#PORTAL#/saml/metadata', 'type' => 'text' }, 'samlIDPMetaDataExportedAttributes' => { 'default' => {}, 'keyMsgFail' => '__badMetadataName__', 'keyTest' => qr/^[a-zA-Z](?:[a-zA-Z0-9_\-\.]*\w)?$/, 'msgFail' => '__badValue__', 'test' => qr/\w/, 'type' => 'samlAttributeContainer' }, 'samlIDPMetaDataNodes' => { 'type' => 'samlIDPMetaDataNodeContainer' }, 'samlIDPMetaDataOptions' => { 'keyMsgFail' => '__badMetadataName__', 'keyTest' => qr/^[a-zA-Z](?:[a-zA-Z0-9_\-\.]*\w)?$/, 'type' => 'keyTextContainer' }, 'samlIDPMetaDataOptionsAdaptSessionUtime' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsAllowLoginFromIDP' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsCheckAudience' => { 'default' => 1, 'type' => 'bool' }, 'samlIDPMetaDataOptionsCheckSLOMessageSignature' => { 'default' => 1, 'type' => 'bool' }, 'samlIDPMetaDataOptionsCheckSSOMessageSignature' => { 'default' => 1, 'type' => 'bool' }, 'samlIDPMetaDataOptionsCheckTime' => { 'default' => 1, 'type' => 'bool' }, 'samlIDPMetaDataOptionsDisplayName' => { 'type' => 'text' }, 'samlIDPMetaDataOptionsEncryptionMode' => { 'default' => 'none', 'select' => [ { 'k' => 'none', 'v' => 'None' }, { 'k' => 'nameid', 'v' => 'Name ID' }, { 'k' => 'assertion', 'v' => 'Assertion' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsForceAuthn' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsForceUTF8' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsIcon' => { 'type' => 'text' }, 'samlIDPMetaDataOptionsIsPassive' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsNameIDFormat' => { 'default' => '', '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' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsRelayStateURL' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsRequestedAuthnContext' => { 'default' => '', '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' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsResolutionRule' => { 'default' => '', 'type' => 'longtext' }, 'samlIDPMetaDataOptionsSignatureMethod' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => 'default' }, { 'k' => 'RSA_SHA1', 'v' => 'RSA SHA1' }, { 'k' => 'RSA_SHA256', 'v' => 'RSA SHA256' }, { 'k' => 'RSA_SHA384', 'v' => 'RSA SHA384' }, { 'k' => 'RSA_SHA512', 'v' => 'RSA SHA512' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsSignSLOMessage' => { 'default' => -1, 'type' => 'trool' }, 'samlIDPMetaDataOptionsSignSSOMessage' => { 'default' => -1, 'type' => 'trool' }, 'samlIDPMetaDataOptionsSLOBinding' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => '' }, { 'k' => 'http-post', 'v' => 'POST' }, { 'k' => 'http-redirect', 'v' => 'Redirect' }, { 'k' => 'http-soap', 'v' => 'SOAP' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsSortNumber' => { 'type' => 'int' }, 'samlIDPMetaDataOptionsSSOBinding' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => '' }, { 'k' => 'http-post', 'v' => 'POST' }, { 'k' => 'http-redirect', 'v' => 'Redirect' }, { 'k' => 'artifact-get', 'v' => 'Artifact GET' } ], 'type' => 'select' }, 'samlIDPMetaDataOptionsStoreSAMLToken' => { 'default' => 0, 'type' => 'bool' }, 'samlIDPMetaDataOptionsUserAttribute' => { 'type' => 'text' }, 'samlIDPMetaDataXML' => { 'test' => sub { my $v = shift(); return 1 unless $v and %$v; my @msg; my $res = 1; my %entityIds; foreach my $idpId ( keys %$v ) { unless ( $v->{$idpId}{'samlIDPMetaDataXML'} =~ /entityID="(.+?)"/is ) { push @msg, "$idpId SAML metadata has no EntityID"; $res = 0; next; } my $eid = $1; if ( defined $entityIds{$eid} ) { push @msg, "$idpId and $entityIds{$eid} have the same SAML EntityID"; $res = 0; next; } $entityIds{$eid} = $idpId; } return $res, join( ', ', @msg ); }, 'type' => 'file' }, 'samlIDPSSODescriptorArtifactResolutionServiceArtifact' => { 'default' => '1;0;urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/artifact', 'type' => 'samlAssertion' }, 'samlIDPSSODescriptorSingleLogoutServiceHTTPPost' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleLogout;#PORTAL#/saml/singleLogoutReturn', 'type' => 'samlService' }, 'samlIDPSSODescriptorSingleLogoutServiceHTTPRedirect' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/singleLogout;#PORTAL#/saml/singleLogoutReturn', 'type' => 'samlService' }, 'samlIDPSSODescriptorSingleLogoutServiceSOAP' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/singleLogoutSOAP;', 'type' => 'samlService' }, 'samlIDPSSODescriptorSingleSignOnServiceHTTPArtifact' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact;#PORTAL#/saml/singleSignOnArtifact;', 'type' => 'samlService' }, 'samlIDPSSODescriptorSingleSignOnServiceHTTPPost' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/singleSignOn;', 'type' => 'samlService' }, 'samlIDPSSODescriptorSingleSignOnServiceHTTPRedirect' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/singleSignOn;', 'type' => 'samlService' }, 'samlIDPSSODescriptorWantAuthnRequestsSigned' => { 'default' => 1, 'type' => 'bool' }, 'samlMetadataForceUTF8' => { 'default' => 1, 'type' => 'bool' }, 'samlNameIDFormatMapEmail' => { 'default' => 'mail', 'type' => 'text' }, 'samlNameIDFormatMapKerberos' => { 'default' => 'uid', 'type' => 'text' }, 'samlNameIDFormatMapWindows' => { 'default' => 'uid', 'type' => 'text' }, 'samlNameIDFormatMapX509' => { 'default' => 'mail', 'type' => 'text' }, 'samlOrganizationDisplayName' => { 'default' => 'Example', 'type' => 'text' }, 'samlOrganizationName' => { 'default' => 'Example', 'type' => 'text' }, 'samlOrganizationURL' => { 'default' => 'http://www.example.com', 'type' => 'text' }, 'samlOverrideIDPEntityID' => { 'default' => '', 'type' => 'text' }, 'samlRelayStateTimeout' => { 'default' => 600, 'type' => 'int' }, 'samlServicePrivateKeyEnc' => { 'default' => '', 'type' => 'RSAPrivateKey' }, 'samlServicePrivateKeyEncPwd' => { 'type' => 'password' }, 'samlServicePrivateKeySig' => { 'default' => '', 'type' => 'RSAPrivateKey' }, 'samlServicePrivateKeySigPwd' => { 'default' => '', 'type' => 'password' }, 'samlServicePublicKeyEnc' => { 'default' => '', 'type' => 'RSAPublicKeyOrCertificate' }, 'samlServicePublicKeySig' => { 'default' => '', 'type' => 'RSAPublicKeyOrCertificate' }, 'samlServiceSignatureMethod' => { 'default' => 'RSA_SHA256', 'select' => [ { 'k' => 'RSA_SHA1', 'v' => 'RSA SHA1' }, { 'k' => 'RSA_SHA256', 'v' => 'RSA SHA256' }, { 'k' => 'RSA_SHA384', 'v' => 'RSA SHA384' }, { 'k' => 'RSA_SHA512', 'v' => 'RSA SHA512' } ], 'type' => 'select' }, 'samlServiceUseCertificateInResponse' => { 'default' => 0, 'type' => 'bool' }, 'samlSPMetaDataExportedAttributes' => { 'default' => {}, 'keyMsgFail' => '__badMetadataName__', 'keyTest' => qr/^[a-zA-Z](?:[a-zA-Z0-9_\-\.]*\w)?$/, 'msgFail' => '__badValue__', 'test' => qr/\w/, 'type' => 'samlAttributeContainer' }, 'samlSPMetaDataMacros' => { 'default' => {}, 'test' => { 'keyMsgFail' => '__badMacroName__', 'keyTest' => qr/^[_a-zA-Z][a-zA-Z0-9_]*$/, 'test' => sub { return perlExpr(@_); } }, 'type' => 'keyTextContainer' }, 'samlSPMetaDataNodes' => { 'type' => 'samlSPMetaDataNodeContainer' }, 'samlSPMetaDataOptions' => { 'keyMsgFail' => '__badMetadataName__', 'keyTest' => qr/^[a-zA-Z](?:[a-zA-Z0-9_\-\.]*\w)?$/, 'type' => 'keyTextContainer' }, 'samlSPMetaDataOptionsAuthnLevel' => { 'type' => 'int' }, 'samlSPMetaDataOptionsCheckSLOMessageSignature' => { 'default' => 1, 'type' => 'bool' }, 'samlSPMetaDataOptionsCheckSSOMessageSignature' => { 'default' => 1, 'type' => 'bool' }, 'samlSPMetaDataOptionsEnableIDPInitiatedURL' => { 'default' => 0, 'type' => 'bool' }, 'samlSPMetaDataOptionsEncryptionMode' => { 'default' => 'none', 'select' => [ { 'k' => 'none', 'v' => 'None' }, { 'k' => 'nameid', 'v' => 'Name ID' }, { 'k' => 'assertion', 'v' => 'Assertion' } ], 'type' => 'select' }, 'samlSPMetaDataOptionsForceUTF8' => { 'default' => 1, 'type' => 'bool' }, 'samlSPMetaDataOptionsNameIDFormat' => { 'default' => '', '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' } ], 'type' => 'select' }, 'samlSPMetaDataOptionsNameIDSessionKey' => { 'type' => 'text' }, 'samlSPMetaDataOptionsNotOnOrAfterTimeout' => { 'default' => 72000, 'type' => 'int' }, 'samlSPMetaDataOptionsOneTimeUse' => { 'default' => 0, 'type' => 'bool' }, 'samlSPMetaDataOptionsRule' => { 'test' => sub { return perlExpr(@_); }, 'type' => 'text' }, 'samlSPMetaDataOptionsSessionNotOnOrAfterTimeout' => { 'default' => 72000, 'type' => 'int' }, 'samlSPMetaDataOptionsSignatureMethod' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => 'default' }, { 'k' => 'RSA_SHA1', 'v' => 'RSA SHA1' }, { 'k' => 'RSA_SHA256', 'v' => 'RSA SHA256' }, { 'k' => 'RSA_SHA384', 'v' => 'RSA SHA384' }, { 'k' => 'RSA_SHA512', 'v' => 'RSA SHA512' } ], 'type' => 'select' }, 'samlSPMetaDataOptionsSignSLOMessage' => { 'default' => -1, 'type' => 'trool' }, 'samlSPMetaDataOptionsSignSSOMessage' => { 'default' => -1, 'type' => 'trool' }, 'samlSPMetaDataXML' => { 'type' => 'file' }, 'samlSPSSODescriptorArtifactResolutionServiceArtifact' => { 'default' => '1;0;urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/artifact', 'type' => 'samlAssertion' }, 'samlSPSSODescriptorAssertionConsumerServiceHTTPArtifact' => { 'default' => '0;1;urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Artifact;#PORTAL#/saml/proxySingleSignOnArtifact', 'type' => 'samlAssertion' }, 'samlSPSSODescriptorAssertionConsumerServiceHTTPPost' => { 'default' => '1;0;urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/proxySingleSignOnPost', 'type' => 'samlAssertion' }, 'samlSPSSODescriptorAuthnRequestsSigned' => { 'default' => 1, 'type' => 'bool' }, 'samlSPSSODescriptorSingleLogoutServiceHTTPPost' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST;#PORTAL#/saml/proxySingleLogout;#PORTAL#/saml/proxySingleLogoutReturn', 'type' => 'samlService' }, 'samlSPSSODescriptorSingleLogoutServiceHTTPRedirect' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect;#PORTAL#/saml/proxySingleLogout;#PORTAL#/saml/proxySingleLogoutReturn', 'type' => 'samlService' }, 'samlSPSSODescriptorSingleLogoutServiceSOAP' => { 'default' => 'urn:oasis:names:tc:SAML:2.0:bindings:SOAP;#PORTAL#/saml/proxySingleLogoutSOAP;', 'type' => 'samlService' }, 'samlSPSSODescriptorWantAssertionsSigned' => { 'default' => 1, 'type' => 'bool' }, 'samlStorage' => { 'type' => 'PerlModule' }, 'samlStorageOptions' => { 'type' => 'keyTextContainer' }, 'samlUseQueryStringSpecific' => { 'default' => 0, 'type' => 'bool' }, 'scrollTop' => { 'default' => 400, 'type' => 'int' }, 'securedCookie' => { 'default' => 0, 'select' => [ { 'k' => '0', 'v' => 'unsecuredCookie' }, { 'k' => '1', 'v' => 'securedCookie' }, { 'k' => '2', 'v' => 'doubleCookie' }, { 'k' => '3', 'v' => 'doubleCookieForSingleSession' } ], 'type' => 'select' }, 'secureTokenAllowOnError' => { 'type' => 'text' }, 'secureTokenAttribute' => { 'type' => 'text' }, 'secureTokenExpiration' => { 'type' => 'text' }, 'secureTokenHeader' => { 'type' => 'text' }, 'secureTokenMemcachedServers' => { 'type' => 'text' }, 'secureTokenUrls' => { 'type' => 'text' }, 'sentryDsn' => { 'type' => 'text' }, 'sessionDataToRemember' => { 'keyMsgFail' => '__invalidSessionData__', 'keyTest' => qr/^[_a-zA-Z][a-zA-Z0-9_]*$/, 'type' => 'keyTextContainer' }, 'sfEngine' => { 'default' => '::2F::Engines::Default', 'type' => 'text' }, 'sfExtra' => { 'keyTest' => qr/^\w+$/, 'select' => [ { 'k' => 'Mail2F', 'v' => 'E-Mail' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Ext2F', 'v' => 'External' }, { 'k' => 'Radius', 'v' => 'Radius' } ], 'test' => sub { 1; }, 'type' => 'sfExtraContainer' }, 'sfLoginTimeout' => { 'type' => 'int' }, 'sfManagerRule' => { 'default' => 1, 'type' => 'boolOrExpr' }, 'sfOnlyUpgrade' => { 'type' => 'bool' }, 'sfRegisterTimeout' => { 'type' => 'int' }, 'sfRemovedMsgRule' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'sfRemovedNotifMsg' => { 'default' => '_removedSF_ expired second factor(s) has/have been removed (_nameSF_)!', 'type' => 'text' }, 'sfRemovedNotifRef' => { 'default' => 'RemoveSF', 'type' => 'text' }, 'sfRemovedNotifTitle' => { 'default' => 'Second factor notification', 'type' => 'text' }, 'sfRemovedUseNotif' => { 'default' => 0, 'type' => 'bool' }, 'sfRequired' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'showLanguages' => { 'default' => 1, 'type' => 'bool' }, 'singleIP' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'singleSession' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'singleUserByIP' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'skipRenewConfirmation' => { 'default' => 0, 'type' => 'bool' }, 'skipUpgradeConfirmation' => { 'default' => 0, 'type' => 'bool' }, 'slaveAuthnLevel' => { 'default' => 2, 'type' => 'int' }, 'slaveDisplayLogo' => { 'default' => 0, 'type' => 'bool' }, 'slaveExportedVars' => { 'default' => {}, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'slaveHeaderContent' => { 'type' => 'text' }, 'slaveHeaderName' => { 'type' => 'text' }, 'slaveMasterIP' => { 'msgFail' => '__badIPv4Address__', 'test' => qr/^((?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+)\s*)*$/, 'type' => 'text' }, 'slaveUserHeader' => { 'type' => 'text' }, 'SMTPAuthPass' => { 'type' => 'password' }, 'SMTPAuthUser' => { 'type' => 'text' }, 'SMTPPort' => { 'type' => 'int' }, 'SMTPServer' => { 'default' => '', 'test' => qr/^(?:(?:(?:(?:(?:(?:[a-zA-Z0-9][-a-zA-Z0-9]*)?[a-zA-Z0-9])[.])*(?:[a-zA-Z][-a-zA-Z0-9]*[a-zA-Z0-9]|[a-zA-Z])[.]?)|(?:[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+))(?::\d+)?)?$/, 'type' => 'text' }, 'SMTPTLS' => { 'default' => '', 'select' => [ { 'k' => '', 'v' => 'none' }, { 'k' => 'starttls', 'v' => 'SMTP + STARTTLS' }, { 'k' => 'ssl', 'v' => 'SMTPS' } ], 'type' => 'select' }, 'SMTPTLSOpts' => { 'type' => 'keyTextContainer' }, 'soapConfigServer' => { 'default' => 0, 'type' => 'bool' }, 'soapProxyUrn' => { 'default' => 'urn:Lemonldap/NG/Common/PSGI/SOAPService', 'type' => 'text' }, 'soapSessionServer' => { 'default' => 0, 'type' => 'bool' }, 'SSLAuthnLevel' => { 'default' => 5, 'type' => 'int' }, 'sslByAjax' => { 'default' => 0, 'type' => 'bool' }, 'sslHost' => { 'type' => 'url' }, 'SSLVar' => { 'default' => 'SSL_CLIENT_S_DN_Email', 'type' => 'text' }, 'SSLVarIf' => { 'default' => {}, 'keyTest' => sub { 1; }, 'type' => 'keyTextContainer' }, 'staticPrefix' => { 'type' => 'text' }, 'status' => { 'type' => 'bool' }, 'stayConnected' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'stayConnectedBypassFG' => { 'default' => 0, 'type' => 'bool' }, 'stayConnectedCookieName' => { 'default' => 'llngconnection', 'msgFail' => '__badCookieName__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_-]*$/, 'type' => 'text' }, 'stayConnectedTimeout' => { 'default' => 2592000, 'type' => 'int' }, 'storePassword' => { 'default' => 0, 'type' => 'bool' }, 'strictTransportSecurityMax_Age' => { 'type' => 'text' }, 'successLoginNumber' => { 'default' => 5, 'type' => 'int' }, 'syslogFacility' => { 'type' => 'text' }, 'timeout' => { 'default' => 72000, 'test' => sub { $_[0] > 0; }, 'type' => 'int' }, 'timeoutActivity' => { 'default' => 0, 'test' => sub { $_[0] >= 0; }, 'type' => 'int' }, 'timeoutActivityInterval' => { 'default' => 60, 'test' => sub { $_[0] >= 0; }, 'type' => 'int' }, 'tokenUseGlobalStorage' => { 'default' => 0, 'type' => 'bool' }, 'totp2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'totp2fAuthnLevel' => { 'type' => 'int' }, 'totp2fDigits' => { 'default' => 6, 'type' => 'int' }, 'totp2fEncryptSecret' => { 'default' => 0, 'type' => 'bool' }, 'totp2fInterval' => { 'default' => 30, 'type' => 'int' }, 'totp2fIssuer' => { 'type' => 'text' }, 'totp2fLabel' => { 'type' => 'text' }, 'totp2fLogo' => { 'type' => 'text' }, 'totp2fRange' => { 'default' => 1, 'type' => 'int' }, 'totp2fSelfRegistration' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'totp2fTTL' => { 'type' => 'int' }, 'totp2fUserCanRemoveKey' => { 'default' => 1, 'type' => 'bool' }, 'trustedDomains' => { 'type' => 'text' }, 'twitterAppName' => { 'type' => 'text' }, 'twitterAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'twitterKey' => { 'type' => 'text' }, 'twitterSecret' => { 'type' => 'text' }, 'twitterUserField' => { 'default' => 'screen_name', 'type' => 'text' }, 'u2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'u2fAuthnLevel' => { 'type' => 'int' }, 'u2fLabel' => { 'type' => 'text' }, 'u2fLogo' => { 'type' => 'text' }, 'u2fSelfRegistration' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'u2fTTL' => { 'type' => 'int' }, 'u2fUserCanRemoveKey' => { 'default' => 1, 'type' => 'bool' }, 'upgradeSession' => { 'default' => 1, 'type' => 'bool' }, 'userControl' => { 'default' => '^[\\w\\.\\-@]+$', 'type' => 'pcre' }, 'userDB' => { 'default' => 'Same', 'select' => [ { 'k' => 'Same', 'v' => 'Same' }, { 'k' => 'AD', 'v' => 'Active Directory' }, { 'k' => 'DBI', 'v' => 'Database (DBI)' }, { 'k' => 'LDAP', 'v' => 'LDAP' }, { 'k' => 'REST', 'v' => 'REST' }, { 'k' => 'Null', 'v' => 'None' }, { 'k' => 'Custom', 'v' => 'customModule' } ], 'type' => 'select' }, 'useRedirectOnError' => { 'default' => 1, 'type' => 'bool' }, 'useRedirectOnForbidden' => { 'default' => 0, 'type' => 'bool' }, 'userLogger' => { 'type' => 'text' }, 'userPivot' => { 'type' => 'text' }, 'userSyslogFacility' => { 'type' => 'text' }, 'useSafeJail' => { 'default' => 1, 'type' => 'bool' }, 'utotp2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'utotp2fAuthnLevel' => { 'type' => 'int' }, 'utotp2fLabel' => { 'type' => 'text' }, 'utotp2fLogo' => { 'type' => 'text' }, 'vhostAccessToTrace' => { 'default' => '', 'type' => 'text' }, 'vhostAliases' => { 'default' => '', 'type' => 'text' }, 'vhostAuthnLevel' => { 'type' => 'int' }, 'vhostComment' => { 'default' => '', 'type' => 'longtext' }, 'vhostDevOpsRulesUrl' => { 'type' => 'url' }, 'vhostHttps' => { 'default' => -1, 'type' => 'trool' }, 'vhostMaintenance' => { 'default' => 0, 'type' => 'bool' }, 'vhostOptions' => { 'type' => 'subContainer' }, 'vhostPort' => { 'default' => -1, 'type' => 'int' }, 'vhostServiceTokenTTL' => { 'default' => -1, 'type' => 'int' }, 'vhostType' => { 'default' => 'Main', 'select' => [ { 'k' => 'AuthBasic', 'v' => 'AuthBasic' }, { 'k' => 'CDA', 'v' => 'CDA' }, { 'k' => 'DevOps', 'v' => 'DevOps' }, { 'k' => 'DevOpsST', 'v' => 'DevOpsST' }, { 'k' => 'Main', 'v' => 'Main' }, { 'k' => 'OAuth2', 'v' => 'OAuth2' }, { 'k' => 'SecureToken', 'v' => 'SecureToken' }, { 'k' => 'ServiceToken', 'v' => 'ServiceToken' }, { 'k' => 'ZimbraPreAuth', 'v' => 'ZimbraPreAuth' } ], 'type' => 'select' }, 'viewerAllowBrowser' => { 'default' => 0, 'type' => 'bool' }, 'viewerAllowDiff' => { 'default' => 0, 'type' => 'bool' }, 'viewerHiddenKeys' => { 'default' => 'samlIDPMetaDataNodes, samlSPMetaDataNodes', 'type' => 'text' }, 'virtualHosts' => { 'type' => 'virtualHostContainer' }, 'webauthn2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'webauthn2fAuthnLevel' => { 'type' => 'int' }, 'webauthn2fLabel' => { 'type' => 'text' }, 'webauthn2fLogo' => { 'type' => 'text' }, 'webauthn2fSelfRegistration' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'webauthn2fUserCanRemoveKey' => { 'default' => 1, 'type' => 'bool' }, 'webauthn2fUserVerification' => { 'default' => 'preferred', 'select' => [ { 'k' => 'discouraged', 'v' => 'Discouraged' }, { 'k' => 'preferred', 'v' => 'Preferred' }, { 'k' => 'required', 'v' => 'Required' } ], 'type' => 'select' }, 'webauthnDisplayNameAttr' => { 'type' => 'text' }, 'webauthnRpName' => { 'type' => 'text' }, 'webIDAuthnLevel' => { 'default' => 1, 'type' => 'int' }, 'webIDExportedVars' => { 'default' => {}, 'keyMsgFail' => '__badVariableName__', 'keyTest' => qr/^!?[a-zA-Z][a-zA-Z0-9_-]*$/, 'msgFail' => '__badValue__', 'test' => qr/^[a-zA-Z][a-zA-Z0-9_:\-]*$/, 'type' => 'keyTextContainer' }, 'webIDWhitelist' => { 'type' => 'text' }, 'whatToTrace' => { 'default' => 'uid', 'type' => 'lmAttrOrMacro' }, 'wsdlServer' => { 'default' => 0, 'type' => 'bool' }, 'yubikey2fActivation' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'yubikey2fAuthnLevel' => { 'type' => 'int' }, 'yubikey2fClientID' => { 'type' => 'text' }, 'yubikey2fFromSessionAttribute' => { 'type' => 'text' }, 'yubikey2fLabel' => { 'type' => 'text' }, 'yubikey2fLogo' => { 'type' => 'text' }, 'yubikey2fNonce' => { 'type' => 'text' }, 'yubikey2fPublicIDSize' => { 'default' => 12, 'type' => 'int' }, 'yubikey2fSecretKey' => { 'type' => 'text' }, 'yubikey2fSelfRegistration' => { 'default' => 0, 'type' => 'boolOrExpr' }, 'yubikey2fTTL' => { 'type' => 'int' }, 'yubikey2fUrl' => { 'type' => 'text' }, 'yubikey2fUserCanRemoveKey' => { 'default' => 1, 'type' => 'bool' }, 'zimbraAccountKey' => { 'type' => 'text' }, 'zimbraBy' => { 'type' => 'text' }, 'zimbraPreAuthKey' => { 'type' => 'text' }, 'zimbraSsoUrl' => { 'type' => 'text' }, 'zimbraUrl' => { 'type' => 'text' } }; }