// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Threading.Tasks;
using Pulumi.Serialization;
using Pulumi;

namespace Pulumiverse.Fortios
{
    /// <summary>
    /// Configure LDAP server entries.
    /// 
    /// ## Example Usage
    /// 
    /// ```csharp
    /// using System.Collections.Generic;
    /// using System.Linq;
    /// using Pulumi;
    /// using Fortios = Pulumiverse.Fortios;
    /// 
    /// return await Deployment.RunAsync(() =&gt; 
    /// {
    ///     var trname = new Fortios.UserLdap("trname", new()
    ///     {
    ///         AccountKeyFilter = "(&amp;(userPrincipalName=%s)(!(UserAccountControl:1.2.840.113556.1.4.803:=2)))",
    ///         AccountKeyProcessing = "same",
    ///         Cnid = "cn",
    ///         Dn = "EIWNCIEW",
    ///         GroupMemberCheck = "user-attr",
    ///         GroupObjectFilter = "(&amp;(objectcategory=group)(member=*))",
    ///         MemberAttr = "memberOf",
    ///         PasswordExpiryWarning = "disable",
    ///         PasswordRenewal = "disable",
    ///         Port = 389,
    ///         Secure = "disable",
    ///         Server = "1.1.1.1",
    ///         ServerIdentityCheck = "disable",
    ///         SourceIp = "0.0.0.0",
    ///         SslMinProtoVersion = "default",
    ///         Type = "simple",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// User Ldap can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/userLdap:UserLdap labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/userLdap:UserLdap labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/userLdap:UserLdap")]
    public partial class UserLdap : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Account key filter, using the UPN as the search filter.
        /// </summary>
        [Output("accountKeyFilter")]
        public Output<string> AccountKeyFilter { get; private set; } = null!;

        /// <summary>
        /// Account key processing operation, either keep or strip domain string of UPN in the token. Valid values: `same`, `strip`.
        /// </summary>
        [Output("accountKeyProcessing")]
        public Output<string> AccountKeyProcessing { get; private set; } = null!;

        /// <summary>
        /// Enable/disable AntiPhishing credential backend. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("antiphish")]
        public Output<string> Antiphish { get; private set; } = null!;

        /// <summary>
        /// CA certificate name.
        /// </summary>
        [Output("caCert")]
        public Output<string> CaCert { get; private set; } = null!;

        /// <summary>
        /// Client certificate name.
        /// </summary>
        [Output("clientCert")]
        public Output<string> ClientCert { get; private set; } = null!;

        /// <summary>
        /// Enable/disable using client certificate for TLS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("clientCertAuth")]
        public Output<string> ClientCertAuth { get; private set; } = null!;

        /// <summary>
        /// Common name identifier for the LDAP server. The common name identifier for most LDAP servers is "cn".
        /// </summary>
        [Output("cnid")]
        public Output<string> Cnid { get; private set; } = null!;

        /// <summary>
        /// Distinguished name used to look up entries on the LDAP server.
        /// </summary>
        [Output("dn")]
        public Output<string> Dn { get; private set; } = null!;

        /// <summary>
        /// Filter used for group matching.
        /// </summary>
        [Output("groupFilter")]
        public Output<string> GroupFilter { get; private set; } = null!;

        /// <summary>
        /// Group member checking methods. Valid values: `user-attr`, `group-object`, `posix-group-object`.
        /// </summary>
        [Output("groupMemberCheck")]
        public Output<string> GroupMemberCheck { get; private set; } = null!;

        /// <summary>
        /// Filter used for group searching.
        /// </summary>
        [Output("groupObjectFilter")]
        public Output<string> GroupObjectFilter { get; private set; } = null!;

