// *** 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.Inputs
{

    public sealed class VpnsslSettingsAuthenticationRuleArgs : global::Pulumi.ResourceArgs
    {
        /// <summary>
        /// SSL VPN authentication method restriction.
        /// </summary>
        [Input("auth")]
        public Input<string>? Auth { get; set; }

        /// <summary>
        /// SSL VPN cipher strength. Valid values: `any`, `high`, `medium`.
        /// </summary>
        [Input("cipher")]
        public Input<string>? Cipher { get; set; }

        /// <summary>
        /// Enable/disable SSL VPN client certificate restrictive. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("clientCert")]
        public Input<string>? ClientCert { get; set; }

        [Input("groups")]
        private InputList<Inputs.VpnsslSettingsAuthenticationRuleGroupArgs>? _groups;

        /// <summary>
        /// User groups. The structure of `groups` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslSettingsAuthenticationRuleGroupArgs> Groups
        {
            get => _groups ?? (_groups = new InputList<Inputs.VpnsslSettingsAuthenticationRuleGroupArgs>());
            set => _groups = value;
        }

        /// <summary>
        /// ID (0 - 4294967295).
        /// </summary>
        [Input("id")]
        public Input<int>? Id { get; set; }

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

        /// <summary>
        /// SSL VPN realm.
        /// </summary>
        [Input("realm")]
        public Input<string>? Realm { get; set; }

        /// <summary>
        /// Enable/disable negated source IPv6 address match. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sourceAddress6Negate")]
        public Input<string>? SourceAddress6Negate { get; set; }

        [Input("sourceAddress6s")]
        private InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddress6Args>? _sourceAddress6s;

        /// <summary>
        /// IPv6 source address of incoming traffic. The structure of `source_address6` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddress6Args> SourceAddress6s
        {
            get => _sourceAddress6s ?? (_sourceAddress6s = new InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddress6Args>());
            set => _sourceAddress6s = value;
        }

        /// <summary>
        /// Enable/disable negated source address match. Valid values: `enable`, `disable`.
        /// </summary>
        [Input("sourceAddressNegate")]
        public Input<string>? SourceAddressNegate { get; set; }

        [Input("sourceAddresses")]
        private InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddressArgs>? _sourceAddresses;

        /// <summary>
        /// Source address of incoming traffic. The structure of `source_address` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddressArgs> SourceAddresses
        {
            get => _sourceAddresses ?? (_sourceAddresses = new InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceAddressArgs>());
            set => _sourceAddresses = value;
        }

        [Input("sourceInterfaces")]
        private InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceInterfaceArgs>? _sourceInterfaces;

        /// <summary>
        /// SSL VPN source interface of incoming traffic. The structure of `source_interface` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceInterfaceArgs> SourceInterfaces
        {
            get => _sourceInterfaces ?? (_sourceInterfaces = new InputList<Inputs.VpnsslSettingsAuthenticationRuleSourceInterfaceArgs>());
            set => _sourceInterfaces = value;
        }

        /// <summary>
        /// Name of user peer.
        /// </summary>
        [Input("userPeer")]
        public Input<string>? UserPeer { get; set; }

        [Input("users")]
        private InputList<Inputs.VpnsslSettingsAuthenticationRuleUserArgs>? _users;

        /// <summary>
        /// User name. The structure of `users` block is documented below.
        /// </summary>
        public InputList<Inputs.VpnsslSettingsAuthenticationRuleUserArgs> Users
        {
            get => _users ?? (_users = new InputList<Inputs.VpnsslSettingsAuthenticationRuleUserArgs>());
            set => _users = value;
        }

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