# This file is generated by Lemonldap::NG::Manager::Build. Don't modify it by hand
package Lemonldap::NG::Manager::Attributes;

our $VERSION = '2.20.0';

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($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;
            }
        },
        'EcOrRSAPrivateKey' => {
            'test' => sub {
                return $_[0] =~
m[^(?:(?:\-+\s*BEGIN\s+(?:(?:RSA|EC|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|EC|ENCRYPTED)\s+)?PRIVATE\s+KEY\s*\-+)?[\r\n]*)?$]s
                  ? 1
                  : ( 1, '__badPemEncoding__' );
            }
        },
        'EcOrRSAPublicKeyOrCertificate' => {
            '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__' );
            }
        },
        '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+$/
        },
        'intOrNull' => {
            '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' => {
            'keyTest' => sub {
                return perlExpr(@_);
            },
            'test' => sub {
                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' => {
            'keyTest' => sub {
                return perlExpr(@_);
            },
            'test' => sub {
                1;
            },
            'type' => 'keyTextContainer'
        },
        'available2F' => {
            'default' =>
              'TOTP,REST,Mail2F,Ext2F,WebAuthn,Yubikey,Radius,Password,Okta',
            'type' => 'text'
        },
        'available2FSelfRegistration' => {
            'default' => 'Password,TOTP,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' => 'intOrNull'
        },
        'casAppMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        'casAppMetaDataOptionsDisplayName' => {
            'type' => 'text'
        },
        'casAppMetaDataOptionsLogout' => {
            'default' => -1,
            'type'    => 'trool'
        },
        'casAppMetaDataOptionsRule' => {
            'test' => sub {
                return perlExpr(@_);
            },
            'type' => 'text'
        },
        'casAppMetaDataOptionsService' => {
            'type' => 'text'
        },
        'casAppMetaDataOptionsUserAttribute' => {
            'type' => 'text'
        },
        'casAttr' => {
            'type' => 'text'
        },
        'casAttributes' => {
            'type' => 'keyTextContainer'
        },
        'casAuthnLevel' => {
            'default' => 1,
            'type'    => 'int'
        },
        'casBackChannelSingleLogout' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'casSrvMetaDataExportedVars' => {
            'default' => {
                'cn'   => 'cn',
                'mail' => 'mail',
                'uid'  => 'uid'
            },
            'type' => 'keyTextContainer'
        },
        'casSrvMetaDataNodes' => {
            'type' => 'casSrvMetaDataNodeContainer'
        },
        'casSrvMetaDataOptions' => {
            'type' => 'subContainer'
        },
        'casSrvMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        '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' => 'intOrNull'
        },
        'casSrvMetaDataOptionsTooltip' => {
            'type' => 'text'
        },
        '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' => {
            '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'
        },
        'checkEntropy' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'checkEntropyRequired' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'checkEntropyRequiredLevel' => {
            'type' => 'int'
        },
        'checkHIBP' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'checkHIBPRequired' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'checkHIBPURL' => {
            'default' => 'https://api.pwnedpasswords.com/range/',
            'type'    => 'url'
        },
        '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' => 'intOrNull'
        },
        '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'
        },
        'defaultNewKeySize' => {
            'default' => 2048,
            'type'    => 'int'
        },
        '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])[.]?)|#\w+#))?$/,
            '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' => 'intOrNull'
        },
        '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'
        },
        'groupLDAPFilter' => {
            'type' => 'text'
        },
        'groups' => {
            'default' => {},
            'test'    => sub {
                return perlExpr(@_);
            },
            'type' => 'keyTextContainer'
        },
        'groupsBeforeMacros' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'handlerInternalCache' => {
            'default' => 15,
            'type'    => 'int'
        },
        'handlerServiceTokenTTL' => {
            'default' => 30,
            'type'    => 'int'
        },
        'hashedSessionStore' => {
            'default' => 0,
            'type'    => 'bool'
        },
        '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'
        },
        'initializePasswordReset' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'initializePasswordResetSecret' => {
            'type' => 'password'
        },
        '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'
        },
        'issuerDBJitsiMeetTokensActivation' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'issuerDBJitsiMeetTokensPath' => {
            'default' => '^/jitsi/',
            'type'    => 'text'
        },
        'issuerDBJitsiMeetTokensRule' => {
            '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'
        },
        'jitsiAppId' => {
            'type' => 'text'
        },
        'jitsiAppSecret' => {
            'type' => 'text'
        },
        'jitsiDefaultServer' => {
            'type' => 'url'
        },
        'jitsiExpiration' => {
            'default' => '300',
            'type'    => 'int'
        },
        'jitsiIdAttribute' => {
            'type' => 'text'
        },
        'jitsiMailAttribute' => {
            'type' => 'text'
        },
        'jitsiNameAttribute' => {
            'type' => 'text'
        },
        'jitsiSigningAlg' => {
            'default' => 'RS256',
            'select'  => [ {
                    'k' => 'HS256',
                    'v' => 'HS256'
                },
                {
                    'k' => 'HS384',
                    'v' => 'HS384'
                },
                {
                    'k' => 'HS512',
                    'v' => 'HS512'
                },
                {
                    'k' => 'RS256',
                    'v' => 'RS256'
                },
                {
                    'k' => 'RS384',
                    'v' => 'RS384'
                },
                {
                    'k' => 'RS512',
                    'v' => 'RS512'
                },
                {
                    'k' => 'PS256',
                    'v' => 'PS256'
                },
                {
                    'k' => 'PS384',
                    'v' => 'PS384'
                },
                {
                    'k' => 'PS512',
                    'v' => 'PS512'
                },
                {
                    'k' => 'ES256',
                    'v' => 'ES256'
                },
                {
                    'k' => 'ES384',
                    'v' => 'ES384'
                },
                {
                    'k' => 'ES512',
                    'v' => 'ES512'
                },
                {
                    'k' => 'EdDSA',
                    'v' => 'EdDSA'
                }
            ],
            'type' => 'select'
        },
        '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' => 'intOrNull'
        },
        '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'
        },
        'locationDetect' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'locationDetectGeoIpDatabase' => {
            'type' => 'text'
        },
        'locationDetectGeoIpLanguages' => {
            'default' => 'en, fr',
            'type'    => 'text'
        },
        'locationDetectIpDetail' => {
            'type' => 'text'
        },
        'locationDetectUaDetail' => {
            'type' => 'text'
        },
        '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' => {
            'default' => {
                'timeout' => 10
            },
            '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' => 'intOrNull'
        },
        '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' => 'intOrNull'
        },
        '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' => {
            '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',
                '_oidcConnectedRPIDs', '_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'
        },
        'oidcDropCspHeaders' => {
            'type' => 'bool'
        },
        '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'
        },
        'oidcOPMetaDataOptionsAuthnEndpointAuthMethod' => {
            'default' => 'get',
            'select'  => [ {
                    'k' => '',
                    'v' => 'None'
                },
                {
                    'k' => 'jws',
                    'v' => 'Signed JWT'
                }
            ],
            'type' => 'select'
        },
        'oidcOPMetaDataOptionsAuthnEndpointAuthSigAlg' => {
            'default' => 'RS256',
            'select'  => [ {
                    'k' => 'HS256',
                    'v' => 'HS256'
                },
                {
                    'k' => 'HS384',
                    'v' => 'HS384'
                },
                {
                    'k' => 'HS512',
                    'v' => 'HS512'
                },
                {
                    'k' => 'RS256',
                    'v' => 'RS256'
                },
                {
                    'k' => 'RS384',
                    'v' => 'RS384'
                },
                {
                    'k' => 'RS512',
                    'v' => 'RS512'
                },
                {
                    'k' => 'PS256',
                    'v' => 'PS256'
                },
                {
                    'k' => 'PS384',
                    'v' => 'PS384'
                },
                {
                    'k' => 'PS512',
                    'v' => 'PS512'
                },
                {
                    'k' => 'ES256',
                    'v' => 'ES256'
                },
                {
                    'k' => 'ES384',
                    'v' => 'ES384'
                },
                {
                    'k' => 'ES512',
                    'v' => 'ES512'
                },
                {
                    'k' => 'EdDSA',
                    'v' => 'EdDSA'
                }
            ],
            'type' => 'select'
        },
        'oidcOPMetaDataOptionsCheckJWTSignature' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'oidcOPMetaDataOptionsClientID' => {
            'type' => 'text'
        },
        'oidcOPMetaDataOptionsClientSecret' => {
            'type' => 'password'
        },
        'oidcOPMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        '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'
        },
        'oidcOPMetaDataOptionsRequirePkce' => {
            'type' => 'bool'
        },
        'oidcOPMetaDataOptionsResolutionRule' => {
            'default' => '',
            'type'    => 'longtext'
        },
        'oidcOPMetaDataOptionsScope' => {
            'default' => 'openid profile',
            'type'    => 'text'
        },
        'oidcOPMetaDataOptionsSortNumber' => {
            'type' => 'intOrNull'
        },
        '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'
                },
                {
                    'k' => 'client_secret_jwt',
                    'v' => 'client_secret_jwt'
                },
                {
                    'k' => 'private_key_jwt',
                    'v' => 'private_key_jwt'
                }
            ],
            'type' => 'select'
        },
        'oidcOPMetaDataOptionsTooltip' => {
            'type' => 'text'
        },
        'oidcOPMetaDataOptionsUiLocales' => {
            'type' => 'text'
        },
        'oidcOPMetaDataOptionsUseNonce' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'oidcOPMetaDataOptionsUserAttribute' => {
            'type' => 'text'
        },
        'oidcRPCallbackGetParam' => {
            'default' => 'openidconnectcallback',
            'type'    => 'text'
        },
        'oidcRPMetaDataExportedVars' => {
            'default' => {
                'email'              => 'mail',
                'name'               => 'cn',
                'preferred_username' => 'uid'
            },
            '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'
        },
        'oidcRPMetaDataOptionsAccessTokenEncContentEncAlg' => {
            'default' => 'A256GCM',
            'select'  => [ {
                    'k' => 'A256CBC-HS512',
                    'v' => 'A256CBC-HS512'
                },
                {
                    'k' => 'A256GCM',
                    'v' => 'A256GCM'
                },
                {
                    'k' => 'A192CBC-HS384',
                    'v' => 'A192CBC-HS384'
                },
                {
                    'k' => 'A192GCM',
                    'v' => 'A192GCM'
                },
                {
                    'k' => 'A128CBC-HS256',
                    'v' => 'A128CBC-HS256'
                },
                {
                    'k' => 'A128GCM',
                    'v' => 'A128GCM'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsAccessTokenEncKeyMgtAlg' => {
            'select' => [ {
                    'k' => '',
                    'v' => 'None'
                },
                {
                    'k' => 'RSA-OAEP',
                    'v' => 'RSA-OAEP'
                },
                {
                    'k' => 'RSA-OAEP-256',
                    'v' => 'RSA-OAEP-256'
                },
                {
                    'k' => 'RSA1_5',
                    'v' => 'RSA1_5'
                },
                {
                    'k' => 'ECDH-ES',
                    'v' => 'ECDH-ES'
                },
                {
                    'k' => 'ECDH-ES+A128KW',
                    'v' => 'ECDH-ES+A128KW'
                },
                {
                    'k' => 'ECDH-ES+A192KW',
                    'v' => 'ECDH-ES+A192KW'
                },
                {
                    'k' => 'ECDH-ES+A256KW',
                    'v' => 'ECDH-ES+A256KW'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsAccessTokenExpiration' => {
            'type' => 'intOrNull'
        },
        'oidcRPMetaDataOptionsAccessTokenJWT' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsAccessTokenSignAlg' => {
            'default' => 'RS256',
            'select'  => [ {
                    'k' => 'HS256',
                    'v' => 'HS256'
                },
                {
                    'k' => 'HS384',
                    'v' => 'HS384'
                },
                {
                    'k' => 'HS512',
                    'v' => 'HS512'
                },
                {
                    'k' => 'RS256',
                    'v' => 'RS256'
                },
                {
                    'k' => 'RS384',
                    'v' => 'RS384'
                },
                {
                    'k' => 'RS512',
                    'v' => 'RS512'
                },
                {
                    'k' => 'PS256',
                    'v' => 'PS256'
                },
                {
                    'k' => 'PS384',
                    'v' => 'PS384'
                },
                {
                    'k' => 'PS512',
                    'v' => 'PS512'
                },
                {
                    'k' => 'ES256',
                    'v' => 'ES256'
                },
                {
                    'k' => 'ES384',
                    'v' => 'ES384'
                },
                {
                    'k' => 'ES512',
                    'v' => 'ES512'
                },
                {
                    'k' => 'EdDSA',
                    'v' => 'EdDSA'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsAdditionalAudiences' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsAllowClientCredentialsGrant' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsAllowOffline' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsAllowPasswordGrant' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsAuthMethod' => {
            'select' => [ {
                    'k' => '',
                    'v' => 'Any'
                },
                {
                    'k' => 'client_secret_post',
                    'v' => 'client_secret_post'
                },
                {
                    'k' => 'client_secret_basic',
                    'v' => 'client_secret_basic'
                },
                {
                    'k' => 'client_secret_jwt',
                    'v' => 'client_secret_jwt'
                },
                {
                    'k' => 'private_key_jwt',
                    'v' => 'private_key_jwt'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsAuthnLevel' => {
            'type' => 'intOrNull'
        },
        'oidcRPMetaDataOptionsAuthnRequireNonce' => {
            'type' => 'bool'
        },
        'oidcRPMetaDataOptionsAuthnRequireState' => {
            'type' => 'bool'
        },
        'oidcRPMetaDataOptionsAuthorizationCodeExpiration' => {
            'type' => 'intOrNull'
        },
        'oidcRPMetaDataOptionsAuthRequiredForAuthorize' => {
            'type' => 'bool'
        },
        'oidcRPMetaDataOptionsBypassConsent' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsClientID' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsClientSecret' => {
            'type' => 'password'
        },
        'oidcRPMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        'oidcRPMetaDataOptionsDisplayName' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsExtraClaims' => {
            'default' => {},
            'keyTest' => qr/^[\x21\x23-\x5B\x5D-\x7E]+$/,
            'type'    => 'keyTextContainer'
        },
        'oidcRPMetaDataOptionsIcon' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsIdTokenEncContentEncAlg' => {
            'default' => 'A256GCM',
            'select'  => [ {
                    'k' => 'A256CBC-HS512',
                    'v' => 'A256CBC-HS512'
                },
                {
                    'k' => 'A256GCM',
                    'v' => 'A256GCM'
                },
                {
                    'k' => 'A192CBC-HS384',
                    'v' => 'A192CBC-HS384'
                },
                {
                    'k' => 'A192GCM',
                    'v' => 'A192GCM'
                },
                {
                    'k' => 'A128CBC-HS256',
                    'v' => 'A128CBC-HS256'
                },
                {
                    'k' => 'A128GCM',
                    'v' => 'A128GCM'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsIdTokenEncKeyMgtAlg' => {
            'select' => [ {
                    'k' => '',
                    'v' => 'None'
                },
                {
                    'k' => 'RSA-OAEP',
                    'v' => 'RSA-OAEP'
                },
                {
                    'k' => 'RSA-OAEP-256',
                    'v' => 'RSA-OAEP-256'
                },
                {
                    'k' => 'RSA1_5',
                    'v' => 'RSA1_5'
                },
                {
                    'k' => 'ECDH-ES',
                    'v' => 'ECDH-ES'
                },
                {
                    'k' => 'ECDH-ES+A128KW',
                    'v' => 'ECDH-ES+A128KW'
                },
                {
                    'k' => 'ECDH-ES+A192KW',
                    'v' => 'ECDH-ES+A192KW'
                },
                {
                    'k' => 'ECDH-ES+A256KW',
                    'v' => 'ECDH-ES+A256KW'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsIDTokenExpiration' => {
            'type' => 'intOrNull'
        },
        'oidcRPMetaDataOptionsIDTokenForceClaims' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsIDTokenSignAlg' => {
            'default' => 'RS256',
            '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'
                },
                {
                    'k' => 'PS256',
                    'v' => 'PS256'
                },
                {
                    'k' => 'PS384',
                    'v' => 'PS384'
                },
                {
                    'k' => 'PS512',
                    'v' => 'PS512'
                },
                {
                    'k' => 'ES256',
                    'v' => 'ES256'
                },
                {
                    'k' => 'ES384',
                    'v' => 'ES384'
                },
                {
                    'k' => 'ES512',
                    'v' => 'ES512'
                },
                {
                    'k' => 'EdDSA',
                    'v' => 'EdDSA'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsJwks' => {
            'keyTest' => sub {
                1;
            },
            'type' => 'file'
        },
        'oidcRPMetaDataOptionsJwksUri' => {
            'type' => 'url'
        },
        'oidcRPMetaDataOptionsLogoutBypassConfirm' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsLogoutEncContentEncAlg' => {
            'default' => 'A256GCM',
            'select'  => [ {
                    'k' => 'A256CBC-HS512',
                    'v' => 'A256CBC-HS512'
                },
                {
                    'k' => 'A256GCM',
                    'v' => 'A256GCM'
                },
                {
                    'k' => 'A192CBC-HS384',
                    'v' => 'A192CBC-HS384'
                },
                {
                    'k' => 'A192GCM',
                    'v' => 'A192GCM'
                },
                {
                    'k' => 'A128CBC-HS256',
                    'v' => 'A128CBC-HS256'
                },
                {
                    'k' => 'A128GCM',
                    'v' => 'A128GCM'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsLogoutEncKeyMgtAlg' => {
            'select' => [ {
                    'k' => '',
                    'v' => 'None'
                },
                {
                    'k' => 'RSA-OAEP',
                    'v' => 'RSA-OAEP'
                },
                {
                    'k' => 'RSA-OAEP-256',
                    'v' => 'RSA-OAEP-256'
                },
                {
                    'k' => 'RSA1_5',
                    'v' => 'RSA1_5'
                },
                {
                    'k' => 'ECDH-ES',
                    'v' => 'ECDH-ES'
                },
                {
                    'k' => 'ECDH-ES+A128KW',
                    'v' => 'ECDH-ES+A128KW'
                },
                {
                    'k' => 'ECDH-ES+A192KW',
                    'v' => 'ECDH-ES+A192KW'
                },
                {
                    'k' => 'ECDH-ES+A256KW',
                    'v' => 'ECDH-ES+A256KW'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsLogoutSessionRequired' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsLogoutType' => {
            'default' => 'front',
            'select'  => [ {
                    'k' => 'front',
                    'v' => 'Front Channel'
                },
                {
                    'k' => 'back',
                    'v' => 'Back Channel'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsLogoutUrl' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsOfflineSessionExpiration' => {
            'type' => 'intOrNull'
        },
        'oidcRPMetaDataOptionsPostLogoutRedirectUris' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsPublic' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsRedirectUris' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsRefreshToken' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsRequestUris' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsRequirePKCE' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcRPMetaDataOptionsRule' => {
            'test' => sub {
                return perlExpr(@_);
            },
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsTokenXAuthorizedRP' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsUserIDAttr' => {
            'type' => 'text'
        },
        'oidcRPMetaDataOptionsUserInfoEncContentEncAlg' => {
            'default' => 'A256GCM',
            'select'  => [ {
                    'k' => 'A256CBC-HS512',
                    'v' => 'A256CBC-HS512'
                },
                {
                    'k' => 'A256GCM',
                    'v' => 'A256GCM'
                },
                {
                    'k' => 'A192CBC-HS384',
                    'v' => 'A192CBC-HS384'
                },
                {
                    'k' => 'A192GCM',
                    'v' => 'A192GCM'
                },
                {
                    'k' => 'A128CBC-HS256',
                    'v' => 'A128CBC-HS256'
                },
                {
                    'k' => 'A128GCM',
                    'v' => 'A128GCM'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsUserInfoEncKeyMgtAlg' => {
            'select' => [ {
                    'k' => '',
                    'v' => 'None'
                },
                {
                    'k' => 'RSA-OAEP',
                    'v' => 'RSA-OAEP'
                },
                {
                    'k' => 'RSA-OAEP-256',
                    'v' => 'RSA-OAEP-256'
                },
                {
                    'k' => 'RSA1_5',
                    'v' => 'RSA1_5'
                },
                {
                    'k' => 'ECDH-ES',
                    'v' => 'ECDH-ES'
                },
                {
                    'k' => 'ECDH-ES+A128KW',
                    'v' => 'ECDH-ES+A128KW'
                },
                {
                    'k' => 'ECDH-ES+A192KW',
                    'v' => 'ECDH-ES+A192KW'
                },
                {
                    'k' => 'ECDH-ES+A256KW',
                    'v' => 'ECDH-ES+A256KW'
                }
            ],
            'type' => 'select'
        },
        'oidcRPMetaDataOptionsUserinfoRequireHeaderToken' => {
            'type' => 'bool'
        },
        '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'
                },
                {
                    'k' => 'PS256',
                    'v' => 'JWT/PS256'
                },
                {
                    'k' => 'PS384',
                    'v' => 'JWT/PS384'
                },
                {
                    'k' => 'PS512',
                    'v' => 'JWT/PS512'
                },
                {
                    'k' => 'ES256',
                    'v' => 'JWT/ES256'
                },
                {
                    'k' => 'ES384',
                    'v' => 'JWT/ES384'
                },
                {
                    'k' => 'ES512',
                    'v' => 'JWT/ES512'
                },
                {
                    'k' => 'EdDSA',
                    'v' => 'JWT/EdDSA'
                }
            ],
            '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'
        },
        'oidcServiceEncAlgorithmAlg' => {
            'default' => 'RSA-OAEP',
            'select'  => [ {
                    'k' => 'RSA-OAEP',
                    'v' => 'RSA-OAEP'
                },
                {
                    'k' => 'RSA-OAEP-256',
                    'v' => 'RSA-OAEP-256'
                },
                {
                    'k' => 'RSA1_5',
                    'v' => 'RSA1_5'
                },
                {
                    'k' => 'ECDH-ES',
                    'v' => 'ECDH-ES'
                },
                {
                    'k' => 'ECDH-ES+A128KW',
                    'v' => 'ECDH-ES+A128KW'
                },
                {
                    'k' => 'ECDH-ES+A192KW',
                    'v' => 'ECDH-ES+A192KW'
                },
                {
                    'k' => 'ECDH-ES+A256KW',
                    'v' => 'ECDH-ES+A256KW'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceEncAlgorithmEnc' => {
            'default' => 'A256GCM',
            'select'  => [ {
                    'k' => 'A256CBC-HS512',
                    'v' => 'A256CBC-HS512'
                },
                {
                    'k' => 'A256GCM',
                    'v' => 'A256GCM'
                },
                {
                    'k' => 'A192CBC-HS384',
                    'v' => 'A192CBC-HS384'
                },
                {
                    'k' => 'A192GCM',
                    'v' => 'A192GCM'
                },
                {
                    'k' => 'A128CBC-HS256',
                    'v' => 'A128CBC-HS256'
                },
                {
                    'k' => 'A128GCM',
                    'v' => 'A128GCM'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceHideMetadata' => {
            'type' => 'bool'
        },
        'oidcServiceIDTokenExpiration' => {
            'default' => 3600,
            'type'    => 'int'
        },
        'oidcServiceIgnoreScopeForClaims' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'oidcServiceKeyIdEnc' => {
            'type' => 'text'
        },
        'oidcServiceKeyIdSig' => {
            'type' => 'text'
        },
        'oidcServiceKeyTypeEnc' => {
            'default' => 'RSA',
            'select'  => [ {
                    'k' => 'RSA',
                    'v' => 'RSA'
                },
                {
                    'k' => 'EC',
                    'v' => 'EC'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceKeyTypeSig' => {
            'default' => 'RSA',
            'select'  => [ {
                    'k' => 'RSA',
                    'v' => 'RSA'
                },
                {
                    'k' => 'EC',
                    'v' => 'EC'
                }
            ],
            'type' => 'select'
        },
        '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'
        },
        'oidcServiceNewKeyIdSig' => {
            'type' => 'text'
        },
        'oidcServiceNewKeyTypeSig' => {
            'default' => 'RSA',
            'select'  => [ {
                    'k' => 'RSA',
                    'v' => 'RSA'
                },
                {
                    'k' => 'EC',
                    'v' => 'EC'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceNewPrivateKeySig' => {
            'type' => 'EcOrRSAPrivateKey'
        },
        'oidcServiceNewPublicKeySig' => {
            'type' => 'EcOrRSAPublicKeyOrCertificate'
        },
        'oidcServiceOfflineSessionExpiration' => {
            'default' => 2592000,
            'type'    => 'int'
        },
        'oidcServiceOldKeyIdEnc' => {
            'type' => 'text'
        },
        'oidcServiceOldKeyIdSig' => {
            'type' => 'text'
        },
        'oidcServiceOldKeyTypeEnc' => {
            'default' => 'RSA',
            'select'  => [ {
                    'k' => 'RSA',
                    'v' => 'RSA'
                },
                {
                    'k' => 'EC',
                    'v' => 'EC'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceOldKeyTypeSig' => {
            'default' => 'RSA',
            'select'  => [ {
                    'k' => 'RSA',
                    'v' => 'RSA'
                },
                {
                    'k' => 'EC',
                    'v' => 'EC'
                }
            ],
            'type' => 'select'
        },
        'oidcServiceOldPrivateKeyEnc' => {
            'type' => 'RSAPrivateKey'
        },
        'oidcServiceOldPrivateKeySig' => {
            'type' => 'EcOrRSAPrivateKey'
        },
        'oidcServiceOldPublicKeyEnc' => {
            'type' => 'RSAPublicKeyOrCertificate'
        },
        'oidcServiceOldPublicKeySig' => {
            'type' => 'EcOrRSAPublicKeyOrCertificate'
        },
        'oidcServicePrivateKeyEnc' => {
            'type' => 'RSAPrivateKey'
        },
        'oidcServicePrivateKeySig' => {
            'type' => 'EcOrRSAPrivateKey'
        },
        'oidcServicePublicKeyEnc' => {
            'type' => 'RSAPublicKeyOrCertificate'
        },
        'oidcServicePublicKeySig' => {
            'type' => 'EcOrRSAPublicKeyOrCertificate'
        },
        'oidcStorage' => {
            'type' => 'PerlModule'
        },
        'oidcStorageOptions' => {
            'type' => 'keyTextContainer'
        },
        'okta2fActivation' => {
            'default' => 0,
            'type'    => 'boolOrExpr'
        },
        'okta2fAdminURL' => {
            'type' => 'url'
        },
        'okta2fApiKey' => {
            'type' => 'text'
        },
        'okta2fAuthnLevel' => {
            'type' => 'intOrNull'
        },
        'okta2fLabel' => {
            'type' => 'text'
        },
        'okta2fLoginAttribute' => {
            'type' => 'text'
        },
        'okta2fLogo' => {
            'type' => 'text'
        },
        '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'
        },
        'password2fActivation' => {
            'default' => 0,
            'type'    => 'boolOrExpr'
        },
        'password2fAuthnLevel' => {
            'type' => 'intOrNull'
        },
        'password2fLabel' => {
            'type' => 'text'
        },
        'password2fLogo' => {
            'type' => 'text'
        },
        'password2fSelfRegistration' => {
            'default' => 0,
            'type'    => 'boolOrExpr'
        },
        'password2fTTL' => {
            'type' => 'intOrNull'
        },
        'password2fUserCanRemoveKey' => {
            'default' => 1,
            'type'    => 'bool'
        },
        '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'
        },
        'passwordPolicyMaxSize' => {
            'default' => 0,
            'type'    => 'int'
        },
        '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 _oidcConsents 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'
        },
        'portalCustomJs' => {
            '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'
        },
        'portalDisplayOrder' => {
            'default' =>
              'Appslist ChangePassword LoginHistory OidcConsents Logout',
            'type' => 'text'
        },
        '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' => 'intOrNull'
        },
        'radius2fDictionaryFile' => {
            'type' => 'text'
        },
        'radius2fLabel' => {
            'type' => 'text'
        },
        'radius2fLogo' => {
            'type' => 'text'
        },
        'radius2fRequestAttributes' => {
            'default'    => {},
            'keyMsgFail' => '__badKeyName__',
            'keyTest'    => qr/^[a-zA-Z0-9_-]*$/,
            'type'       => 'keyTextContainer'
        },
        'radius2fSecret' => {
            'type' => 'text'
        },
        'radius2fSendInitialRequest' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'radius2fServer' => {
            'type' => 'text'
        },
        'radius2fTimeout' => {
            'default' => 20,
            'type'    => 'int'
        },
        'radius2fUsernameSessionKey' => {
            'type' => 'text'
        },
        'radiusAuthnLevel' => {
            'default' => 3,
            'type'    => 'int'
        },
        'radiusDictionaryFile' => {
            'type' => 'text'
        },
        'radiusExportedVars' => {
            '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'
        },
        'radiusRequestAttributes' => {
            'default'    => {},
            'keyMsgFail' => '__badKeyName__',
            'keyTest'    => qr/^[a-zA-Z0-9_-]*$/,
            'type'       => 'keyTextContainer'
        },
        'radiusSecret' => {
            'type' => 'text'
        },
        'radiusServer' => {
            'type' => 'text'
        },
        'radiusTimeout' => {
            'type' => 'intOrNull'
        },
        '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' => {
            'type' => 'url'
        },
        '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' => 'intOrNull'
        },
        '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'
        },
        'samlFederationFiles' => {
            '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'
        },
        'samlIDPMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        'samlIDPMetaDataOptionsDisplayName' => {
            'type' => 'text'
        },
        'samlIDPMetaDataOptionsEncryptionMode' => {
            'default' => 'none',
            'select'  => [ {
                    'k' => 'none',
                    'v' => 'None'
                },
                {
                    'k' => 'nameid',
                    'v' => 'Name ID'
                },
                {
                    'k' => 'assertion',
                    'v' => 'Assertion'
                }
            ],
            'type' => 'select'
        },
        'samlIDPMetaDataOptionsFederationEntityID' => {
            'type' => 'text'
        },
        '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' => 'intOrNull'
        },
        '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'
        },
        'samlIDPMetaDataOptionsTooltip' => {
            'type' => 'text'
        },
        'samlIDPMetaDataOptionsUserAttribute' => {
            'type' => 'text'
        },
        'samlIDPMetaDataXML' => {
            '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' => 'intOrNull'
        },
        'samlSPMetaDataOptionsCheckSLOMessageSignature' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'samlSPMetaDataOptionsCheckSSOMessageSignature' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'samlSPMetaDataOptionsComment' => {
            'type' => 'longtext'
        },
        'samlSPMetaDataOptionsEnableIDPInitiatedURL' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'samlSPMetaDataOptionsEncryptionMode' => {
            'default' => 'none',
            'select'  => [ {
                    'k' => 'none',
                    'v' => 'None'
                },
                {
                    'k' => 'nameid',
                    'v' => 'Name ID'
                },
                {
                    'k' => 'assertion',
                    'v' => 'Assertion'
                }
            ],
            'type' => 'select'
        },
        'samlSPMetaDataOptionsFederationEntityID' => {
            'type' => 'text'
        },
        'samlSPMetaDataOptionsFederationOptionalAttributes' => {
            'default' => '',
            'select'  => [ {
                    'k' => '',
                    'v' => 'keep'
                },
                {
                    'k' => 'ignore',
                    'v' => 'ignore'
                }
            ],
            'type' => 'select'
        },
        'samlSPMetaDataOptionsFederationRequiredAttributes' => {
            'default' => '',
            'select'  => [ {
                    'k' => '',
                    'v' => 'keep'
                },
                {
                    'k' => 'optional',
                    'v' => 'makeoptional'
                },
                {
                    'k' => 'ignore',
                    'v' => 'ignore'
                }
            ],
            '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/^(\d+_)?[_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' => 'intOrNull'
        },
        'sfManagerRule' => {
            'default' => 1,
            'type'    => 'boolOrExpr'
        },
        'sfOnlyUpgrade' => {
            'type' => 'bool'
        },
        'sfRegisterTimeout' => {
            'type' => 'intOrNull'
        },
        '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'
        },
        'sfRetries' => {
            'type' => 'intOrNull'
        },
        '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'
        },
        'SSLIssuerVar' => {
            'default' => 'SSL_CLIENT_I_DN',
            'type'    => 'text'
        },
        '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'
        },
        'stayConnectedSingleSession' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'stayConnectedTimeout' => {
            'default' => 2592000,
            'type'    => 'int'
        },
        'storePassword' => {
            'default' => 0,
            'type'    => 'bool'
        },
        'storePasswordEncrypted' => {
            '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' => 'intOrNull'
        },
        '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' => 'intOrNull'
        },
        'totp2fUserCanRemoveKey' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'trustedBrowserRule' => {
            'default' => 0,
            'type'    => 'boolOrExpr'
        },
        'trustedDomains' => {
            'type' => 'text'
        },
        'twitterAppName' => {
            'type' => 'text'
        },
        'twitterAuthnLevel' => {
            'default' => 1,
            'type'    => 'int'
        },
        'twitterKey' => {
            'type' => 'text'
        },
        'twitterSecret' => {
            'type' => 'text'
        },
        'twitterUserField' => {
            'default' => 'screen_name',
            'type'    => 'text'
        },
        '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'
        },
        'vhostAccessToTrace' => {
            'default' => '',
            'type'    => 'text'
        },
        'vhostAliases' => {
            'default' => '',
            'type'    => 'text'
        },
        'vhostAuthnLevel' => {
            'type' => 'intOrNull'
        },
        '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' => 'DevOpsCDA',
                    'v' => 'DevOpsCDA'
                },
                {
                    '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'
        },
        'webauthn2fAttestation' => {
            'default' => 'none',
            'select'  => [ {
                    'k' => 'none',
                    'v' => 'None'
                },
                {
                    'k' => 'direct',
                    'v' => 'Direct'
                },
                {
                    'k' => 'indirect',
                    'v' => 'Indirect'
                },
                {
                    'k' => 'enterprise',
                    'v' => 'Enterprise'
                }
            ],
            'type' => 'select'
        },
        'webauthn2fAttestationTrust' => {
            'type' => 'file'
        },
        'webauthn2fAuthnLevel' => {
            'type' => 'intOrNull'
        },
        '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'
        },
        'webauthnAppId' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'webauthnDisplayNameAttr' => {
            'type' => 'text'
        },
        'webauthnRpId' => {
            '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' => 'intOrNull'
        },
        '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' => 'intOrNull'
        },
        'yubikey2fUrl' => {
            'type' => 'url'
        },
        'yubikey2fUserCanRemoveKey' => {
            'default' => 1,
            'type'    => 'bool'
        },
        'zimbraAccountKey' => {
            'type' => 'text'
        },
        'zimbraBy' => {
            'type' => 'text'
        },
        'zimbraPreAuthKey' => {
            'type' => 'text'
        },
        'zimbraSsoUrl' => {
            'type' => 'text'
        },
        'zimbraUrl' => {
            'type' => 'text'
        }
    };
}

