/*
 * 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 redshift-2012-12-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.Redshift.Model
{
    /// 
    /// Container for the parameters to the GetClusterCredentials operation.
    /// Returns a database user name and temporary password with temporary authorization to
    /// log on to an Amazon Redshift database. The action returns the database user name prefixed
    /// with IAM: if AutoCreate is False or IAMA:
    /// if AutoCreate is True. You can optionally specify one or
    /// more database user groups that the user will join at log on. By default, the temporary
    /// credentials expire in 900 seconds. You can optionally specify a duration between 900
    /// seconds (15 minutes) and 3600 seconds (60 minutes). For more information, see Using
    /// IAM Authentication to Generate Database User Credentials in the Amazon Redshift
    /// Cluster Management Guide.
    /// 
    ///  
    /// 
    /// The Identity and Access Management (IAM) user or role that runs GetClusterCredentials
    /// must have an IAM policy attached that allows access to all necessary actions and resources.
    /// For more information about permissions, see Resource
    /// Policies for GetClusterCredentials in the Amazon Redshift Cluster Management Guide.
    /// 
    ///  
    /// 
    /// If the DbGroups parameter is specified, the IAM policy must allow the
    /// redshift:JoinGroup action with access to the listed dbgroups.
    /// 
    /// 
    ///  
    /// 
    /// In addition, if the AutoCreate parameter is set to True,
    /// then the policy must include the redshift:CreateClusterUser permission.
    /// 
    ///  
    /// 
    /// If the DbName parameter is specified, the IAM policy must allow access
    /// to the resource dbname for the specified database name. 
    /// 
    /// 
    public partial class GetClusterCredentialsRequest : AmazonRedshiftRequest
    {
        private bool? _autoCreate;
        private string _clusterIdentifier;
        private string _customDomainName;
        private List _dbGroups = new List();
        private string _dbName;
        private string _dbUser;
        private int? _durationSeconds;
        /// 
        /// Gets and sets the property AutoCreate. 
        /// 
        /// Create a database user with the name specified for the user named in DbUser
        /// if one does not exist.
        /// 
        /// 
        public bool AutoCreate
        {
            get { return this._autoCreate.GetValueOrDefault(); }
            set { this._autoCreate = value; }
        }
        // Check to see if AutoCreate property is set
        internal bool IsSetAutoCreate()
        {
            return this._autoCreate.HasValue; 
        }
        /// 
        /// Gets and sets the property ClusterIdentifier. 
        /// 
        /// The unique identifier of the cluster that contains the database for which you are
        /// requesting credentials. This parameter is case sensitive.
        /// 
        /// 
        [AWSProperty(Max=2147483647)]
        public string ClusterIdentifier
        {
            get { return this._clusterIdentifier; }
            set { this._clusterIdentifier = value; }
        }
        // Check to see if ClusterIdentifier property is set
        internal bool IsSetClusterIdentifier()
        {
            return this._clusterIdentifier != null;
        }
        /// 
        /// Gets and sets the property CustomDomainName. 
        /// 
        /// The custom domain name for the cluster credentials.
        /// 
        /// 
        [AWSProperty(Max=2147483647)]
        public string CustomDomainName
        {
            get { return this._customDomainName; }
            set { this._customDomainName = value; }
        }
        // Check to see if CustomDomainName property is set
        internal bool IsSetCustomDomainName()
        {
            return this._customDomainName != null;
        }
        /// 
        /// Gets and sets the property DbGroups. 
        /// 
        /// A list of the names of existing database groups that the user named in DbUser
        /// will join for the current session, in addition to any group memberships for an existing
        /// user. If not specified, a new user is added only to PUBLIC.
        /// 
        ///  
        /// 
        /// Database group name constraints
        /// 
        ///   -  
        /// 
        /// Must be 1 to 64 alphanumeric characters or hyphens
        /// 
        ///  
-  
        /// 
        /// Must contain only lowercase letters, numbers, underscore, plus sign, period (dot),
        /// at symbol (@), or hyphen.
        /// 
        ///  
-  
        /// 
        /// First character must be a letter.
        /// 
        ///  
-  
        /// 
        /// Must not contain a colon ( : ) or slash ( / ). 
        /// 
        ///  
-  
        /// 
        /// Cannot be a reserved word. A list of reserved words can be found in Reserved
        /// Words in the Amazon Redshift Database Developer Guide.
        /// 
        ///  
/// 
        public List DbGroups
        {
            get { return this._dbGroups; }
            set { this._dbGroups = value; }
        }
        // Check to see if DbGroups property is set
        internal bool IsSetDbGroups()
        {
            return this._dbGroups != null && this._dbGroups.Count > 0; 
        }
        /// 
        /// Gets and sets the property DbName. 
        /// 
        /// The name of a database thatDbUser is authorized to log on to. If DbName
        /// is not specified, DbUser can log on to any existing database.
        /// 
        ///  
        /// 
        /// Constraints:
        /// 
        ///   -  
        /// 
        /// Must be 1 to 64 alphanumeric characters or hyphens
        /// 
        ///  
-  
        /// 
        /// Must contain uppercase or lowercase letters, numbers, underscore, plus sign, period
        /// (dot), at symbol (@), or hyphen.
        /// 
        ///  
-  
        /// 
        /// First character must be a letter.
        /// 
        ///  
-  
        /// 
        /// Must not contain a colon ( : ) or slash ( / ). 
        /// 
        ///  
-  
        /// 
        /// Cannot be a reserved word. A list of reserved words can be found in Reserved
        /// Words in the Amazon Redshift Database Developer Guide.
        /// 
        ///  
/// 
        [AWSProperty(Max=2147483647)]
        public string DbName
        {
            get { return this._dbName; }
            set { this._dbName = value; }
        }
        // Check to see if DbName property is set
        internal bool IsSetDbName()
        {
            return this._dbName != null;
        }
        /// 
        /// Gets and sets the property DbUser. 
        /// 
        /// The name of a database user. If a user name matchingDbUser exists in
        /// the database, the temporary user credentials have the same permissions as the existing
        /// user. If DbUser doesn't exist in the database and Autocreate
        /// is True, a new user is created using the value for DbUser
        /// with PUBLIC permissions. If a database user matching the value for DbUser
        /// doesn't exist and Autocreate is False, then the command
        /// succeeds but the connection attempt will fail because the user doesn't exist in the
        /// database.
        /// 
        ///  
        /// 
        /// For more information, see CREATE
        /// USER in the Amazon Redshift Database Developer Guide. 
        /// 
        ///  
        /// 
        /// Constraints:
        /// 
        ///   -  
        /// 
        /// Must be 1 to 64 alphanumeric characters or hyphens. The user name can't be PUBLIC.
        /// 
        ///
-  
        /// 
        /// Must contain uppercase or lowercase letters, numbers, underscore, plus sign, period
        /// (dot), at symbol (@), or hyphen.
        /// 
        ///  
-  
        /// 
        /// First character must be a letter.
        /// 
        ///  
-  
        /// 
        /// Must not contain a colon ( : ) or slash ( / ). 
        /// 
        ///  
-  
        /// 
        /// Cannot be a reserved word. A list of reserved words can be found in Reserved
        /// Words in the Amazon Redshift Database Developer Guide.
        /// 
        ///  
/// 
        [AWSProperty(Required=true, Max=2147483647)]
        public string DbUser
        {
            get { return this._dbUser; }
            set { this._dbUser = value; }
        }
        // Check to see if DbUser property is set
        internal bool IsSetDbUser()
        {
            return this._dbUser != null;
        }
        /// 
        /// Gets and sets the property DurationSeconds. 
        /// 
        /// The number of seconds until the returned temporary password expires.
        /// 
        ///  
        /// 
        /// Constraint: minimum 900, maximum 3600.
        /// 
        ///  
        /// 
        /// Default: 900
        /// 
        /// 
        public int DurationSeconds
        {
            get { return this._durationSeconds.GetValueOrDefault(); }
            set { this._durationSeconds = value; }
        }
        // Check to see if DurationSeconds property is set
        internal bool IsSetDurationSeconds()
        {
            return this._durationSeconds.HasValue; 
        }
    }
}