/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 * 
 *  http://aws.amazon.com/apache2.0
 * 
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
/*
 * Do not modify this file. This file is generated from the eks-2017-11-01.normal.json service model.
 */
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.EKS.Model
{
    /// 
    /// An object representing the configuration for an OpenID Connect (OIDC) identity provider.
    /// 
    public partial class OidcIdentityProviderConfig
    {
        private string _clientId;
        private string _clusterName;
        private string _groupsClaim;
        private string _groupsPrefix;
        private string _identityProviderConfigArn;
        private string _identityProviderConfigName;
        private string _issuerUrl;
        private Dictionary _requiredClaims = new Dictionary();
        private ConfigStatus _status;
        private Dictionary _tags = new Dictionary();
        private string _usernameClaim;
        private string _usernamePrefix;
        /// 
        /// Gets and sets the property ClientId. 
        /// 
        /// This is also known as audience. The ID of the client application that makes
        /// authentication requests to the OIDC identity provider.
        /// 
        /// 
        public string ClientId
        {
            get { return this._clientId; }
            set { this._clientId = value; }
        }
        // Check to see if ClientId property is set
        internal bool IsSetClientId()
        {
            return this._clientId != null;
        }
        /// 
        /// Gets and sets the property ClusterName. 
        /// 
        /// The cluster that the configuration is associated to.
        /// 
        /// 
        public string ClusterName
        {
            get { return this._clusterName; }
            set { this._clusterName = value; }
        }
        // Check to see if ClusterName property is set
        internal bool IsSetClusterName()
        {
            return this._clusterName != null;
        }
        /// 
        /// Gets and sets the property GroupsClaim. 
        /// 
        /// The JSON web token (JWT) claim that the provider uses to return your groups.
        /// 
        /// 
        public string GroupsClaim
        {
            get { return this._groupsClaim; }
            set { this._groupsClaim = value; }
        }
        // Check to see if GroupsClaim property is set
        internal bool IsSetGroupsClaim()
        {
            return this._groupsClaim != null;
        }
        /// 
        /// Gets and sets the property GroupsPrefix. 
        /// 
        /// The prefix that is prepended to group claims to prevent clashes with existing names
        /// (such as system: groups). For example, the value oidc: creates
        /// group names like oidc:engineering and oidc:infra. The prefix
        /// can't contain system: 
        /// 
        /// 
        public string GroupsPrefix
        {
            get { return this._groupsPrefix; }
            set { this._groupsPrefix = value; }
        }
        // Check to see if GroupsPrefix property is set
        internal bool IsSetGroupsPrefix()
        {
            return this._groupsPrefix != null;
        }
        /// 
        /// Gets and sets the property IdentityProviderConfigArn. 
        /// 
        /// The ARN of the configuration.
        /// 
        /// 
        public string IdentityProviderConfigArn
        {
            get { return this._identityProviderConfigArn; }
            set { this._identityProviderConfigArn = value; }
        }
        // Check to see if IdentityProviderConfigArn property is set
        internal bool IsSetIdentityProviderConfigArn()
        {
            return this._identityProviderConfigArn != null;
        }
        /// 
        /// Gets and sets the property IdentityProviderConfigName. 
        /// 
        /// The name of the configuration.
        /// 
        /// 
        public string IdentityProviderConfigName
        {
            get { return this._identityProviderConfigName; }
            set { this._identityProviderConfigName = value; }
        }
        // Check to see if IdentityProviderConfigName property is set
        internal bool IsSetIdentityProviderConfigName()
        {
            return this._identityProviderConfigName != null;
        }
        /// 
        /// Gets and sets the property IssuerUrl. 
        /// 
        /// The URL of the OIDC identity provider that allows the API server to discover public
        /// signing keys for verifying tokens.
        /// 
        /// 
        public string IssuerUrl
        {
            get { return this._issuerUrl; }
            set { this._issuerUrl = value; }
        }
        // Check to see if IssuerUrl property is set
        internal bool IsSetIssuerUrl()
        {
            return this._issuerUrl != null;
        }
        /// 
        /// Gets and sets the property RequiredClaims. 
        /// 
        /// The key-value pairs that describe required claims in the identity token. If set, each
        /// claim is verified to be present in the token with a matching value.
        /// 
        /// 
        public Dictionary RequiredClaims
        {
            get { return this._requiredClaims; }
            set { this._requiredClaims = value; }
        }
        // Check to see if RequiredClaims property is set
        internal bool IsSetRequiredClaims()
        {
            return this._requiredClaims != null && this._requiredClaims.Count > 0; 
        }
        /// 
        /// Gets and sets the property Status. 
        /// 
        /// The status of the OIDC identity provider.
        /// 
        /// 
        public ConfigStatus Status
        {
            get { return this._status; }
            set { this._status = value; }
        }
        // Check to see if Status property is set
        internal bool IsSetStatus()
        {
            return this._status != null;
        }
        /// 
        /// Gets and sets the property Tags. 
        /// 
        /// The metadata to apply to the provider configuration to assist with categorization
        /// and organization. Each tag consists of a key and an optional value. You define both.
        /// 
        /// 
        [AWSProperty(Min=1, Max=50)]
        public Dictionary Tags
        {
            get { return this._tags; }
            set { this._tags = value; }
        }
        // Check to see if Tags property is set
        internal bool IsSetTags()
        {
            return this._tags != null && this._tags.Count > 0; 
        }
        /// 
        /// Gets and sets the property UsernameClaim. 
        /// 
        /// The JSON Web token (JWT) claim that is used as the username.
        /// 
        /// 
        public string UsernameClaim
        {
            get { return this._usernameClaim; }
            set { this._usernameClaim = value; }
        }
        // Check to see if UsernameClaim property is set
        internal bool IsSetUsernameClaim()
        {
            return this._usernameClaim != null;
        }
        /// 
        /// Gets and sets the property UsernamePrefix. 
        /// 
        /// The prefix that is prepended to username claims to prevent clashes with existing names.
        /// The prefix can't contain system: 
        /// 
        /// 
        public string UsernamePrefix
        {
            get { return this._usernamePrefix; }
            set { this._usernamePrefix = value; }
        }
        // Check to see if UsernamePrefix property is set
        internal bool IsSetUsernamePrefix()
        {
            return this._usernamePrefix != null;
        }
    }
}