<gh_stars>0// *** 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>
    /// Portal.
    /// 
    /// ## 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.VpnsslwebPortal("trname", new()
    ///     {
    ///         AllowUserAccess = "web ftp smb sftp telnet ssh vnc rdp ping citrix portforward",
    ///         AutoConnect = "disable",
    ///         CustomizeForticlientDownloadUrl = "disable",
    ///         DisplayBookmark = "enable",
    ///         DisplayConnectionTools = "enable",
    ///         DisplayHistory = "enable",
    ///         DisplayStatus = "enable",
    ///         DnsServer1 = "0.0.0.0",
    ///         DnsServer2 = "0.0.0.0",
    ///         ExclusiveRouting = "disable",
    ///         ForticlientDownload = "enable",
    ///         ForticlientDownloadMethod = "direct",
    ///         Heading = "SSL-VPN Portal",
    ///         HideSsoCredential = "enable",
    ///         HostCheck = "none",
    ///         IpMode = "range",
    ///         IpPools = new[]
    ///         {
    ///             new Fortios.Inputs.VpnsslwebPortalIpPoolArgs
    ///             {
    ///                 Name = "SSLVPN_TUNNEL_ADDR1",
    ///             },
    ///         },
    ///         Ipv6DnsServer1 = "::",
    ///         Ipv6DnsServer2 = "::",
    ///         Ipv6ExclusiveRouting = "disable",
    ///         Ipv6Pools = new[]
    ///         {
    ///             new Fortios.Inputs.VpnsslwebPortalIpv6PoolArgs
    ///             {
    ///                 Name = "SSLVPN_TUNNEL_IPv6_ADDR1",
    ///             },
    ///         },
    ///         Ipv6ServiceRestriction = "disable",
    ///         Ipv6SplitTunneling = "enable",
    ///         Ipv6TunnelMode = "enable",
    ///         Ipv6WinsServer1 = "::",
    ///         Ipv6WinsServer2 = "::",
    ///         KeepAlive = "disable",
    ///         LimitUserLogins = "disable",
    ///         MacAddrAction = "allow",
    ///         MacAddrCheck = "disable",
    ///         OsCheck = "disable",
    ///         SavePassword = "disable",
    ///         ServiceRestriction = "disable",
    ///         SkipCheckForBrowser = "enable",
    ///         SkipCheckForUnsupportedOs = "enable",
    ///         SmbNtlmv1Auth = "disable",
    ///         Smbv1 = "disable",
    ///         SplitTunneling = "enable",
    ///         Theme = "blue",
    ///         TunnelMode = "enable",
    ///         UserBookmark = "enable",
    ///         UserGroupBookmark = "enable",
    ///         WebMode = "disable",
    ///         WinsServer1 = "0.0.0.0",
    ///         WinsServer2 = "0.0.0.0",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// VpnSslWeb Portal can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/vpnsslwebPortal:VpnsslwebPortal labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/vpnsslwebPortal:VpnsslwebPortal labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/vpnsslwebPortal:VpnsslwebPortal")]
    public partial class VpnsslwebPortal : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Allow user access to SSL-VPN applications.
        /// </summary>
        [Output("allowUserAccess")]
        public Output<string> AllowUserAccess { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic connect by client when system is up. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("autoConnect")]
        public Output<string> AutoConnect { get; private set; } = null!;

        /// <summary>
        /// Portal bookmark group. The structure of `bookmark_group` block is documented below.
        /// </summary>
        [Output("bookmarkGroups")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalBookmarkGroup>> BookmarkGroups { get; private set; } = null!;

        /// <summary>
        /// Enable to support RDP/VPC clipboard functionality. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("clipboard")]
        public Output<string> Clipboard { get; private set; } = null!;

        /// <summary>
        /// Change the web portal display language. Overrides config system global set language. You can use config system custom-language and execute system custom-language to add custom language files.
        /// </summary>
        [Output("customLang")]
        public Output<string> CustomLang { get; private set; } = null!;

        /// <summary>
        /// Enable support of customized download URL for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("customizeForticlientDownloadUrl")]
        public Output<string> CustomizeForticlientDownloadUrl { get; private set; } = null!;

        /// <summary>
        /// Screen height (range from 0 - 65535, default = 768).
        /// </summary>
        [Output("defaultWindowHeight")]
        public Output<int> DefaultWindowHeight { get; private set; } = null!;

        /// <summary>
        /// Screen width (range from 0 - 65535, default = 1024).
        /// </summary>
        [Output("defaultWindowWidth")]
        public Output<int> DefaultWindowWidth { get; private set; } = null!;

        /// <summary>
        /// Configure overlapping DHCP IP allocation assignment. Valid values: `use-new`, `use-old`.
        /// </summary>
        [Output("dhcpIpOverlap")]
        public Output<string> DhcpIpOverlap { get; private set; } = null!;

        /// <summary>
        /// Enable to display the web portal bookmark widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("displayBookmark")]
        public Output<string> DisplayBookmark { get; private set; } = null!;

        /// <summary>
        /// Enable to display the web portal connection tools widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("displayConnectionTools")]
        public Output<string> DisplayConnectionTools { get; private set; } = null!;

        /// <summary>
        /// Enable to display the web portal user login history widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("displayHistory")]
        public Output<string> DisplayHistory { get; private set; } = null!;

        /// <summary>
        /// Enable to display the web portal status widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("displayStatus")]
        public Output<string> DisplayStatus { get; private set; } = null!;

        /// <summary>
        /// IPv4 DNS server 1.
        /// </summary>
        [Output("dnsServer1")]
        public Output<string> DnsServer1 { get; private set; } = null!;

        /// <summary>
        /// IPv4 DNS server 2.
        /// </summary>
        [Output("dnsServer2")]
        public Output<string> DnsServer2 { get; private set; } = null!;

        /// <summary>
        /// DNS suffix.
        /// </summary>
        [Output("dnsSuffix")]
        public Output<string?> DnsSuffix { get; private set; } = null!;

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Output("dynamicSortSubtable")]
        public Output<string?> DynamicSortSubtable { get; private set; } = null!;

        /// <summary>
        /// Enable/disable all traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("exclusiveRouting")]
        public Output<string> ExclusiveRouting { get; private set; } = null!;

        /// <summary>
        /// Enable/disable download option for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("forticlientDownload")]
        public Output<string> ForticlientDownload { get; private set; } = null!;

        /// <summary>
        /// FortiClient download method. Valid values: `direct`, `ssl-vpn`.
        /// </summary>
        [Output("forticlientDownloadMethod")]
        public Output<string> ForticlientDownloadMethod { get; private set; } = null!;

        /// <summary>
        /// Web portal heading message.
        /// </summary>
        [Output("heading")]
        public Output<string> Heading { get; private set; } = null!;

        /// <summary>
        /// Enable to prevent SSO credential being sent to client. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("hideSsoCredential")]
        public Output<string> HideSsoCredential { get; private set; } = null!;

        /// <summary>
        /// Type of host checking performed on endpoints. Valid values: `none`, `av`, `fw`, `av-fw`, `custom`.
        /// </summary>
        [Output("hostCheck")]
        public Output<string> HostCheck { get; private set; } = null!;

        /// <summary>
        /// Periodic host check interval. Value of 0 means disabled and host checking only happens when the endpoint connects.
        /// </summary>
        [Output("hostCheckInterval")]
        public Output<int> HostCheckInterval { get; private set; } = null!;

        /// <summary>
        /// One or more policies to require the endpoint to have specific security software. The structure of `host_check_policy` block is documented below.
        /// </summary>
        [Output("hostCheckPolicies")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalHostCheckPolicy>> HostCheckPolicies { get; private set; } = null!;

        /// <summary>
        /// Method by which users of this SSL-VPN tunnel obtain IP addresses.
        /// </summary>
        [Output("ipMode")]
        public Output<string> IpMode { get; private set; } = null!;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ip_pools` block is documented below.
        /// </summary>
        [Output("ipPools")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalIpPool>> IpPools { get; private set; } = null!;

        /// <summary>
        /// IPv6 DNS server 1.
        /// </summary>
        [Output("ipv6DnsServer1")]
        public Output<string> Ipv6DnsServer1 { get; private set; } = null!;

        /// <summary>
        /// IPv6 DNS server 2.
        /// </summary>
        [Output("ipv6DnsServer2")]
        public Output<string> Ipv6DnsServer2 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable all IPv6 traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6ExclusiveRouting")]
        public Output<string> Ipv6ExclusiveRouting { get; private set; } = null!;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ipv6_pools` block is documented below.
        /// </summary>
        [Output("ipv6Pools")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalIpv6Pool>> Ipv6Pools { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6ServiceRestriction")]
        public Output<string> Ipv6ServiceRestriction { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6SplitTunneling")]
        public Output<string> Ipv6SplitTunneling { get; private set; } = null!;

        /// <summary>
        /// IPv6 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `ipv6_split_tunneling_routing_address` block is documented below.
        /// </summary>
        [Output("ipv6SplitTunnelingRoutingAddresses")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddress>> Ipv6SplitTunnelingRoutingAddresses { get; private set; } = null!;

        /// <summary>
        /// Enable to negate IPv6 split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6SplitTunnelingRoutingNegate")]
        public Output<string> Ipv6SplitTunnelingRoutingNegate { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv6 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("ipv6TunnelMode")]
        public Output<string> Ipv6TunnelMode { get; private set; } = null!;

        /// <summary>
        /// IPv6 WINS server 1.
        /// </summary>
        [Output("ipv6WinsServer1")]
        public Output<string> Ipv6WinsServer1 { get; private set; } = null!;

        /// <summary>
        /// IPv6 WINS server 2.
        /// </summary>
        [Output("ipv6WinsServer2")]
        public Output<string> Ipv6WinsServer2 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable automatic reconnect for FortiClient connections. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("keepAlive")]
        public Output<string> KeepAlive { get; private set; } = null!;

        /// <summary>
        /// Enable to limit each user to one SSL-VPN session at a time. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("limitUserLogins")]
        public Output<string> LimitUserLogins { get; private set; } = null!;

        /// <summary>
        /// Client MAC address action. Valid values: `allow`, `deny`.
        /// </summary>
        [Output("macAddrAction")]
        public Output<string> MacAddrAction { get; private set; } = null!;

        /// <summary>
        /// Enable/disable MAC address host checking. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("macAddrCheck")]
        public Output<string> MacAddrCheck { get; private set; } = null!;

        /// <summary>
        /// Client MAC address check rule. The structure of `mac_addr_check_rule` block is documented below.
        /// </summary>
        [Output("macAddrCheckRules")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalMacAddrCheckRule>> MacAddrCheckRules { get; private set; } = null!;

        /// <summary>
        /// Download URL for Mac FortiClient.
        /// </summary>
        [Output("macosForticlientDownloadUrl")]
        public Output<string?> MacosForticlientDownloadUrl { get; private set; } = null!;

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

        /// <summary>
        /// Enable to let the FortiGate decide action based on client OS. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("osCheck")]
        public Output<string> OsCheck { get; private set; } = null!;

        /// <summary>
        /// SSL VPN OS checks. The structure of `os_check_list` block is documented below.
        /// </summary>
        [Output("osCheckLists")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalOsCheckList>> OsCheckLists { get; private set; } = null!;

        /// <summary>
        /// prefer to query IPv6 dns first if enabled. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("preferIpv6Dns")]
        public Output<string> PreferIpv6Dns { get; private set; } = null!;

        /// <summary>
        /// Client login redirect URL.
        /// </summary>
        [Output("redirUrl")]
        public Output<string?> RedirUrl { get; private set; } = null!;

        /// <summary>
        /// Rewrite contents for URI contains IP and "/ui/". (default = disable) Valid values: `enable`, `disable`.
        /// </summary>
        [Output("rewriteIpUriUi")]
        public Output<string> RewriteIpUriUi { get; private set; } = null!;

        /// <summary>
        /// Enable/disable FortiClient saving the user's password. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("savePassword")]
        public Output<string> SavePassword { get; private set; } = null!;

        /// <summary>
        /// Enable/disable tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("serviceRestriction")]
        public Output<string> ServiceRestriction { get; private set; } = null!;

        /// <summary>
        /// Enable to skip host check for browser support. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("skipCheckForBrowser")]
        public Output<string> SkipCheckForBrowser { get; private set; } = null!;

        /// <summary>
        /// Enable to skip host check if client OS does not support it. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("skipCheckForUnsupportedOs")]
        public Output<string> SkipCheckForUnsupportedOs { get; private set; } = null!;

        /// <summary>
        /// SMB maximum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Output("smbMaxVersion")]
        public Output<string> SmbMaxVersion { get; private set; } = null!;

        /// <summary>
        /// SMB minimum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Output("smbMinVersion")]
        public Output<string> SmbMinVersion { get; private set; } = null!;

        /// <summary>
        /// Enable support of NTLMv1 for Samba authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("smbNtlmv1Auth")]
        public Output<string> SmbNtlmv1Auth { get; private set; } = null!;

        /// <summary>
        /// Enable/disable support of SMBv1 for Samba. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("smbv1")]
        public Output<string> Smbv1 { get; private set; } = null!;

        /// <summary>
        /// Split DNS for SSL VPN. The structure of `split_dns` block is documented below.
        /// </summary>
        [Output("splitDns")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalSplitDn>> SplitDns { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("splitTunneling")]
        public Output<string> SplitTunneling { get; private set; } = null!;

        /// <summary>
        /// IPv4 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `split_tunneling_routing_address` block is documented below.
        /// </summary>
        [Output("splitTunnelingRoutingAddresses")]
        public Output<ImmutableArray<Outputs.VpnsslwebPortalSplitTunnelingRoutingAddress>> SplitTunnelingRoutingAddresses { get; private set; } = null!;

        /// <summary>
        /// Enable to negate split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("splitTunnelingRoutingNegate")]
        public Output<string> SplitTunnelingRoutingNegate { get; private set; } = null!;

        /// <summary>
        /// Web portal color scheme.
        /// </summary>
        [Output("theme")]
        public Output<string> Theme { get; private set; } = null!;

        /// <summary>
        /// Transform backward slashes to forward slashes in URLs. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("transformBackwardSlashes")]
        public Output<string> TransformBackwardSlashes { get; private set; } = null!;

        /// <summary>
        /// Enable/disable IPv4 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("tunnelMode")]
        public Output<string> TunnelMode { get; private set; } = null!;

        /// <summary>
        /// Use SD-WAN rules to get output interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("useSdwan")]
        public Output<string> UseSdwan { get; private set; } = null!;

        /// <summary>
        /// Enable to allow web portal users to create their own bookmarks. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("userBookmark")]
        public Output<string> UserBookmark { get; private set; } = null!;

        /// <summary>
        /// Enable to allow web portal users to create bookmarks for all users in the same user group. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("userGroupBookmark")]
        public Output<string> UserGroupBookmark { 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>
        /// Enable/disable SSL VPN web mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("webMode")]
        public Output<string> WebMode { get; private set; } = null!;

        /// <summary>
        /// Download URL for Windows FortiClient.
        /// </summary>
        [Output("windowsForticlientDownloadUrl")]
        public Output<string?> WindowsForticlientDownloadUrl { get; private set; } = null!;

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Output("winsServer1")]
        public Output<string> WinsServer1 { get; private set; } = null!;

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Output("winsServer2")]
        public Output<string> WinsServer2 { get; private set; } = null!;


        /// <summary>
        /// Create a VpnsslwebPortal 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 VpnsslwebPortal(string name, VpnsslwebPortalArgs? args = null, CustomResourceOptions? options = null)
            : base("fortios:index/vpnsslwebPortal:VpnsslwebPortal", name, args ?? new VpnsslwebPortalArgs(), MakeResourceOptions(options, ""))
        {
        }

        private VpnsslwebPortal(string name, Input<string> id, VpnsslwebPortalState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/vpnsslwebPortal:VpnsslwebPortal", 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",
            };
            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 VpnsslwebPortal 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 VpnsslwebPortal Get(string name, Input<string> id, VpnsslwebPortalState? state = null, CustomResourceOptions? options = null)
        {
            return new VpnsslwebPortal(name, id, state, options);
        }
    }

    public sealed class VpnsslwebPortalArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Allow user access to SSL-VPN applications.
        /// </summary>
        [Input("allowUserAccess")]
        public Input<string>? AllowUserAccess { get; set; }

        /// <summary>
        /// Enable/disable automatic connect by client when system is up. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoConnect")]
        public Input<string>? AutoConnect { get; set; }

        [Input("bookmarkGroups")]
        private InputList<Inputs.VpnsslwebPortalBookmarkGroupArgs>? _bookmarkGroups;

        /// <summary>
        /// Portal bookmark group. The structure of `bookmark_group` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalBookmarkGroupArgs> BookmarkGroups
        {
            get => _bookmarkGroups ?? (_bookmarkGroups = new InputList<Inputs.VpnsslwebPortalBookmarkGroupArgs>());
            set => _bookmarkGroups = value;
        }

        /// <summary>
        /// Enable to support RDP/VPC clipboard functionality. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("clipboard")]
        public Input<string>? Clipboard { get; set; }

        /// <summary>
        /// Change the web portal display language. Overrides config system global set language. You can use config system custom-language and execute system custom-language to add custom language files.
        /// </summary>
        [Input("customLang")]
        public Input<string>? CustomLang { get; set; }

        /// <summary>
        /// Enable support of customized download URL for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("customizeForticlientDownloadUrl")]
        public Input<string>? CustomizeForticlientDownloadUrl { get; set; }

        /// <summary>
        /// Screen height (range from 0 - 65535, default = 768).
        /// </summary>
        [Input("defaultWindowHeight")]
        public Input<int>? DefaultWindowHeight { get; set; }

        /// <summary>
        /// Screen width (range from 0 - 65535, default = 1024).
        /// </summary>
        [Input("defaultWindowWidth")]
        public Input<int>? DefaultWindowWidth { get; set; }

        /// <summary>
        /// Configure overlapping DHCP IP allocation assignment. Valid values: `use-new`, `use-old`.
        /// </summary>
        [Input("dhcpIpOverlap")]
        public Input<string>? DhcpIpOverlap { get; set; }

        /// <summary>
        /// Enable to display the web portal bookmark widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayBookmark")]
        public Input<string>? DisplayBookmark { get; set; }

        /// <summary>
        /// Enable to display the web portal connection tools widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayConnectionTools")]
        public Input<string>? DisplayConnectionTools { get; set; }

        /// <summary>
        /// Enable to display the web portal user login history widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayHistory")]
        public Input<string>? DisplayHistory { get; set; }

        /// <summary>
        /// Enable to display the web portal status widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayStatus")]
        public Input<string>? DisplayStatus { get; set; }

        /// <summary>
        /// IPv4 DNS server 1.
        /// </summary>
        [Input("dnsServer1")]
        public Input<string>? DnsServer1 { get; set; }

        /// <summary>
        /// IPv4 DNS server 2.
        /// </summary>
        [Input("dnsServer2")]
        public Input<string>? DnsServer2 { get; set; }

        /// <summary>
        /// DNS suffix.
        /// </summary>
        [Input("dnsSuffix")]
        public Input<string>? DnsSuffix { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Enable/disable all traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("exclusiveRouting")]
        public Input<string>? ExclusiveRouting { get; set; }

        /// <summary>
        /// Enable/disable download option for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("forticlientDownload")]
        public Input<string>? ForticlientDownload { get; set; }

        /// <summary>
        /// FortiClient download method. Valid values: `direct`, `ssl-vpn`.
        /// </summary>
        [Input("forticlientDownloadMethod")]
        public Input<string>? ForticlientDownloadMethod { get; set; }

        /// <summary>
        /// Web portal heading message.
        /// </summary>
        [Input("heading")]
        public Input<string>? Heading { get; set; }

        /// <summary>
        /// Enable to prevent SSO credential being sent to client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("hideSsoCredential")]
        public Input<string>? HideSsoCredential { get; set; }

        /// <summary>
        /// Type of host checking performed on endpoints. Valid values: `none`, `av`, `fw`, `av-fw`, `custom`.
        /// </summary>
        [Input("hostCheck")]
        public Input<string>? HostCheck { get; set; }

        /// <summary>
        /// Periodic host check interval. Value of 0 means disabled and host checking only happens when the endpoint connects.
        /// </summary>
        [Input("hostCheckInterval")]
        public Input<int>? HostCheckInterval { get; set; }

        [Input("hostCheckPolicies")]
        private InputList<Inputs.VpnsslwebPortalHostCheckPolicyArgs>? _hostCheckPolicies;

        /// <summary>
        /// One or more policies to require the endpoint to have specific security software. The structure of `host_check_policy` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalHostCheckPolicyArgs> HostCheckPolicies
        {
            get => _hostCheckPolicies ?? (_hostCheckPolicies = new InputList<Inputs.VpnsslwebPortalHostCheckPolicyArgs>());
            set => _hostCheckPolicies = value;
        }

        /// <summary>
        /// Method by which users of this SSL-VPN tunnel obtain IP addresses.
        /// </summary>
        [Input("ipMode")]
        public Input<string>? IpMode { get; set; }

        [Input("ipPools")]
        private InputList<Inputs.VpnsslwebPortalIpPoolArgs>? _ipPools;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ip_pools` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpPoolArgs> IpPools
        {
            get => _ipPools ?? (_ipPools = new InputList<Inputs.VpnsslwebPortalIpPoolArgs>());
            set => _ipPools = value;
        }

        /// <summary>
        /// IPv6 DNS server 1.
        /// </summary>
        [Input("ipv6DnsServer1")]
        public Input<string>? Ipv6DnsServer1 { get; set; }

        /// <summary>
        /// IPv6 DNS server 2.
        /// </summary>
        [Input("ipv6DnsServer2")]
        public Input<string>? Ipv6DnsServer2 { get; set; }

        /// <summary>
        /// Enable/disable all IPv6 traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6ExclusiveRouting")]
        public Input<string>? Ipv6ExclusiveRouting { get; set; }

        [Input("ipv6Pools")]
        private InputList<Inputs.VpnsslwebPortalIpv6PoolArgs>? _ipv6Pools;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ipv6_pools` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpv6PoolArgs> Ipv6Pools
        {
            get => _ipv6Pools ?? (_ipv6Pools = new InputList<Inputs.VpnsslwebPortalIpv6PoolArgs>());
            set => _ipv6Pools = value;
        }

        /// <summary>
        /// Enable/disable IPv6 tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6ServiceRestriction")]
        public Input<string>? Ipv6ServiceRestriction { get; set; }

        /// <summary>
        /// Enable/disable IPv6 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6SplitTunneling")]
        public Input<string>? Ipv6SplitTunneling { get; set; }

        [Input("ipv6SplitTunnelingRoutingAddresses")]
        private InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressArgs>? _ipv6SplitTunnelingRoutingAddresses;

        /// <summary>
        /// IPv6 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `ipv6_split_tunneling_routing_address` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressArgs> Ipv6SplitTunnelingRoutingAddresses
        {
            get => _ipv6SplitTunnelingRoutingAddresses ?? (_ipv6SplitTunnelingRoutingAddresses = new InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressArgs>());
            set => _ipv6SplitTunnelingRoutingAddresses = value;
        }

        /// <summary>
        /// Enable to negate IPv6 split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6SplitTunnelingRoutingNegate")]
        public Input<string>? Ipv6SplitTunnelingRoutingNegate { get; set; }

        /// <summary>
        /// Enable/disable IPv6 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6TunnelMode")]
        public Input<string>? Ipv6TunnelMode { get; set; }

        /// <summary>
        /// IPv6 WINS server 1.
        /// </summary>
        [Input("ipv6WinsServer1")]
        public Input<string>? Ipv6WinsServer1 { get; set; }

        /// <summary>
        /// IPv6 WINS server 2.
        /// </summary>
        [Input("ipv6WinsServer2")]
        public Input<string>? Ipv6WinsServer2 { get; set; }

        /// <summary>
        /// Enable/disable automatic reconnect for FortiClient connections. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("keepAlive")]
        public Input<string>? KeepAlive { get; set; }

        /// <summary>
        /// Enable to limit each user to one SSL-VPN session at a time. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("limitUserLogins")]
        public Input<string>? LimitUserLogins { get; set; }

        /// <summary>
        /// Client MAC address action. Valid values: `allow`, `deny`.
        /// </summary>
        [Input("macAddrAction")]
        public Input<string>? MacAddrAction { get; set; }

        /// <summary>
        /// Enable/disable MAC address host checking. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("macAddrCheck")]
        public Input<string>? MacAddrCheck { get; set; }

        [Input("macAddrCheckRules")]
        private InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleArgs>? _macAddrCheckRules;

        /// <summary>
        /// Client MAC address check rule. The structure of `mac_addr_check_rule` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleArgs> MacAddrCheckRules
        {
            get => _macAddrCheckRules ?? (_macAddrCheckRules = new InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleArgs>());
            set => _macAddrCheckRules = value;
        }

        /// <summary>
        /// Download URL for Mac FortiClient.
        /// </summary>
        [Input("macosForticlientDownloadUrl")]
        public Input<string>? MacosForticlientDownloadUrl { get; set; }

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

        /// <summary>
        /// Enable to let the FortiGate decide action based on client OS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("osCheck")]
        public Input<string>? OsCheck { get; set; }

        [Input("osCheckLists")]
        private InputList<Inputs.VpnsslwebPortalOsCheckListArgs>? _osCheckLists;

        /// <summary>
        /// SSL VPN OS checks. The structure of `os_check_list` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalOsCheckListArgs> OsCheckLists
        {
            get => _osCheckLists ?? (_osCheckLists = new InputList<Inputs.VpnsslwebPortalOsCheckListArgs>());
            set => _osCheckLists = value;
        }

        /// <summary>
        /// prefer to query IPv6 dns first if enabled. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("preferIpv6Dns")]
        public Input<string>? PreferIpv6Dns { get; set; }

        /// <summary>
        /// Client login redirect URL.
        /// </summary>
        [Input("redirUrl")]
        public Input<string>? RedirUrl { get; set; }

        /// <summary>
        /// Rewrite contents for URI contains IP and "/ui/". (default = disable) Valid values: `enable`, `disable`.
        /// </summary>
        [Input("rewriteIpUriUi")]
        public Input<string>? RewriteIpUriUi { get; set; }

        /// <summary>
        /// Enable/disable FortiClient saving the user's password. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("savePassword")]
        public Input<string>? SavePassword { get; set; }

        /// <summary>
        /// Enable/disable tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serviceRestriction")]
        public Input<string>? ServiceRestriction { get; set; }

        /// <summary>
        /// Enable to skip host check for browser support. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("skipCheckForBrowser")]
        public Input<string>? SkipCheckForBrowser { get; set; }

        /// <summary>
        /// Enable to skip host check if client OS does not support it. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("skipCheckForUnsupportedOs")]
        public Input<string>? SkipCheckForUnsupportedOs { get; set; }

        /// <summary>
        /// SMB maximum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Input("smbMaxVersion")]
        public Input<string>? SmbMaxVersion { get; set; }

        /// <summary>
        /// SMB minimum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Input("smbMinVersion")]
        public Input<string>? SmbMinVersion { get; set; }

        /// <summary>
        /// Enable support of NTLMv1 for Samba authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("smbNtlmv1Auth")]
        public Input<string>? SmbNtlmv1Auth { get; set; }

        /// <summary>
        /// Enable/disable support of SMBv1 for Samba. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("smbv1")]
        public Input<string>? Smbv1 { get; set; }

        [Input("splitDns")]
        private InputList<Inputs.VpnsslwebPortalSplitDnArgs>? _splitDns;

        /// <summary>
        /// Split DNS for SSL VPN. The structure of `split_dns` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalSplitDnArgs> SplitDns
        {
            get => _splitDns ?? (_splitDns = new InputList<Inputs.VpnsslwebPortalSplitDnArgs>());
            set => _splitDns = value;
        }

        /// <summary>
        /// Enable/disable IPv4 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("splitTunneling")]
        public Input<string>? SplitTunneling { get; set; }

        [Input("splitTunnelingRoutingAddresses")]
        private InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressArgs>? _splitTunnelingRoutingAddresses;

        /// <summary>
        /// IPv4 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `split_tunneling_routing_address` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressArgs> SplitTunnelingRoutingAddresses
        {
            get => _splitTunnelingRoutingAddresses ?? (_splitTunnelingRoutingAddresses = new InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressArgs>());
            set => _splitTunnelingRoutingAddresses = value;
        }

        /// <summary>
        /// Enable to negate split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("splitTunnelingRoutingNegate")]
        public Input<string>? SplitTunnelingRoutingNegate { get; set; }

        /// <summary>
        /// Web portal color scheme.
        /// </summary>
        [Input("theme")]
        public Input<string>? Theme { get; set; }

        /// <summary>
        /// Transform backward slashes to forward slashes in URLs. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("transformBackwardSlashes")]
        public Input<string>? TransformBackwardSlashes { get; set; }

        /// <summary>
        /// Enable/disable IPv4 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("tunnelMode")]
        public Input<string>? TunnelMode { get; set; }

        /// <summary>
        /// Use SD-WAN rules to get output interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("useSdwan")]
        public Input<string>? UseSdwan { get; set; }

        /// <summary>
        /// Enable to allow web portal users to create their own bookmarks. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("userBookmark")]
        public Input<string>? UserBookmark { get; set; }

        /// <summary>
        /// Enable to allow web portal users to create bookmarks for all users in the same user group. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("userGroupBookmark")]
        public Input<string>? UserGroupBookmark { 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; }

        /// <summary>
        /// Enable/disable SSL VPN web mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webMode")]
        public Input<string>? WebMode { get; set; }

        /// <summary>
        /// Download URL for Windows FortiClient.
        /// </summary>
        [Input("windowsForticlientDownloadUrl")]
        public Input<string>? WindowsForticlientDownloadUrl { get; set; }

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Input("winsServer1")]
        public Input<string>? WinsServer1 { get; set; }

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Input("winsServer2")]
        public Input<string>? WinsServer2 { get; set; }

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

    public sealed class VpnsslwebPortalState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Allow user access to SSL-VPN applications.
        /// </summary>
        [Input("allowUserAccess")]
        public Input<string>? AllowUserAccess { get; set; }

        /// <summary>
        /// Enable/disable automatic connect by client when system is up. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("autoConnect")]
        public Input<string>? AutoConnect { get; set; }

        [Input("bookmarkGroups")]
        private InputList<Inputs.VpnsslwebPortalBookmarkGroupGetArgs>? _bookmarkGroups;

        /// <summary>
        /// Portal bookmark group. The structure of `bookmark_group` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalBookmarkGroupGetArgs> BookmarkGroups
        {
            get => _bookmarkGroups ?? (_bookmarkGroups = new InputList<Inputs.VpnsslwebPortalBookmarkGroupGetArgs>());
            set => _bookmarkGroups = value;
        }

        /// <summary>
        /// Enable to support RDP/VPC clipboard functionality. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("clipboard")]
        public Input<string>? Clipboard { get; set; }

        /// <summary>
        /// Change the web portal display language. Overrides config system global set language. You can use config system custom-language and execute system custom-language to add custom language files.
        /// </summary>
        [Input("customLang")]
        public Input<string>? CustomLang { get; set; }

        /// <summary>
        /// Enable support of customized download URL for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("customizeForticlientDownloadUrl")]
        public Input<string>? CustomizeForticlientDownloadUrl { get; set; }

        /// <summary>
        /// Screen height (range from 0 - 65535, default = 768).
        /// </summary>
        [Input("defaultWindowHeight")]
        public Input<int>? DefaultWindowHeight { get; set; }

        /// <summary>
        /// Screen width (range from 0 - 65535, default = 1024).
        /// </summary>
        [Input("defaultWindowWidth")]
        public Input<int>? DefaultWindowWidth { get; set; }

        /// <summary>
        /// Configure overlapping DHCP IP allocation assignment. Valid values: `use-new`, `use-old`.
        /// </summary>
        [Input("dhcpIpOverlap")]
        public Input<string>? DhcpIpOverlap { get; set; }

        /// <summary>
        /// Enable to display the web portal bookmark widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayBookmark")]
        public Input<string>? DisplayBookmark { get; set; }

        /// <summary>
        /// Enable to display the web portal connection tools widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayConnectionTools")]
        public Input<string>? DisplayConnectionTools { get; set; }

        /// <summary>
        /// Enable to display the web portal user login history widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayHistory")]
        public Input<string>? DisplayHistory { get; set; }

        /// <summary>
        /// Enable to display the web portal status widget. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("displayStatus")]
        public Input<string>? DisplayStatus { get; set; }

        /// <summary>
        /// IPv4 DNS server 1.
        /// </summary>
        [Input("dnsServer1")]
        public Input<string>? DnsServer1 { get; set; }

        /// <summary>
        /// IPv4 DNS server 2.
        /// </summary>
        [Input("dnsServer2")]
        public Input<string>? DnsServer2 { get; set; }

        /// <summary>
        /// DNS suffix.
        /// </summary>
        [Input("dnsSuffix")]
        public Input<string>? DnsSuffix { get; set; }

        /// <summary>
        /// Sort sub-tables, please do not set this parameter when configuring static sub-tables. Options: [ false, true, natural, alphabetical ]. false: Default value, do not sort tables; true/natural: sort tables in natural order. For example: [ a10, a2 ] -&gt; [ a2, a10 ]; alphabetical: sort tables in alphabetical order. For example: [ a10, a2 ] -&gt; [ a10, a2 ].
        /// </summary>
        [Input("dynamicSortSubtable")]
        public Input<string>? DynamicSortSubtable { get; set; }

        /// <summary>
        /// Enable/disable all traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("exclusiveRouting")]
        public Input<string>? ExclusiveRouting { get; set; }

        /// <summary>
        /// Enable/disable download option for FortiClient. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("forticlientDownload")]
        public Input<string>? ForticlientDownload { get; set; }

        /// <summary>
        /// FortiClient download method. Valid values: `direct`, `ssl-vpn`.
        /// </summary>
        [Input("forticlientDownloadMethod")]
        public Input<string>? ForticlientDownloadMethod { get; set; }

        /// <summary>
        /// Web portal heading message.
        /// </summary>
        [Input("heading")]
        public Input<string>? Heading { get; set; }

        /// <summary>
        /// Enable to prevent SSO credential being sent to client. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("hideSsoCredential")]
        public Input<string>? HideSsoCredential { get; set; }

        /// <summary>
        /// Type of host checking performed on endpoints. Valid values: `none`, `av`, `fw`, `av-fw`, `custom`.
        /// </summary>
        [Input("hostCheck")]
        public Input<string>? HostCheck { get; set; }

        /// <summary>
        /// Periodic host check interval. Value of 0 means disabled and host checking only happens when the endpoint connects.
        /// </summary>
        [Input("hostCheckInterval")]
        public Input<int>? HostCheckInterval { get; set; }

        [Input("hostCheckPolicies")]
        private InputList<Inputs.VpnsslwebPortalHostCheckPolicyGetArgs>? _hostCheckPolicies;

        /// <summary>
        /// One or more policies to require the endpoint to have specific security software. The structure of `host_check_policy` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalHostCheckPolicyGetArgs> HostCheckPolicies
        {
            get => _hostCheckPolicies ?? (_hostCheckPolicies = new InputList<Inputs.VpnsslwebPortalHostCheckPolicyGetArgs>());
            set => _hostCheckPolicies = value;
        }

        /// <summary>
        /// Method by which users of this SSL-VPN tunnel obtain IP addresses.
        /// </summary>
        [Input("ipMode")]
        public Input<string>? IpMode { get; set; }

        [Input("ipPools")]
        private InputList<Inputs.VpnsslwebPortalIpPoolGetArgs>? _ipPools;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ip_pools` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpPoolGetArgs> IpPools
        {
            get => _ipPools ?? (_ipPools = new InputList<Inputs.VpnsslwebPortalIpPoolGetArgs>());
            set => _ipPools = value;
        }

        /// <summary>
        /// IPv6 DNS server 1.
        /// </summary>
        [Input("ipv6DnsServer1")]
        public Input<string>? Ipv6DnsServer1 { get; set; }

        /// <summary>
        /// IPv6 DNS server 2.
        /// </summary>
        [Input("ipv6DnsServer2")]
        public Input<string>? Ipv6DnsServer2 { get; set; }

        /// <summary>
        /// Enable/disable all IPv6 traffic go through tunnel only. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6ExclusiveRouting")]
        public Input<string>? Ipv6ExclusiveRouting { get; set; }

        [Input("ipv6Pools")]
        private InputList<Inputs.VpnsslwebPortalIpv6PoolGetArgs>? _ipv6Pools;

        /// <summary>
        /// IPv4 firewall source address objects reserved for SSL-VPN tunnel mode clients. The structure of `ipv6_pools` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpv6PoolGetArgs> Ipv6Pools
        {
            get => _ipv6Pools ?? (_ipv6Pools = new InputList<Inputs.VpnsslwebPortalIpv6PoolGetArgs>());
            set => _ipv6Pools = value;
        }

        /// <summary>
        /// Enable/disable IPv6 tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6ServiceRestriction")]
        public Input<string>? Ipv6ServiceRestriction { get; set; }

        /// <summary>
        /// Enable/disable IPv6 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6SplitTunneling")]
        public Input<string>? Ipv6SplitTunneling { get; set; }

        [Input("ipv6SplitTunnelingRoutingAddresses")]
        private InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressGetArgs>? _ipv6SplitTunnelingRoutingAddresses;

        /// <summary>
        /// IPv6 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `ipv6_split_tunneling_routing_address` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressGetArgs> Ipv6SplitTunnelingRoutingAddresses
        {
            get => _ipv6SplitTunnelingRoutingAddresses ?? (_ipv6SplitTunnelingRoutingAddresses = new InputList<Inputs.VpnsslwebPortalIpv6SplitTunnelingRoutingAddressGetArgs>());
            set => _ipv6SplitTunnelingRoutingAddresses = value;
        }

        /// <summary>
        /// Enable to negate IPv6 split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6SplitTunnelingRoutingNegate")]
        public Input<string>? Ipv6SplitTunnelingRoutingNegate { get; set; }

        /// <summary>
        /// Enable/disable IPv6 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("ipv6TunnelMode")]
        public Input<string>? Ipv6TunnelMode { get; set; }

        /// <summary>
        /// IPv6 WINS server 1.
        /// </summary>
        [Input("ipv6WinsServer1")]
        public Input<string>? Ipv6WinsServer1 { get; set; }

        /// <summary>
        /// IPv6 WINS server 2.
        /// </summary>
        [Input("ipv6WinsServer2")]
        public Input<string>? Ipv6WinsServer2 { get; set; }

        /// <summary>
        /// Enable/disable automatic reconnect for FortiClient connections. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("keepAlive")]
        public Input<string>? KeepAlive { get; set; }

        /// <summary>
        /// Enable to limit each user to one SSL-VPN session at a time. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("limitUserLogins")]
        public Input<string>? LimitUserLogins { get; set; }

        /// <summary>
        /// Client MAC address action. Valid values: `allow`, `deny`.
        /// </summary>
        [Input("macAddrAction")]
        public Input<string>? MacAddrAction { get; set; }

        /// <summary>
        /// Enable/disable MAC address host checking. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("macAddrCheck")]
        public Input<string>? MacAddrCheck { get; set; }

        [Input("macAddrCheckRules")]
        private InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleGetArgs>? _macAddrCheckRules;

        /// <summary>
        /// Client MAC address check rule. The structure of `mac_addr_check_rule` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleGetArgs> MacAddrCheckRules
        {
            get => _macAddrCheckRules ?? (_macAddrCheckRules = new InputList<Inputs.VpnsslwebPortalMacAddrCheckRuleGetArgs>());
            set => _macAddrCheckRules = value;
        }

        /// <summary>
        /// Download URL for Mac FortiClient.
        /// </summary>
        [Input("macosForticlientDownloadUrl")]
        public Input<string>? MacosForticlientDownloadUrl { get; set; }

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

        /// <summary>
        /// Enable to let the FortiGate decide action based on client OS. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("osCheck")]
        public Input<string>? OsCheck { get; set; }

        [Input("osCheckLists")]
        private InputList<Inputs.VpnsslwebPortalOsCheckListGetArgs>? _osCheckLists;

        /// <summary>
        /// SSL VPN OS checks. The structure of `os_check_list` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalOsCheckListGetArgs> OsCheckLists
        {
            get => _osCheckLists ?? (_osCheckLists = new InputList<Inputs.VpnsslwebPortalOsCheckListGetArgs>());
            set => _osCheckLists = value;
        }

        /// <summary>
        /// prefer to query IPv6 dns first if enabled. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("preferIpv6Dns")]
        public Input<string>? PreferIpv6Dns { get; set; }

        /// <summary>
        /// Client login redirect URL.
        /// </summary>
        [Input("redirUrl")]
        public Input<string>? RedirUrl { get; set; }

        /// <summary>
        /// Rewrite contents for URI contains IP and "/ui/". (default = disable) Valid values: `enable`, `disable`.
        /// </summary>
        [Input("rewriteIpUriUi")]
        public Input<string>? RewriteIpUriUi { get; set; }

        /// <summary>
        /// Enable/disable FortiClient saving the user's password. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("savePassword")]
        public Input<string>? SavePassword { get; set; }

        /// <summary>
        /// Enable/disable tunnel service restriction. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("serviceRestriction")]
        public Input<string>? ServiceRestriction { get; set; }

        /// <summary>
        /// Enable to skip host check for browser support. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("skipCheckForBrowser")]
        public Input<string>? SkipCheckForBrowser { get; set; }

        /// <summary>
        /// Enable to skip host check if client OS does not support it. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("skipCheckForUnsupportedOs")]
        public Input<string>? SkipCheckForUnsupportedOs { get; set; }

        /// <summary>
        /// SMB maximum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Input("smbMaxVersion")]
        public Input<string>? SmbMaxVersion { get; set; }

        /// <summary>
        /// SMB minimum client protocol version. Valid values: `smbv1`, `smbv2`, `smbv3`.
        /// </summary>
        [Input("smbMinVersion")]
        public Input<string>? SmbMinVersion { get; set; }

        /// <summary>
        /// Enable support of NTLMv1 for Samba authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("smbNtlmv1Auth")]
        public Input<string>? SmbNtlmv1Auth { get; set; }

        /// <summary>
        /// Enable/disable support of SMBv1 for Samba. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("smbv1")]
        public Input<string>? Smbv1 { get; set; }

        [Input("splitDns")]
        private InputList<Inputs.VpnsslwebPortalSplitDnGetArgs>? _splitDns;

        /// <summary>
        /// Split DNS for SSL VPN. The structure of `split_dns` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalSplitDnGetArgs> SplitDns
        {
            get => _splitDns ?? (_splitDns = new InputList<Inputs.VpnsslwebPortalSplitDnGetArgs>());
            set => _splitDns = value;
        }

        /// <summary>
        /// Enable/disable IPv4 split tunneling. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("splitTunneling")]
        public Input<string>? SplitTunneling { get; set; }

        [Input("splitTunnelingRoutingAddresses")]
        private InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressGetArgs>? _splitTunnelingRoutingAddresses;

        /// <summary>
        /// IPv4 SSL-VPN tunnel mode firewall address objects that override firewall policy destination addresses to control split-tunneling access. The structure of `split_tunneling_routing_address` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressGetArgs> SplitTunnelingRoutingAddresses
        {
            get => _splitTunnelingRoutingAddresses ?? (_splitTunnelingRoutingAddresses = new InputList<Inputs.VpnsslwebPortalSplitTunnelingRoutingAddressGetArgs>());
            set => _splitTunnelingRoutingAddresses = value;
        }

        /// <summary>
        /// Enable to negate split tunneling routing address. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("splitTunnelingRoutingNegate")]
        public Input<string>? SplitTunnelingRoutingNegate { get; set; }

        /// <summary>
        /// Web portal color scheme.
        /// </summary>
        [Input("theme")]
        public Input<string>? Theme { get; set; }

        /// <summary>
        /// Transform backward slashes to forward slashes in URLs. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("transformBackwardSlashes")]
        public Input<string>? TransformBackwardSlashes { get; set; }

        /// <summary>
        /// Enable/disable IPv4 SSL-VPN tunnel mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("tunnelMode")]
        public Input<string>? TunnelMode { get; set; }

        /// <summary>
        /// Use SD-WAN rules to get output interface. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("useSdwan")]
        public Input<string>? UseSdwan { get; set; }

        /// <summary>
        /// Enable to allow web portal users to create their own bookmarks. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("userBookmark")]
        public Input<string>? UserBookmark { get; set; }

        /// <summary>
        /// Enable to allow web portal users to create bookmarks for all users in the same user group. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("userGroupBookmark")]
        public Input<string>? UserGroupBookmark { 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; }

        /// <summary>
        /// Enable/disable SSL VPN web mode. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("webMode")]
        public Input<string>? WebMode { get; set; }

        /// <summary>
        /// Download URL for Windows FortiClient.
        /// </summary>
        [Input("windowsForticlientDownloadUrl")]
        public Input<string>? WindowsForticlientDownloadUrl { get; set; }

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Input("winsServer1")]
        public Input<string>? WinsServer1 { get; set; }

        /// <summary>
        /// IPv4 WINS server 1.
        /// </summary>
        [Input("winsServer2")]
        public Input<string>? WinsServer2 { get; set; }

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