<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>
    /// Configure admin users.
    /// 
    /// ## 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.SystemAdmin("trname", new()
    ///     {
    ///         Accprofile = "super_admin",
    ///         AccprofileOverride = "disable",
    ///         AllowRemoveAdminSession = "enable",
    ///         ForcePasswordChange = "disable",
    ///         GuestAuth = "disable",
    ///         Hidden = 0,
    ///         Password = "fdafdace",
    ///         PasswordExpire = "0000-00-00 00:00:00",
    ///         PeerAuth = "disable",
    ///         RadiusVdomOverride = "disable",
    ///         RemoteAuth = "disable",
    ///         TwoFactor = "disable",
    ///         Vdoms = new[]
    ///         {
    ///             new Fortios.Inputs.SystemAdminVdomArgs
    ///             {
    ///                 Name = "root",
    ///             },
    ///         },
    ///         Wildcard = "disable",
    ///     });
    /// 
    /// });
    /// ```
    /// 
    /// ## Import
    /// 
    /// System Admin can be imported using any of these accepted formats
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemAdmin:SystemAdmin labelname {{name}}
    /// ```
    /// 
    ///  If you do not want to import arguments of block$ export "FORTIOS_IMPORT_TABLE"="false"
    /// 
    /// ```sh
    ///  $ pulumi import fortios:index/systemAdmin:SystemAdmin labelname {{name}}
    /// ```
    /// 
    ///  $ unset "FORTIOS_IMPORT_TABLE"
    /// </summary>
    [FortiosResourceType("fortios:index/systemAdmin:SystemAdmin")]
    public partial class SystemAdmin : global::Pulumi.CustomResource
    {
        /// <summary>
        /// Access profile for this administrator. Access profiles control administrator access to FortiGate features.
        /// </summary>
        [Output("accprofile")]
        public Output<string> Accprofile { get; private set; } = null!;

        /// <summary>
        /// Enable to use the name of an access profile provided by the remote authentication server to control the FortiGate features that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("accprofileOverride")]
        public Output<string> AccprofileOverride { get; private set; } = null!;

        /// <summary>
        /// Enable/disable allow admin session to be removed by privileged admin users. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("allowRemoveAdminSession")]
        public Output<string> AllowRemoveAdminSession { get; private set; } = null!;

        /// <summary>
        /// Comment.
        /// </summary>
        [Output("comments")]
        public Output<string?> Comments { 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>
        /// This administrator's email address.
        /// </summary>
        [Output("emailTo")]
        public Output<string> EmailTo { get; private set; } = null!;

        /// <summary>
        /// Enable/disable force password change on next login. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("forcePasswordChange")]
        public Output<string> ForcePasswordChange { get; private set; } = null!;

        /// <summary>
        /// This administrator's FortiToken serial number.
        /// </summary>
        [Output("fortitoken")]
        public Output<string> Fortitoken { get; private set; } = null!;

        /// <summary>
        /// Enable/disable guest authentication. Valid values: `disable`, `enable`.
        /// </summary>
        [Output("guestAuth")]
        public Output<string> GuestAuth { get; private set; } = null!;

        /// <summary>
        /// Guest management portal language.
        /// </summary>
        [Output("guestLang")]
        public Output<string> GuestLang { get; private set; } = null!;

        /// <summary>
        /// Select guest user groups. The structure of `guest_usergroups` block is documented below.
        /// </summary>
        [Output("guestUsergroups")]
        public Output<ImmutableArray<Outputs.SystemAdminGuestUsergroup>> GuestUsergroups { get; private set; } = null!;

        /// <summary>
        /// GUI dashboards. The structure of `gui_dashboard` block is documented below.
        /// </summary>
        [Output("guiDashboards")]
        public Output<ImmutableArray<Outputs.SystemAdminGuiDashboard>> GuiDashboards { get; private set; } = null!;

        /// <summary>
        /// Favorite GUI menu IDs for the global VDOM. The structure of `gui_global_menu_favorites` block is documented below.
        /// </summary>
        [Output("guiGlobalMenuFavorites")]
        public Output<ImmutableArray<Outputs.SystemAdminGuiGlobalMenuFavorite>> GuiGlobalMenuFavorites { get; private set; } = null!;

        /// <summary>
        /// Acknowledgement of new features. The structure of `gui_new_feature_acknowledge` block is documented below.
        /// </summary>
        [Output("guiNewFeatureAcknowledges")]
        public Output<ImmutableArray<Outputs.SystemAdminGuiNewFeatureAcknowledge>> GuiNewFeatureAcknowledges { get; private set; } = null!;

        /// <summary>
        /// Favorite GUI menu IDs for VDOMs. The structure of `gui_vdom_menu_favorites` block is documented below.
        /// </summary>
        [Output("guiVdomMenuFavorites")]
        public Output<ImmutableArray<Outputs.SystemAdminGuiVdomMenuFavorite>> GuiVdomMenuFavorites { get; private set; } = null!;

        /// <summary>
        /// Admin user hidden attribute.
        /// </summary>
        [Output("hidden")]
        public Output<int> Hidden { get; private set; } = null!;

        /// <summary>
        /// history0
        /// </summary>
        [Output("history0")]
        public Output<string?> History0 { get; private set; } = null!;

        /// <summary>
        /// history1
        /// </summary>
        [Output("history1")]
        public Output<string?> History1 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost1")]
        public Output<string> Ip6Trusthost1 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost10")]
        public Output<string> Ip6Trusthost10 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost2")]
        public Output<string> Ip6Trusthost2 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost3")]
        public Output<string> Ip6Trusthost3 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost4")]
        public Output<string> Ip6Trusthost4 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost5")]
        public Output<string> Ip6Trusthost5 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost6")]
        public Output<string> Ip6Trusthost6 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost7")]
        public Output<string> Ip6Trusthost7 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost8")]
        public Output<string> Ip6Trusthost8 { get; private set; } = null!;

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Output("ip6Trusthost9")]
        public Output<string> Ip6Trusthost9 { get; private set; } = null!;

        /// <summary>
        /// Record user login time. The structure of `login_time` block is documented below.
        /// </summary>
        [Output("loginTimes")]
        public Output<ImmutableArray<Outputs.SystemAdminLoginTime>> LoginTimes { get; private set; } = null!;

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

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

        /// <summary>
        /// Password expire time.
        /// </summary>
        [Output("passwordExpire")]
        public Output<string> PasswordExpire { get; private set; } = null!;

        /// <summary>
        /// Set to enable peer certificate authentication (for HTTPS admin access). Valid values: `enable`, `disable`.
        /// </summary>
        [Output("peerAuth")]
        public Output<string> PeerAuth { get; private set; } = null!;

        /// <summary>
        /// Name of peer group defined under config user group which has PKI members. Used for peer certificate authentication (for HTTPS admin access).
        /// </summary>
        [Output("peerGroup")]
        public Output<string> PeerGroup { get; private set; } = null!;

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("radiusVdomOverride")]
        public Output<string> RadiusVdomOverride { get; private set; } = null!;

        /// <summary>
        /// Enable/disable authentication using a remote RADIUS, LDAP, or TACACS+ server. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("remoteAuth")]
        public Output<string> RemoteAuth { get; private set; } = null!;

        /// <summary>
        /// User group name used for remote auth.
        /// </summary>
        [Output("remoteGroup")]
        public Output<string> RemoteGroup { get; private set; } = null!;

        /// <summary>
        /// Firewall schedule used to restrict when the administrator can log in. No schedule means no restrictions.
        /// </summary>
        [Output("schedule")]
        public Output<string> Schedule { get; private set; } = null!;

        /// <summary>
        /// Custom SMS server to send SMS messages to.
        /// </summary>
        [Output("smsCustomServer")]
        public Output<string> SmsCustomServer { get; private set; } = null!;

        /// <summary>
        /// Phone number on which the administrator receives SMS messages.
        /// </summary>
        [Output("smsPhone")]
        public Output<string> SmsPhone { get; private set; } = null!;

        /// <summary>
        /// Send SMS messages using the FortiGuard SMS server or a custom server. Valid values: `fortiguard`, `custom`.
        /// </summary>
        [Output("smsServer")]
        public Output<string> SmsServer { get; private set; } = null!;

        /// <summary>
        /// Select the certificate to be used by the FortiGate for authentication with an SSH client.
        /// </summary>
        [Output("sshCertificate")]
        public Output<string> SshCertificate { get; private set; } = null!;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        [Output("sshPublicKey1")]
        public Output<string> SshPublicKey1 { get; private set; } = null!;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        [Output("sshPublicKey2")]
        public Output<string> SshPublicKey2 { get; private set; } = null!;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        [Output("sshPublicKey3")]
        public Output<string> SshPublicKey3 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost1")]
        public Output<string> Trusthost1 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost10")]
        public Output<string> Trusthost10 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost2")]
        public Output<string> Trusthost2 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost3")]
        public Output<string> Trusthost3 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost4")]
        public Output<string> Trusthost4 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost5")]
        public Output<string> Trusthost5 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost6")]
        public Output<string> Trusthost6 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost7")]
        public Output<string> Trusthost7 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost8")]
        public Output<string> Trusthost8 { get; private set; } = null!;

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Output("trusthost9")]
        public Output<string> Trusthost9 { get; private set; } = null!;

        /// <summary>
        /// Enable/disable two-factor authentication.
        /// </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>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Output("twoFactorNotification")]
        public Output<string> TwoFactorNotification { get; private set; } = null!;

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("vdomOverride")]
        public Output<string> VdomOverride { 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>
        /// Virtual domain(s) that the administrator can access. The structure of `vdom` block is documented below.
        /// </summary>
        [Output("vdoms")]
        public Output<ImmutableArray<Outputs.SystemAdminVdom>> Vdoms { get; private set; } = null!;

        /// <summary>
        /// Enable/disable wildcard RADIUS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Output("wildcard")]
        public Output<string> Wildcard { get; private set; } = null!;


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

        private SystemAdmin(string name, Input<string> id, SystemAdminState? state = null, CustomResourceOptions? options = null)
            : base("fortios:index/systemAdmin:SystemAdmin", 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 =
                {
                    "history0",
                    "history1",
                    "password",
                    "sshPublicKey1",
                    "sshPublicKey2",
                    "sshPublicKey3",
                },
            };
            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 SystemAdmin 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 SystemAdmin Get(string name, Input<string> id, SystemAdminState? state = null, CustomResourceOptions? options = null)
        {
            return new SystemAdmin(name, id, state, options);
        }
    }

    public sealed class SystemAdminArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Access profile for this administrator. Access profiles control administrator access to FortiGate features.
        /// </summary>
        [Input("accprofile")]
        public Input<string>? Accprofile { get; set; }

        /// <summary>
        /// Enable to use the name of an access profile provided by the remote authentication server to control the FortiGate features that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("accprofileOverride")]
        public Input<string>? AccprofileOverride { get; set; }

        /// <summary>
        /// Enable/disable allow admin session to be removed by privileged admin users. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowRemoveAdminSession")]
        public Input<string>? AllowRemoveAdminSession { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { 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>
        /// This administrator's email address.
        /// </summary>
        [Input("emailTo")]
        public Input<string>? EmailTo { get; set; }

        /// <summary>
        /// Enable/disable force password change on next login. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("forcePasswordChange")]
        public Input<string>? ForcePasswordChange { get; set; }

        /// <summary>
        /// This administrator's FortiToken serial number.
        /// </summary>
        [Input("fortitoken")]
        public Input<string>? Fortitoken { get; set; }

        /// <summary>
        /// Enable/disable guest authentication. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("guestAuth")]
        public Input<string>? GuestAuth { get; set; }

        /// <summary>
        /// Guest management portal language.
        /// </summary>
        [Input("guestLang")]
        public Input<string>? GuestLang { get; set; }

        [Input("guestUsergroups")]
        private InputList<Inputs.SystemAdminGuestUsergroupArgs>? _guestUsergroups;

        /// <summary>
        /// Select guest user groups. The structure of `guest_usergroups` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuestUsergroupArgs> GuestUsergroups
        {
            get => _guestUsergroups ?? (_guestUsergroups = new InputList<Inputs.SystemAdminGuestUsergroupArgs>());
            set => _guestUsergroups = value;
        }

        [Input("guiDashboards")]
        private InputList<Inputs.SystemAdminGuiDashboardArgs>? _guiDashboards;

        /// <summary>
        /// GUI dashboards. The structure of `gui_dashboard` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiDashboardArgs> GuiDashboards
        {
            get => _guiDashboards ?? (_guiDashboards = new InputList<Inputs.SystemAdminGuiDashboardArgs>());
            set => _guiDashboards = value;
        }

        [Input("guiGlobalMenuFavorites")]
        private InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteArgs>? _guiGlobalMenuFavorites;

        /// <summary>
        /// Favorite GUI menu IDs for the global VDOM. The structure of `gui_global_menu_favorites` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteArgs> GuiGlobalMenuFavorites
        {
            get => _guiGlobalMenuFavorites ?? (_guiGlobalMenuFavorites = new InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteArgs>());
            set => _guiGlobalMenuFavorites = value;
        }

        [Input("guiNewFeatureAcknowledges")]
        private InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeArgs>? _guiNewFeatureAcknowledges;

        /// <summary>
        /// Acknowledgement of new features. The structure of `gui_new_feature_acknowledge` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeArgs> GuiNewFeatureAcknowledges
        {
            get => _guiNewFeatureAcknowledges ?? (_guiNewFeatureAcknowledges = new InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeArgs>());
            set => _guiNewFeatureAcknowledges = value;
        }

        [Input("guiVdomMenuFavorites")]
        private InputList<Inputs.SystemAdminGuiVdomMenuFavoriteArgs>? _guiVdomMenuFavorites;

        /// <summary>
        /// Favorite GUI menu IDs for VDOMs. The structure of `gui_vdom_menu_favorites` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiVdomMenuFavoriteArgs> GuiVdomMenuFavorites
        {
            get => _guiVdomMenuFavorites ?? (_guiVdomMenuFavorites = new InputList<Inputs.SystemAdminGuiVdomMenuFavoriteArgs>());
            set => _guiVdomMenuFavorites = value;
        }

        /// <summary>
        /// Admin user hidden attribute.
        /// </summary>
        [Input("hidden")]
        public Input<int>? Hidden { get; set; }

        [Input("history0")]
        private Input<string>? _history0;

        /// <summary>
        /// history0
        /// </summary>
        public Input<string>? History0
        {
            get => _history0;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _history0 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("history1")]
        private Input<string>? _history1;

        /// <summary>
        /// history1
        /// </summary>
        public Input<string>? History1
        {
            get => _history1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _history1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost1")]
        public Input<string>? Ip6Trusthost1 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost10")]
        public Input<string>? Ip6Trusthost10 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost2")]
        public Input<string>? Ip6Trusthost2 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost3")]
        public Input<string>? Ip6Trusthost3 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost4")]
        public Input<string>? Ip6Trusthost4 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost5")]
        public Input<string>? Ip6Trusthost5 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost6")]
        public Input<string>? Ip6Trusthost6 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost7")]
        public Input<string>? Ip6Trusthost7 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost8")]
        public Input<string>? Ip6Trusthost8 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost9")]
        public Input<string>? Ip6Trusthost9 { get; set; }

        [Input("loginTimes")]
        private InputList<Inputs.SystemAdminLoginTimeArgs>? _loginTimes;

        /// <summary>
        /// Record user login time. The structure of `login_time` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminLoginTimeArgs> LoginTimes
        {
            get => _loginTimes ?? (_loginTimes = new InputList<Inputs.SystemAdminLoginTimeArgs>());
            set => _loginTimes = value;
        }

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

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

        /// <summary>
        /// Admin user password.
        /// </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>
        /// Password expire time.
        /// </summary>
        [Input("passwordExpire")]
        public Input<string>? PasswordExpire { get; set; }

        /// <summary>
        /// Set to enable peer certificate authentication (for HTTPS admin access). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("peerAuth")]
        public Input<string>? PeerAuth { get; set; }

        /// <summary>
        /// Name of peer group defined under config user group which has PKI members. Used for peer certificate authentication (for HTTPS admin access).
        /// </summary>
        [Input("peerGroup")]
        public Input<string>? PeerGroup { get; set; }

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("radiusVdomOverride")]
        public Input<string>? RadiusVdomOverride { get; set; }

        /// <summary>
        /// Enable/disable authentication using a remote RADIUS, LDAP, or TACACS+ server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("remoteAuth")]
        public Input<string>? RemoteAuth { get; set; }

        /// <summary>
        /// User group name used for remote auth.
        /// </summary>
        [Input("remoteGroup")]
        public Input<string>? RemoteGroup { get; set; }

        /// <summary>
        /// Firewall schedule used to restrict when the administrator can log in. No schedule means no restrictions.
        /// </summary>
        [Input("schedule")]
        public Input<string>? Schedule { get; set; }

        /// <summary>
        /// Custom SMS server to send SMS messages to.
        /// </summary>
        [Input("smsCustomServer")]
        public Input<string>? SmsCustomServer { get; set; }

        /// <summary>
        /// Phone number on which the administrator receives SMS messages.
        /// </summary>
        [Input("smsPhone")]
        public Input<string>? SmsPhone { get; set; }

        /// <summary>
        /// Send SMS messages using the FortiGuard SMS server or a custom server. Valid values: `fortiguard`, `custom`.
        /// </summary>
        [Input("smsServer")]
        public Input<string>? SmsServer { get; set; }

        /// <summary>
        /// Select the certificate to be used by the FortiGate for authentication with an SSH client.
        /// </summary>
        [Input("sshCertificate")]
        public Input<string>? SshCertificate { get; set; }

        [Input("sshPublicKey1")]
        private Input<string>? _sshPublicKey1;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey1
        {
            get => _sshPublicKey1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("sshPublicKey2")]
        private Input<string>? _sshPublicKey2;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey2
        {
            get => _sshPublicKey2;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey2 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("sshPublicKey3")]
        private Input<string>? _sshPublicKey3;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey3
        {
            get => _sshPublicKey3;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey3 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost1")]
        public Input<string>? Trusthost1 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost10")]
        public Input<string>? Trusthost10 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost2")]
        public Input<string>? Trusthost2 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost3")]
        public Input<string>? Trusthost3 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost4")]
        public Input<string>? Trusthost4 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost5")]
        public Input<string>? Trusthost5 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost6")]
        public Input<string>? Trusthost6 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost7")]
        public Input<string>? Trusthost7 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost8")]
        public Input<string>? Trusthost8 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost9")]
        public Input<string>? Trusthost9 { get; set; }

        /// <summary>
        /// Enable/disable two-factor authentication.
        /// </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>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Input("twoFactorNotification")]
        public Input<string>? TwoFactorNotification { get; set; }

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vdomOverride")]
        public Input<string>? VdomOverride { 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; }

        [Input("vdoms")]
        private InputList<Inputs.SystemAdminVdomArgs>? _vdoms;

        /// <summary>
        /// Virtual domain(s) that the administrator can access. The structure of `vdom` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminVdomArgs> Vdoms
        {
            get => _vdoms ?? (_vdoms = new InputList<Inputs.SystemAdminVdomArgs>());
            set => _vdoms = value;
        }

        /// <summary>
        /// Enable/disable wildcard RADIUS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wildcard")]
        public Input<string>? Wildcard { get; set; }

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

    public sealed class SystemAdminState : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// Access profile for this administrator. Access profiles control administrator access to FortiGate features.
        /// </summary>
        [Input("accprofile")]
        public Input<string>? Accprofile { get; set; }

        /// <summary>
        /// Enable to use the name of an access profile provided by the remote authentication server to control the FortiGate features that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("accprofileOverride")]
        public Input<string>? AccprofileOverride { get; set; }

        /// <summary>
        /// Enable/disable allow admin session to be removed by privileged admin users. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("allowRemoveAdminSession")]
        public Input<string>? AllowRemoveAdminSession { get; set; }

        /// <summary>
        /// Comment.
        /// </summary>
        [Input("comments")]
        public Input<string>? Comments { 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>
        /// This administrator's email address.
        /// </summary>
        [Input("emailTo")]
        public Input<string>? EmailTo { get; set; }

        /// <summary>
        /// Enable/disable force password change on next login. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("forcePasswordChange")]
        public Input<string>? ForcePasswordChange { get; set; }

        /// <summary>
        /// This administrator's FortiToken serial number.
        /// </summary>
        [Input("fortitoken")]
        public Input<string>? Fortitoken { get; set; }

        /// <summary>
        /// Enable/disable guest authentication. Valid values: `disable`, `enable`.
        /// </summary>
        [Input("guestAuth")]
        public Input<string>? GuestAuth { get; set; }

        /// <summary>
        /// Guest management portal language.
        /// </summary>
        [Input("guestLang")]
        public Input<string>? GuestLang { get; set; }

        [Input("guestUsergroups")]
        private InputList<Inputs.SystemAdminGuestUsergroupGetArgs>? _guestUsergroups;

        /// <summary>
        /// Select guest user groups. The structure of `guest_usergroups` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuestUsergroupGetArgs> GuestUsergroups
        {
            get => _guestUsergroups ?? (_guestUsergroups = new InputList<Inputs.SystemAdminGuestUsergroupGetArgs>());
            set => _guestUsergroups = value;
        }

        [Input("guiDashboards")]
        private InputList<Inputs.SystemAdminGuiDashboardGetArgs>? _guiDashboards;

        /// <summary>
        /// GUI dashboards. The structure of `gui_dashboard` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiDashboardGetArgs> GuiDashboards
        {
            get => _guiDashboards ?? (_guiDashboards = new InputList<Inputs.SystemAdminGuiDashboardGetArgs>());
            set => _guiDashboards = value;
        }

        [Input("guiGlobalMenuFavorites")]
        private InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteGetArgs>? _guiGlobalMenuFavorites;

        /// <summary>
        /// Favorite GUI menu IDs for the global VDOM. The structure of `gui_global_menu_favorites` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteGetArgs> GuiGlobalMenuFavorites
        {
            get => _guiGlobalMenuFavorites ?? (_guiGlobalMenuFavorites = new InputList<Inputs.SystemAdminGuiGlobalMenuFavoriteGetArgs>());
            set => _guiGlobalMenuFavorites = value;
        }

        [Input("guiNewFeatureAcknowledges")]
        private InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeGetArgs>? _guiNewFeatureAcknowledges;

        /// <summary>
        /// Acknowledgement of new features. The structure of `gui_new_feature_acknowledge` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeGetArgs> GuiNewFeatureAcknowledges
        {
            get => _guiNewFeatureAcknowledges ?? (_guiNewFeatureAcknowledges = new InputList<Inputs.SystemAdminGuiNewFeatureAcknowledgeGetArgs>());
            set => _guiNewFeatureAcknowledges = value;
        }

        [Input("guiVdomMenuFavorites")]
        private InputList<Inputs.SystemAdminGuiVdomMenuFavoriteGetArgs>? _guiVdomMenuFavorites;

        /// <summary>
        /// Favorite GUI menu IDs for VDOMs. The structure of `gui_vdom_menu_favorites` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminGuiVdomMenuFavoriteGetArgs> GuiVdomMenuFavorites
        {
            get => _guiVdomMenuFavorites ?? (_guiVdomMenuFavorites = new InputList<Inputs.SystemAdminGuiVdomMenuFavoriteGetArgs>());
            set => _guiVdomMenuFavorites = value;
        }

        /// <summary>
        /// Admin user hidden attribute.
        /// </summary>
        [Input("hidden")]
        public Input<int>? Hidden { get; set; }

        [Input("history0")]
        private Input<string>? _history0;

        /// <summary>
        /// history0
        /// </summary>
        public Input<string>? History0
        {
            get => _history0;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _history0 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("history1")]
        private Input<string>? _history1;

        /// <summary>
        /// history1
        /// </summary>
        public Input<string>? History1
        {
            get => _history1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _history1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost1")]
        public Input<string>? Ip6Trusthost1 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost10")]
        public Input<string>? Ip6Trusthost10 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost2")]
        public Input<string>? Ip6Trusthost2 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost3")]
        public Input<string>? Ip6Trusthost3 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost4")]
        public Input<string>? Ip6Trusthost4 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost5")]
        public Input<string>? Ip6Trusthost5 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost6")]
        public Input<string>? Ip6Trusthost6 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost7")]
        public Input<string>? Ip6Trusthost7 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost8")]
        public Input<string>? Ip6Trusthost8 { get; set; }

        /// <summary>
        /// Any IPv6 address from which the administrator can connect to the FortiGate unit. Default allows access from any IPv6 address.
        /// </summary>
        [Input("ip6Trusthost9")]
        public Input<string>? Ip6Trusthost9 { get; set; }

        [Input("loginTimes")]
        private InputList<Inputs.SystemAdminLoginTimeGetArgs>? _loginTimes;

        /// <summary>
        /// Record user login time. The structure of `login_time` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminLoginTimeGetArgs> LoginTimes
        {
            get => _loginTimes ?? (_loginTimes = new InputList<Inputs.SystemAdminLoginTimeGetArgs>());
            set => _loginTimes = value;
        }

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

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

        /// <summary>
        /// Admin user password.
        /// </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>
        /// Password expire time.
        /// </summary>
        [Input("passwordExpire")]
        public Input<string>? PasswordExpire { get; set; }

        /// <summary>
        /// Set to enable peer certificate authentication (for HTTPS admin access). Valid values: `enable`, `disable`.
        /// </summary>
        [Input("peerAuth")]
        public Input<string>? PeerAuth { get; set; }

        /// <summary>
        /// Name of peer group defined under config user group which has PKI members. Used for peer certificate authentication (for HTTPS admin access).
        /// </summary>
        [Input("peerGroup")]
        public Input<string>? PeerGroup { get; set; }

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("radiusVdomOverride")]
        public Input<string>? RadiusVdomOverride { get; set; }

        /// <summary>
        /// Enable/disable authentication using a remote RADIUS, LDAP, or TACACS+ server. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("remoteAuth")]
        public Input<string>? RemoteAuth { get; set; }

        /// <summary>
        /// User group name used for remote auth.
        /// </summary>
        [Input("remoteGroup")]
        public Input<string>? RemoteGroup { get; set; }

        /// <summary>
        /// Firewall schedule used to restrict when the administrator can log in. No schedule means no restrictions.
        /// </summary>
        [Input("schedule")]
        public Input<string>? Schedule { get; set; }

        /// <summary>
        /// Custom SMS server to send SMS messages to.
        /// </summary>
        [Input("smsCustomServer")]
        public Input<string>? SmsCustomServer { get; set; }

        /// <summary>
        /// Phone number on which the administrator receives SMS messages.
        /// </summary>
        [Input("smsPhone")]
        public Input<string>? SmsPhone { get; set; }

        /// <summary>
        /// Send SMS messages using the FortiGuard SMS server or a custom server. Valid values: `fortiguard`, `custom`.
        /// </summary>
        [Input("smsServer")]
        public Input<string>? SmsServer { get; set; }

        /// <summary>
        /// Select the certificate to be used by the FortiGate for authentication with an SSH client.
        /// </summary>
        [Input("sshCertificate")]
        public Input<string>? SshCertificate { get; set; }

        [Input("sshPublicKey1")]
        private Input<string>? _sshPublicKey1;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey1
        {
            get => _sshPublicKey1;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey1 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("sshPublicKey2")]
        private Input<string>? _sshPublicKey2;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey2
        {
            get => _sshPublicKey2;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey2 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        [Input("sshPublicKey3")]
        private Input<string>? _sshPublicKey3;

        /// <summary>
        /// Public key of an SSH client. The client is authenticated without being asked for credentials. Create the public-private key pair in the SSH client application.
        /// </summary>
        public Input<string>? SshPublicKey3
        {
            get => _sshPublicKey3;
            set
            {
                var emptySecret = Output.CreateSecret(0);
                _sshPublicKey3 = Output.Tuple<Input<string>?, int>(value, emptySecret).Apply(t => t.Item1);
            }
        }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost1")]
        public Input<string>? Trusthost1 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost10")]
        public Input<string>? Trusthost10 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost2")]
        public Input<string>? Trusthost2 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost3")]
        public Input<string>? Trusthost3 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost4")]
        public Input<string>? Trusthost4 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost5")]
        public Input<string>? Trusthost5 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost6")]
        public Input<string>? Trusthost6 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost7")]
        public Input<string>? Trusthost7 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost8")]
        public Input<string>? Trusthost8 { get; set; }

        /// <summary>
        /// Any IPv4 address or subnet address and netmask from which the administrator can connect to the FortiGate unit. Default allows access from any IPv4 address.
        /// </summary>
        [Input("trusthost9")]
        public Input<string>? Trusthost9 { get; set; }

        /// <summary>
        /// Enable/disable two-factor authentication.
        /// </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>
        /// Notification method for user activation by FortiToken Cloud. Valid values: `email`, `sms`.
        /// </summary>
        [Input("twoFactorNotification")]
        public Input<string>? TwoFactorNotification { get; set; }

        /// <summary>
        /// Enable to use the names of VDOMs provided by the remote authentication server to control the VDOMs that this administrator can access. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("vdomOverride")]
        public Input<string>? VdomOverride { 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; }

        [Input("vdoms")]
        private InputList<Inputs.SystemAdminVdomGetArgs>? _vdoms;

        /// <summary>
        /// Virtual domain(s) that the administrator can access. The structure of `vdom` block is documented below.
        /// </summary>
        public InputList<Inputs.SystemAdminVdomGetArgs> Vdoms
        {
            get => _vdoms ?? (_vdoms = new InputList<Inputs.SystemAdminVdomGetArgs>());
            set => _vdoms = value;
        }

        /// <summary>
        /// Enable/disable wildcard RADIUS authentication. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("wildcard")]
        public Input<string>? Wildcard { get; set; }

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