        /// <summary>
        /// Search base used for group searching.
        /// </summary>
        [Output("groupSearchBase")]
        public Output<string> GroupSearchBase { get; private set; } = null!;

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Output("interface")]
        public Output<string> Interface { get; private set; } = null!;

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Output("interfaceSelectMethod")]
        public Output<string> InterfaceSelectMethod { get; private set; } = null!;

        /// <summary>
        /// Name of attribute from which to get group membership.
        /// </summary>
        [Output("memberAttr")]
        public Output<string> MemberAttr { get; private set; } = null!;

        /// <summary>
        /// LDAP server entry name.
        /// </summary>
        [Output("name")]
        public Output<string> Name { get; private set; } = null!;

        /// <summary>
        /// Enable/disable obtaining of user information. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("obtainUserInfo")]
        public Output<string> ObtainUserInfo { get; private set; } = null!;

        /// <summary>
        /// Password for initial binding.
        /// </summary>
        [Output("password")]
        public Output<string?> Password { get; private set; } = null!;

        /// <summary>
        /// Name of attribute to get password hash.
        /// </summary>
        [Output("passwordAttr")]
        public Output<string> PasswordAttr { get; private set; } = null!;

        /// <summary>
        /// Enable/disable password expiry warnings. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("passwordExpiryWarning")]
        public Output<string> PasswordExpiryWarning { get; private set; } = null!;

        /// <summary>
        /// Enable/disable online password renewal. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("passwordRenewal")]
        public Output<string> PasswordRenewal { get; private set; } = null!;

        /// <summary>
        /// Port to be used for communication with the LDAP server (default = 389).
        /// </summary>
        [Output("port")]
        public Output<int> Port { get; private set; } = null!;

        /// <summary>
        /// Search type. Valid values: `recursive`.
        /// </summary>
        [Output("searchType")]
        public Output<string> SearchType { get; private set; } = null!;

        /// <summary>
        /// Secondary LDAP server CN domain name or IP.
        /// </summary>
        [Output("secondaryServer")]
        public Output<string> SecondaryServer { get; private set; } = null!;

        /// <summary>
        /// Port to be used for authentication. Valid values: `disable`, `starttls`, `ldaps`.
        /// </summary>
        [Output("secure")]
        public Output<string> Secure { get; private set; } = null!;

        /// <summary>
        /// LDAP server CN domain name or IP.
        /// </summary>
        [Output("server")]
        public Output<string> Server { get; private set; } = null!;

        /// <summary>
        /// Enable/disable LDAP server identity check (verify server domain name/IP address against the server certificate). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("serverIdentityCheck")]
        public Output<string> ServerIdentityCheck { get; private set; } = null!;

        /// <summary>
        /// Source IP for communications to LDAP server.
        /// </summary>
        [Output("sourceIp")]
        public Output<string> SourceIp { get; private set; } = null!;

        /// <summary>
        /// Source port to be used for communication with the LDAP server.
        /// </summary>
        [Output("sourcePort")]
        public Output<int> SourcePort { get; private set; } = null!;

        /// <summary>
        /// Minimum supported protocol version for SSL/TLS connections (default is to follow system global setting). Valid values: `default`, `SSLv3`, `TLSv1`, `TLSv1-1`, `TLSv1-2`.
        /// </summary>
        [Output("sslMinProtoVersion")]
        public Output<string> SslMinProtoVersion { get; private set; } = null!;

        /// <summary>
        /// Tertiary LDAP server CN domain name or IP.
        /// </summary>
        [Output("tertiaryServer")]
        public Output<string> TertiaryServer { get; private set; } = null!;

        /// <summary>
        /// Enable/disable two-factor authentication. Valid values: `disable`, `fortitoken-cloud`.
        /// </summary>
        [Output("twoFactor")]
        public Output<string> TwoFactor { get; private set; } = null!;

        /// <summary>
        /// Authentication method by FortiToken Cloud. Valid values: `fortitoken`, `email`, `sms`.
        /// </summary>
        [Output("twoFactorAuthentication")]
        public Output<string> TwoFactorAuthentication { get; private set; } = null!;

        /// <summary>
        /// Filter used to synchronize users to FortiToken Cloud.
        /// </summary>
        [Output("twoFactorFilter")]
        public Output<string> TwoFactorFilter { get; private set; } = null!;

        /// <summary>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Output("twoFactorNotification")]
        public Output<string> TwoFactorNotification { get; private set; } = null!;

        /// <summary>
        /// Authentication type for LDAP searches. Valid values: `simple`, `anonymous`, `regular`.
        /// </summary>
        [Output("type")]
        public Output<string> Type { get; private set; } = null!;

        /// <summary>
        /// MS Exchange server from which to fetch user information.
        /// </summary>
        [Output("userInfoExchangeServer")]
        public Output<string> UserInfoExchangeServer { get; private set; } = null!;

        /// <summary>
        /// Username (full DN) for initial binding.
        /// </summary>
        [Output("username")]
        public Output<string> Username { get; private set; } = null!;

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Output("vdomparam")]
        public Output<string?> Vdomparam { get; private set; } = null!;


        /// <summary>
        /// Create a UserLdap resource with the given unique name, arguments, and options.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resource</param>
        /// <param name="args">The arguments used to populate this resource's properties</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public UserLdap(string name, UserLdapArgs args, CustomResourceOptions? options = null)
            : base("fortios:index/userLdap:UserLdap", name, args ?? new UserLdapArgs(), MakeResourceOptions(options, ""))
        {
        }

        private UserLdap(string name, Input<string> id, UserLdapState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/userLdap:UserLdap", name, state, MakeResourceOptions(options, id))
        {
        }

        private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? options, Input<string>? id)
        {
            var defaultOptions = new CustomResourceOptions
            {
                Version = Utilities.Version,
                PluginDownloadURL = "github://api.github.com/pulumiverse/pulumi-fortios",
                AdditionalSecretOutputs =
                {
                    "password",
                },
            };
            var merged = CustomResourceOptions.Merge(defaultOptions, options);
            // Override the ID if one was specified for consistency with other language SDKs.
            merged.Id = id ?? merged.Id;
            return merged;
        }
        /// <summary>
        /// Get an existing UserLdap resource's state with the given name, ID, and optional extra
        /// properties used to qualify the lookup.
        /// </summary>
        ///
        /// <param name="name">The unique name of the resulting resource.</param>
        /// <param name="id">The unique provider ID of the resource to lookup.</param>
        /// <param name="state">Any extra arguments used during the lookup.</param>
        /// <param name="options">A bag of options that control this resource's behavior</param>
        public static UserLdap Get(string name, Input<string> id, UserLdapState? state = null, CustomResourceOptions? options = null)
        {
            return new UserLdap(name, id, state, options);
        }
    }

    public sealed class UserLdapArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Account key filter, using the UPN as the search filter.
        /// </summary>
        [Input("accountKeyFilter")]
        public Input<string>? AccountKeyFilter { get; set; }

        /// <summary>
        /// Account key processing operation, either keep or strip domain string of UPN in the token. Valid values: `same`, `strip`.
        /// </summary>
        [Input("accountKeyProcessing")]
        public Input<string>? AccountKeyProcessing { get; set; }

        /// <summary>
        /// Enable/disable AntiPhishing credential backend. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antiphish")]
        public Input<string>? Antiphish { get; set; }

        /// <summary>
        /// CA certificate name.
        /// </summary>
        [Input("caCert")]
        public Input<string>? CaCert { get; set; }

        /// <summary>
        /// Client certificate name.
        /// </summary>
        [Input("clientCert")]
        public Input<string>? ClientCert { get; set; }

        /// <summary>
        /// Enable/disable using client certificate for TLS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("clientCertAuth")]
        public Input<string>? ClientCertAuth { get; set; }

        /// <summary>
        /// Common name identifier for the LDAP server. The common name identifier for most LDAP servers is "cn".
        /// </summary>
        [Input("cnid")]
        public Input<string>? Cnid { get; set; }

        /// <summary>
        /// Distinguished name used to look up entries on the LDAP server.
        /// </summary>
        [Input("dn", required: true)]
        public Input<string> Dn { get; set; } = null!;

        /// <summary>
        /// Filter used for group matching.
        /// </summary>
        [Input("groupFilter")]
        public Input<string>? GroupFilter { get; set; }

        /// <summary>
        /// Group member checking methods. Valid values: `user-attr`, `group-object`, `posix-group-object`.
        /// </summary>
        [Input("groupMemberCheck")]
        public Input<string>? GroupMemberCheck { get; set; }

        /// <summary>
        /// Filter used for group searching.
        /// </summary>
        [Input("groupObjectFilter")]
        public Input<string>? GroupObjectFilter { get; set; }

        /// <summary>
        /// Search base used for group searching.
        /// </summary>
        [Input("groupSearchBase")]
        public Input<string>? GroupSearchBase { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("interfaceSelectMethod")]
        public Input<string>? InterfaceSelectMethod { get; set; }

        /// <summary>
        /// Name of attribute from which to get group membership.
        /// </summary>
        [Input("memberAttr")]
        public Input<string>? MemberAttr { get; set; }

        /// <summary>
        /// LDAP server entry name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable obtaining of user information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("obtainUserInfo")]
        public Input<string>? ObtainUserInfo { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password for initial binding.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Name of attribute to get password hash.
        /// </summary>
        [Input("passwordAttr")]
        public Input<string>? PasswordAttr { get; set; }

        /// <summary>
        /// Enable/disable password expiry warnings. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passwordExpiryWarning")]
        public Input<string>? PasswordExpiryWarning { get; set; }

        /// <summary>
        /// Enable/disable online password renewal. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passwordRenewal")]
        public Input<string>? PasswordRenewal { get; set; }

        /// <summary>
        /// Port to be used for communication with the LDAP server (default = 389).
        /// </summary>
        [Input("port")]
        public Input<int>? Port { get; set; }

        /// <summary>
        /// Search type. Valid values: `recursive`.
        /// </summary>
        [Input("searchType")]
        public Input<string>? SearchType { get; set; }

        /// <summary>
        /// Secondary LDAP server CN domain name or IP.
        /// </summary>
        [Input("secondaryServer")]
        public Input<string>? SecondaryServer { get; set; }

        /// <summary>
        /// Port to be used for authentication. Valid values: `disable`, `starttls`, `ldaps`.
        /// </summary>
        [Input("secure")]
        public Input<string>? Secure { get; set; }

        /// <summary>
        /// LDAP server CN domain name or IP.
        /// </summary>
        [Input("server", required: true)]
        public Input<string> Server { get; set; } = null!;

        /// <summary>
        /// Enable/disable LDAP server identity check (verify server domain name/IP address against the server certificate). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serverIdentityCheck")]
        public Input<string>? ServerIdentityCheck { get; set; }

        /// <summary>
        /// Source IP for communications to LDAP server.
        /// </summary>
        [Input("sourceIp")]
        public Input<string>? SourceIp { get; set; }

        /// <summary>
        /// Source port to be used for communication with the LDAP server.
        /// </summary>
        [Input("sourcePort")]
        public Input<int>? SourcePort { get; set; }

        /// <summary>
        /// Minimum supported protocol version for SSL/TLS connections (default is to follow system global setting). Valid values: `default`, `SSLv3`, `TLSv1`, `TLSv1-1`, `TLSv1-2`.
        /// </summary>
        [Input("sslMinProtoVersion")]
        public Input<string>? SslMinProtoVersion { get; set; }

        /// <summary>
        /// Tertiary LDAP server CN domain name or IP.
        /// </summary>
        [Input("tertiaryServer")]
        public Input<string>? TertiaryServer { get; set; }

        /// <summary>
        /// Enable/disable two-factor authentication. Valid values: `disable`, `fortitoken-cloud`.
        /// </summary>
        [Input("twoFactor")]
        public Input<string>? TwoFactor { get; set; }

        /// <summary>
        /// Authentication method by FortiToken Cloud. Valid values: `fortitoken`, `email`, `sms`.
        /// </summary>
        [Input("twoFactorAuthentication")]
        public Input<string>? TwoFactorAuthentication { get; set; }

        /// <summary>
        /// Filter used to synchronize users to FortiToken Cloud.
        /// </summary>
        [Input("twoFactorFilter")]
        public Input<string>? TwoFactorFilter { get; set; }

        /// <summary>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Input("twoFactorNotification")]
        public Input<string>? TwoFactorNotification { get; set; }

        /// <summary>
        /// Authentication type for LDAP searches. Valid values: `simple`, `anonymous`, `regular`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// MS Exchange server from which to fetch user information.
        /// </summary>
        [Input("userInfoExchangeServer")]
        public Input<string>? UserInfoExchangeServer { get; set; }

        /// <summary>
        /// Username (full DN) for initial binding.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        public UserLdapArgs()
        {
        }
        public static new UserLdapArgs Empty => new UserLdapArgs();
    }

    public sealed class UserLdapState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Account key filter, using the UPN as the search filter.
        /// </summary>
        [Input("accountKeyFilter")]
        public Input<string>? AccountKeyFilter { get; set; }

        /// <summary>
        /// Account key processing operation, either keep or strip domain string of UPN in the token. Valid values: `same`, `strip`.
        /// </summary>
        [Input("accountKeyProcessing")]
        public Input<string>? AccountKeyProcessing { get; set; }

        /// <summary>
        /// Enable/disable AntiPhishing credential backend. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("antiphish")]
        public Input<string>? Antiphish { get; set; }

        /// <summary>
        /// CA certificate name.
        /// </summary>
        [Input("caCert")]
        public Input<string>? CaCert { get; set; }

        /// <summary>
        /// Client certificate name.
        /// </summary>
        [Input("clientCert")]
        public Input<string>? ClientCert { get; set; }

        /// <summary>
        /// Enable/disable using client certificate for TLS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("clientCertAuth")]
        public Input<string>? ClientCertAuth { get; set; }

        /// <summary>
        /// Common name identifier for the LDAP server. The common name identifier for most LDAP servers is "cn".
        /// </summary>
        [Input("cnid")]
        public Input<string>? Cnid { get; set; }

        /// <summary>
        /// Distinguished name used to look up entries on the LDAP server.
        /// </summary>
        [Input("dn")]
        public Input<string>? Dn { get; set; }

        /// <summary>
        /// Filter used for group matching.
        /// </summary>
        [Input("groupFilter")]
        public Input<string>? GroupFilter { get; set; }

        /// <summary>
        /// Group member checking methods. Valid values: `user-attr`, `group-object`, `posix-group-object`.
        /// </summary>
        [Input("groupMemberCheck")]
        public Input<string>? GroupMemberCheck { get; set; }

        /// <summary>
        /// Filter used for group searching.
        /// </summary>
        [Input("groupObjectFilter")]
        public Input<string>? GroupObjectFilter { get; set; }

        /// <summary>
        /// Search base used for group searching.
        /// </summary>
        [Input("groupSearchBase")]
        public Input<string>? GroupSearchBase { get; set; }

        /// <summary>
        /// Specify outgoing interface to reach server.
        /// </summary>
        [Input("interface")]
        public Input<string>? Interface { get; set; }

        /// <summary>
        /// Specify how to select outgoing interface to reach server. Valid values: `auto`, `sdwan`, `specify`.
        /// </summary>
        [Input("interfaceSelectMethod")]
        public Input<string>? InterfaceSelectMethod { get; set; }

        /// <summary>
        /// Name of attribute from which to get group membership.
        /// </summary>
        [Input("memberAttr")]
        public Input<string>? MemberAttr { get; set; }

        /// <summary>
        /// LDAP server entry name.
        /// </summary>
        [Input("name")]
        public Input<string>? Name { get; set; }

        /// <summary>
        /// Enable/disable obtaining of user information. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("obtainUserInfo")]
        public Input<string>? ObtainUserInfo { get; set; }

        [Input("password")]
        private Input<string>? _password;

        /// <summary>
        /// Password for initial binding.
        /// </summary>
        public Input<string>? Password
        {
            get => _password;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _password = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Name of attribute to get password hash.
        /// </summary>
        [Input("passwordAttr")]
        public Input<string>? PasswordAttr { get; set; }

        /// <summary>
        /// Enable/disable password expiry warnings. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passwordExpiryWarning")]
        public Input<string>? PasswordExpiryWarning { get; set; }

        /// <summary>
        /// Enable/disable online password renewal. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("passwordRenewal")]
        public Input<string>? PasswordRenewal { get; set; }

        /// <summary>
        /// Port to be used for communication with the LDAP server (default = 389).
        /// </summary>
        [Input("port")]
        public Input<int>? Port { get; set; }

        /// <summary>
        /// Search type. Valid values: `recursive`.
        /// </summary>
        [Input("searchType")]
        public Input<string>? SearchType { get; set; }

        /// <summary>
        /// Secondary LDAP server CN domain name or IP.
        /// </summary>
        [Input("secondaryServer")]
        public Input<string>? SecondaryServer { get; set; }

        /// <summary>
        /// Port to be used for authentication. Valid values: `disable`, `starttls`, `ldaps`.
        /// </summary>
        [Input("secure")]
        public Input<string>? Secure { get; set; }

        /// <summary>
        /// LDAP server CN domain name or IP.
        /// </summary>
        [Input("server")]
        public Input<string>? Server { get; set; }

        /// <summary>
        /// Enable/disable LDAP server identity check (verify server domain name/IP address against the server certificate). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serverIdentityCheck")]
        public Input<string>? ServerIdentityCheck { get; set; }

        /// <summary>
        /// Source IP for communications to LDAP server.
        /// </summary>
        [Input("sourceIp")]
        public Input<string>? SourceIp { get; set; }

        /// <summary>
        /// Source port to be used for communication with the LDAP server.
        /// </summary>
        [Input("sourcePort")]
        public Input<int>? SourcePort { get; set; }

        /// <summary>
        /// Minimum supported protocol version for SSL/TLS connections (default is to follow system global setting). Valid values: `default`, `SSLv3`, `TLSv1`, `TLSv1-1`, `TLSv1-2`.
        /// </summary>
        [Input("sslMinProtoVersion")]
        public Input<string>? SslMinProtoVersion { get; set; }

        /// <summary>
        /// Tertiary LDAP server CN domain name or IP.
        /// </summary>
        [Input("tertiaryServer")]
        public Input<string>? TertiaryServer { get; set; }

        /// <summary>
        /// Enable/disable two-factor authentication. Valid values: `disable`, `fortitoken-cloud`.
        /// </summary>
        [Input("twoFactor")]
        public Input<string>? TwoFactor { get; set; }

        /// <summary>
        /// Authentication method by FortiToken Cloud. Valid values: `fortitoken`, `email`, `sms`.
        /// </summary>
        [Input("twoFactorAuthentication")]
        public Input<string>? TwoFactorAuthentication { get; set; }

        /// <summary>
        /// Filter used to synchronize users to FortiToken Cloud.
        /// </summary>
        [Input("twoFactorFilter")]
        public Input<string>? TwoFactorFilter { get; set; }

        /// <summary>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Input("twoFactorNotification")]
        public Input<string>? TwoFactorNotification { get; set; }

        /// <summary>
        /// Authentication type for LDAP searches. Valid values: `simple`, `anonymous`, `regular`.
        /// </summary>
        [Input("type")]
        public Input<string>? Type { get; set; }

        /// <summary>
        /// MS Exchange server from which to fetch user information.
        /// </summary>
        [Input("userInfoExchangeServer")]
        public Input<string>? UserInfoExchangeServer { get; set; }

        /// <summary>
        /// Username (full DN) for initial binding.
        /// </summary>
        [Input("username")]
        public Input<string>? Username { get; set; }

        /// <summary>
        /// Specifies the vdom to which the resource will be applied when the FortiGate unit is running in VDOM mode. Only one vdom can be specified. If you want to inherit the vdom configuration of the provider, please do not set this parameter.
        /// </summary>
        [Input("vdomparam")]
        public Input<string>? Vdomparam { get; set; }

        public UserLdapState()
        {
        }
        public static new UserLdapState Empty => new UserLdapState();
    }
}
