// Code generated by smithy-go-codegen DO NOT EDIT.

package types

import (
	smithydocument "github.com/aws/smithy-go/document"
	"time"
)

// Contains the details for an AS2 connector object. The connector object is used
// for AS2 outbound processes, to connect the Transfer Family customer with the
// trading partner.
type As2ConnectorConfig struct {

	// Provides Basic authentication support to the AS2 Connectors API. To use Basic
	// authentication, you must provide the name or Amazon Resource Name (ARN) of a
	// secret in Secrets Manager. The default value for this parameter is null , which
	// indicates that Basic authentication is not enabled for the connector. If the
	// connector should use Basic authentication, the secret needs to be in the
	// following format: { "Username": "user-name", "Password": "user-password" }
	// Replace user-name and user-password with the credentials for the actual user
	// that is being authenticated. Note the following:
	//   - You are storing these credentials in Secrets Manager, not passing them
	//   directly into this API.
	//   - If you are using the API, SDKs, or CloudFormation to configure your
	//   connector, then you must create the secret before you can enable Basic
	//   authentication. However, if you are using the Amazon Web Services management
	//   console, you can have the system create the secret for you.
	// If you have previously enabled Basic authentication for a connector, you can
	// disable it by using the UpdateConnector API call. For example, if you are using
	// the CLI, you can run the following command to remove Basic authentication:
	// update-connector --connector-id my-connector-id --as2-config
	// 'BasicAuthSecretId=""'
	BasicAuthSecretId *string

	// Specifies whether the AS2 file is compressed.
	Compression CompressionEnum

	// The algorithm that is used to encrypt the file. You can only specify NONE if
	// the URL for your connector uses HTTPS. This ensures that no traffic is sent in
	// clear text.
	EncryptionAlgorithm EncryptionAlg

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string

	// Used for outbound requests (from an Transfer Family server to a partner AS2
	// server) to determine whether the partner response for transfers is synchronous
	// or asynchronous. Specify either of the following values:
	//   - SYNC : The system expects a synchronous MDN response, confirming that the
	//   file was transferred successfully (or not).
	//   - NONE : Specifies that no MDN response is required.
	MdnResponse MdnResponse

	// The signing algorithm for the MDN response. If set to DEFAULT (or not set at
	// all), the value for SigningAlgorithm is used.
	MdnSigningAlgorithm MdnSigningAlg

	// Used as the Subject HTTP header attribute in AS2 messages that are being sent
	// with the connector.
	MessageSubject *string

	// A unique identifier for the partner profile for the connector.
	PartnerProfileId *string

	// The algorithm that is used to sign the AS2 messages sent with the connector.
	SigningAlgorithm SigningAlg

	noSmithyDocumentSerde
}

// Each step type has its own StepDetails structure.
type CopyStepDetails struct {

	// Specifies the location for the file being copied. Use ${Transfer:UserName} or
	// ${Transfer:UploadDate} in this field to parametrize the destination prefix by
	// username or uploaded date.
	//   - Set the value of DestinationFileLocation to ${Transfer:UserName} to copy
	//   uploaded files to an Amazon S3 bucket that is prefixed with the name of the
	//   Transfer Family user that uploaded the file.
	//   - Set the value of DestinationFileLocation to ${Transfer:UploadDate} to copy
	//   uploaded files to an Amazon S3 bucket that is prefixed with the date of the
	//   upload. The system resolves UploadDate to a date format of YYYY-MM-DD, based
	//   on the date the file is uploaded in UTC.
	DestinationFileLocation *InputFileLocation

	// The name of the step, used as an identifier.
	Name *string

	// A flag that indicates whether to overwrite an existing file of the same name.
	// The default is FALSE . If the workflow is processing a file that has the same
	// name as an existing file, the behavior is as follows:
	//   - If OverwriteExisting is TRUE , the existing file is replaced with the file
	//   being processed.
	//   - If OverwriteExisting is FALSE , nothing happens, and the workflow processing
	//   stops.
	OverwriteExisting OverwriteExisting

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//   - To use the previous file as the input, enter ${previous.file} . In this
	//   case, this workflow step uses the output file from the previous workflow step as
	//   input. This is the default value.
	//   - To use the originally uploaded file location as input for this step, enter
	//   ${original.file} .
	SourceFileLocation *string

	noSmithyDocumentSerde
}

// Each step type has its own StepDetails structure.
type CustomStepDetails struct {

	// The name of the step, used as an identifier.
	Name *string

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//   - To use the previous file as the input, enter ${previous.file} . In this
	//   case, this workflow step uses the output file from the previous workflow step as
	//   input. This is the default value.
	//   - To use the originally uploaded file location as input for this step, enter
	//   ${original.file} .
	SourceFileLocation *string

	// The ARN for the Lambda function that is being called.
	Target *string

	// Timeout, in seconds, for the step.
	TimeoutSeconds *int32

	noSmithyDocumentSerde
}

// Each step type has its own StepDetails structure.
type DecryptStepDetails struct {

	// Specifies the location for the file being decrypted. Use ${Transfer:UserName}
	// or ${Transfer:UploadDate} in this field to parametrize the destination prefix
	// by username or uploaded date.
	//   - Set the value of DestinationFileLocation to ${Transfer:UserName} to decrypt
	//   uploaded files to an Amazon S3 bucket that is prefixed with the name of the
	//   Transfer Family user that uploaded the file.
	//   - Set the value of DestinationFileLocation to ${Transfer:UploadDate} to
	//   decrypt uploaded files to an Amazon S3 bucket that is prefixed with the date of
	//   the upload. The system resolves UploadDate to a date format of YYYY-MM-DD,
	//   based on the date the file is uploaded in UTC.
	//
	// This member is required.
	DestinationFileLocation *InputFileLocation

	// The type of encryption used. Currently, this value must be PGP .
	//
	// This member is required.
	Type EncryptionType

	// The name of the step, used as an identifier.
	Name *string

	// A flag that indicates whether to overwrite an existing file of the same name.
	// The default is FALSE . If the workflow is processing a file that has the same
	// name as an existing file, the behavior is as follows:
	//   - If OverwriteExisting is TRUE , the existing file is replaced with the file
	//   being processed.
	//   - If OverwriteExisting is FALSE , nothing happens, and the workflow processing
	//   stops.
	OverwriteExisting OverwriteExisting

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//   - To use the previous file as the input, enter ${previous.file} . In this
	//   case, this workflow step uses the output file from the previous workflow step as
	//   input. This is the default value.
	//   - To use the originally uploaded file location as input for this step, enter
	//   ${original.file} .
	SourceFileLocation *string

	noSmithyDocumentSerde
}

// The name of the step, used to identify the delete step.
type DeleteStepDetails struct {

	// The name of the step, used as an identifier.
	Name *string

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//   - To use the previous file as the input, enter ${previous.file} . In this
	//   case, this workflow step uses the output file from the previous workflow step as
	//   input. This is the default value.
	//   - To use the originally uploaded file location as input for this step, enter
	//   ${original.file} .
	SourceFileLocation *string

	noSmithyDocumentSerde
}

// Describes the properties of the access that was specified.
type DescribedAccess struct {

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your Amazon
	// S3 or Amazon EFS resources over the enabled protocols using Transfer Family. If
	// you know the group name, you can view the SID values by running the following
	// command using Windows PowerShell. Get-ADGroup -Filter {samAccountName -like
	// "YourGroupName*"} -Properties * | Select SamAccountName,ObjectSid In that
	// command, replace YourGroupName with the name of your Active Directory group. The
	// regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	ExternalId *string

	// The landing directory (folder) for a user when they log in to the server using
	// the client. A HomeDirectory example is /bucket_name/home/mydirectory .
	HomeDirectory *string

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths and
	// keys should be visible to your user and how you want to make them visible. You
	// must specify the Entry and Target pair, where Entry shows how the path is made
	// visible and Target is the actual Amazon S3 or Amazon EFS path. If you only
	// specify a target, it is displayed as is. You also must ensure that your Identity
	// and Access Management (IAM) role provides access to paths in Target . This value
	// can be set only when HomeDirectoryType is set to LOGICAL. In most cases, you
	// can use this value instead of the session policy to lock down the associated
	// access to the designated home directory (" chroot "). To do this, you can set
	// Entry to '/' and set Target to the HomeDirectory parameter value.
	HomeDirectoryMappings []HomeDirectoryMapEntry

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH , the user will see
	// the absolute Amazon S3 bucket or EFS paths as is in their file transfer protocol
	// clients. If you set it LOGICAL , you need to provide mappings in the
	// HomeDirectoryMappings for how you want to make Amazon S3 or Amazon EFS paths
	// visible to your users.
	HomeDirectoryType HomeDirectoryType

	// A session policy for your user so that you can use the same Identity and Access
	// Management (IAM) role across multiple users. This policy scopes down a user's
	// access to portions of their Amazon S3 bucket. Variables that you can use inside
	// this policy include ${Transfer:UserName} , ${Transfer:HomeDirectory} , and
	// ${Transfer:HomeBucket} .
	Policy *string

	// The full POSIX identity, including user ID ( Uid ), group ID ( Gid ), and any
	// secondary groups IDs ( SecondaryGids ), that controls your users' access to your
	// Amazon EFS file systems. The POSIX permissions that are set on files and
	// directories in your file system determine the level of access your users get
	// when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that controls your users' access to your Amazon S3 bucket or Amazon EFS file
	// system. The policies attached to this role determine the level of access that
	// you want to provide your users when transferring files into and out of your
	// Amazon S3 bucket or Amazon EFS file system. The IAM role should also contain a
	// trust relationship that allows the server to access your resources when
	// servicing your users' transfer requests.
	Role *string

	noSmithyDocumentSerde
}

// Describes the properties of an agreement.
type DescribedAgreement struct {

	// The unique Amazon Resource Name (ARN) for the agreement.
	//
	// This member is required.
	Arn *string

	// With AS2, you can send files by calling StartFileTransfer and specifying the
	// file paths in the request parameter, SendFilePaths . We use the file’s parent
	// directory (for example, for --send-file-paths /bucket/dir/file.txt , parent
	// directory is /bucket/dir/ ) to temporarily store a processed AS2 message file,
	// store the MDN when we receive them from the partner, and write a final JSON file
	// containing relevant metadata of the transmission. So, the AccessRole needs to
	// provide read and write access to the parent directory of the file location used
	// in the StartFileTransfer request. Additionally, you need to provide read and
	// write access to the parent directory of the files that you intend to send with
	// StartFileTransfer . If you are using Basic authentication for your AS2
	// connector, the access role requires the secretsmanager:GetSecretValue
	// permission for the secret. If the secret is encrypted using a customer-managed
	// key instead of the Amazon Web Services managed key in Secrets Manager, then the
	// role also needs the kms:Decrypt permission for that key.
	AccessRole *string

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	AgreementId *string

	// The landing directory (folder) for files that are transferred by using the AS2
	// protocol.
	BaseDirectory *string

	// The name or short description that's used to identify the agreement.
	Description *string

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string

	// A unique identifier for the partner profile used in the agreement.
	PartnerProfileId *string

	// A system-assigned unique identifier for a server instance. This identifier
	// indicates the specific server that the agreement uses.
	ServerId *string

	// The current status of the agreement, either ACTIVE or INACTIVE .
	Status AgreementStatusType

	// Key-value pairs that can be used to group and search for agreements.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the properties of a certificate.
type DescribedCertificate struct {

	// The unique Amazon Resource Name (ARN) for the certificate.
	//
	// This member is required.
	Arn *string

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time

	// The file name for the certificate.
	Certificate *string

	// The list of certificates that make up the chain for the certificate.
	CertificateChain *string

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateId *string

	// The name or description that's used to identity the certificate.
	Description *string

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time

	// The final date that the certificate is valid.
	NotAfterDate *time.Time

	// The earliest date that the certificate is valid.
	NotBeforeDate *time.Time

	// The serial number for the certificate.
	Serial *string

	// The certificate can be either ACTIVE , PENDING_ROTATION , or INACTIVE .
	// PENDING_ROTATION means that this certificate will replace the current
	// certificate when it expires.
	Status CertificateStatusType

	// Key-value pairs that can be used to group and search for certificates.
	Tags []Tag

	// If a private key has been specified for the certificate, its type is
	// CERTIFICATE_WITH_PRIVATE_KEY . If there is no private key, the type is
	// CERTIFICATE .
	Type CertificateType

	// Specifies whether this certificate is used for signing or encryption.
	Usage CertificateUsageType

	noSmithyDocumentSerde
}

// Describes the parameters for the connector, as identified by the ConnectorId .
type DescribedConnector struct {

	// The unique Amazon Resource Name (ARN) for the connector.
	//
	// This member is required.
	Arn *string

	// With AS2, you can send files by calling StartFileTransfer and specifying the
	// file paths in the request parameter, SendFilePaths . We use the file’s parent
	// directory (for example, for --send-file-paths /bucket/dir/file.txt , parent
	// directory is /bucket/dir/ ) to temporarily store a processed AS2 message file,
	// store the MDN when we receive them from the partner, and write a final JSON file
	// containing relevant metadata of the transmission. So, the AccessRole needs to
	// provide read and write access to the parent directory of the file location used
	// in the StartFileTransfer request. Additionally, you need to provide read and
	// write access to the parent directory of the files that you intend to send with
	// StartFileTransfer . If you are using Basic authentication for your AS2
	// connector, the access role requires the secretsmanager:GetSecretValue
	// permission for the secret. If the secret is encrypted using a customer-managed
	// key instead of the Amazon Web Services managed key in Secrets Manager, then the
	// role also needs the kms:Decrypt permission for that key.
	AccessRole *string

	// A structure that contains the parameters for an AS2 connector object.
	As2Config *As2ConnectorConfig

	// The unique identifier for the connector.
	ConnectorId *string

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that allows a connector to turn on CloudWatch logging for Amazon S3 events. When
	// set, you can view connector activity in your CloudWatch logs.
	LoggingRole *string

	// A structure that contains the parameters for an SFTP connector object.
	SftpConfig *SftpConnectorConfig

	// Key-value pairs that can be used to group and search for connectors.
	Tags []Tag

	// The URL of the partner's AS2 or SFTP endpoint.
	Url *string

	noSmithyDocumentSerde
}

// The details for an execution object.
type DescribedExecution struct {

	// A unique identifier for the execution of a workflow.
	ExecutionId *string

	// The IAM role associated with the execution.
	ExecutionRole *string

	// A structure that describes the Amazon S3 or EFS file location. This is the file
	// location when the execution begins: if the file is being copied, this is the
	// initial (as opposed to destination) file location.
	InitialFileLocation *FileLocation

	// The IAM logging role associated with the execution.
	LoggingConfiguration *LoggingConfiguration

	// The full POSIX identity, including user ID ( Uid ), group ID ( Gid ), and any
	// secondary groups IDs ( SecondaryGids ), that controls your users' access to your
	// Amazon EFS file systems. The POSIX permissions that are set on files and
	// directories in your file system determine the level of access your users get
	// when transferring files into and out of your Amazon EFS file systems.
	PosixProfile *PosixProfile

	// A structure that describes the execution results. This includes a list of the
	// steps along with the details of each step, error type and message (if any), and
	// the OnExceptionSteps structure.
	Results *ExecutionResults

	// A container object for the session details that are associated with a workflow.
	ServiceMetadata *ServiceMetadata

	// The status is one of the execution. Can be in progress, completed, exception
	// encountered, or handling the exception.
	Status ExecutionStatus

	noSmithyDocumentSerde
}

// The details for a server host key.
type DescribedHostKey struct {

	// The unique Amazon Resource Name (ARN) for the host key.
	//
	// This member is required.
	Arn *string

	// The date on which the host key was added to the server.
	DateImported *time.Time

	// The text description for this host key.
	Description *string

	// The public key fingerprint, which is a short sequence of bytes used to identify
	// the longer public key.
	HostKeyFingerprint *string

	// A unique identifier for the host key.
	HostKeyId *string

	// Key-value pairs that can be used to group and search for host keys.
	Tags []Tag

	// The encryption algorithm that is used for the host key. The Type parameter is
	// specified by using one of the following values:
	//   - ssh-rsa
	//   - ssh-ed25519
	//   - ecdsa-sha2-nistp256
	//   - ecdsa-sha2-nistp384
	//   - ecdsa-sha2-nistp521
	Type *string

	noSmithyDocumentSerde
}

// The details for a local or partner AS2 profile.
type DescribedProfile struct {

	// The unique Amazon Resource Name (ARN) for the profile.
	//
	// This member is required.
	Arn *string

	// The As2Id is the AS2-name, as defined in the RFC 4130 (https://datatracker.ietf.org/doc/html/rfc4130)
	// . For inbound transfers, this is the AS2-From header for the AS2 messages sent
	// from the partner. For outbound connectors, this is the AS2-To header for the
	// AS2 messages sent to the partner using the StartFileTransfer API operation.
	// This ID cannot include spaces.
	As2Id *string

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateIds []string

	// A unique identifier for the local or partner AS2 profile.
	ProfileId *string

	// Indicates whether to list only LOCAL type profiles or only PARTNER type
	// profiles. If not supplied in the request, the command lists all types of
	// profiles.
	ProfileType ProfileType

	// Key-value pairs that can be used to group and search for profiles.
	Tags []Tag

	noSmithyDocumentSerde
}

// Describes the properties of a security policy that was specified. For more
// information about security policies, see Working with security policies (https://docs.aws.amazon.com/transfer/latest/userguide/security-policies.html)
// .
type DescribedSecurityPolicy struct {

	// Specifies the name of the security policy that is attached to the server.
	//
	// This member is required.
	SecurityPolicyName *string

	// Specifies whether this policy enables Federal Information Processing Standards
	// (FIPS).
	Fips *bool

	// Specifies the enabled Secure Shell (SSH) cipher encryption algorithms in the
	// security policy that is attached to the server.
	SshCiphers []string

	// Specifies the enabled SSH key exchange (KEX) encryption algorithms in the
	// security policy that is attached to the server.
	SshKexs []string

	// Specifies the enabled SSH message authentication code (MAC) encryption
	// algorithms in the security policy that is attached to the server.
	SshMacs []string

	// Specifies the enabled Transport Layer Security (TLS) cipher encryption
	// algorithms in the security policy that is attached to the server.
	TlsCiphers []string

	noSmithyDocumentSerde
}

// Describes the properties of a file transfer protocol-enabled server that was
// specified.
type DescribedServer struct {

	// Specifies the unique Amazon Resource Name (ARN) of the server.
	//
	// This member is required.
	Arn *string

	// Specifies the ARN of the Amazon Web ServicesCertificate Manager (ACM)
	// certificate. Required when Protocols is set to FTPS .
	Certificate *string

	// Specifies the domain of the storage system that is used for file transfers.
	Domain Domain

	// The virtual private cloud (VPC) endpoint settings that are configured for your
	// server. When you host your endpoint within your VPC, you can make your endpoint
	// accessible only to resources within your VPC, or you can attach Elastic IP
	// addresses and make your endpoint accessible to clients over the internet. Your
	// VPC's default security groups are automatically assigned to your endpoint.
	EndpointDetails *EndpointDetails

	// Defines the type of endpoint that your server is connected to. If your server
	// is connected to a VPC endpoint, your server isn't accessible over the public
	// internet.
	EndpointType EndpointType

	// Specifies the Base64-encoded SHA256 fingerprint of the server's host key. This
	// value is equivalent to the output of the ssh-keygen -l -f my-new-server-key
	// command.
	HostKeyFingerprint *string

	// Specifies information to call a customer-supplied authentication API. This
	// field is not populated when the IdentityProviderType of a server is
	// AWS_DIRECTORY_SERVICE or SERVICE_MANAGED .
	IdentityProviderDetails *IdentityProviderDetails

	// The mode of authentication for a server. The default value is SERVICE_MANAGED ,
	// which allows you to store and access user credentials within the Transfer Family
	// service. Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups
	// in Directory Service for Microsoft Active Directory or Microsoft Active
	// Directory in your on-premises environment or in Amazon Web Services using AD
	// Connector. This option also requires you to provide a Directory ID by using the
	// IdentityProviderDetails parameter. Use the API_GATEWAY value to integrate with
	// an identity provider of your choosing. The API_GATEWAY setting requires you to
	// provide an Amazon API Gateway endpoint URL to call for authentication by using
	// the IdentityProviderDetails parameter. Use the AWS_LAMBDA value to directly use
	// an Lambda function as your identity provider. If you choose this value, you must
	// specify the ARN for the Lambda function in the Function parameter for the
	// IdentityProviderDetails data type.
	IdentityProviderType IdentityProviderType

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or
	// Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.
	LoggingRole *string

	// Specifies a string to display when users connect to a server. This string is
	// displayed after the user authenticates. The SFTP protocol does not support
	// post-authentication display banners.
	PostAuthenticationLoginBanner *string

	// Specifies a string to display when users connect to a server. This string is
	// displayed before the user authenticates. For example, the following banner
	// displays details about using the system: This system is for the use of
	// authorized users only. Individuals using this computer system without authority,
	// or in excess of their authority, are subject to having all of their activities
	// on this system monitored and recorded by system personnel.
	PreAuthenticationLoginBanner *string

	// The protocol settings that are configured for your server.
	//   - To indicate passive mode (for FTP and FTPS protocols), use the PassiveIp
	//   parameter. Enter a single dotted-quad IPv4 address, such as the external IP
	//   address of a firewall, router, or load balancer.
	//   - To ignore the error that is generated when the client attempts to use the
	//   SETSTAT command on a file that you are uploading to an Amazon S3 bucket, use
	//   the SetStatOption parameter. To have the Transfer Family server ignore the
	//   SETSTAT command and upload files without needing to make any changes to your
	//   SFTP client, set the value to ENABLE_NO_OP . If you set the SetStatOption
	//   parameter to ENABLE_NO_OP , Transfer Family generates a log entry to Amazon
	//   CloudWatch Logs, so that you can determine when the client is making a SETSTAT
	//   call.
	//   - To determine whether your Transfer Family server resumes recent, negotiated
	//   sessions through a unique session ID, use the TlsSessionResumptionMode
	//   parameter.
	//   - As2Transports indicates the transport method for the AS2 messages.
	//   Currently, only HTTP is supported.
	ProtocolDetails *ProtocolDetails

	// Specifies the file transfer protocol or protocols over which your file transfer
	// protocol client can connect to your server's endpoint. The available protocols
	// are:
	//   - SFTP (Secure Shell (SSH) File Transfer Protocol): File transfer over SSH
	//   - FTPS (File Transfer Protocol Secure): File transfer with TLS encryption
	//   - FTP (File Transfer Protocol): Unencrypted file transfer
	//   - AS2 (Applicability Statement 2): used for transporting structured
	//   business-to-business data
	//
	//   - If you select FTPS , you must choose a certificate stored in Certificate
	//   Manager (ACM) which is used to identify your server when clients connect to it
	//   over FTPS.
	//   - If Protocol includes either FTP or FTPS , then the EndpointType must be VPC
	//   and the IdentityProviderType must be either AWS_DIRECTORY_SERVICE , AWS_LAMBDA
	//   , or API_GATEWAY .
	//   - If Protocol includes FTP , then AddressAllocationIds cannot be associated.
	//   - If Protocol is set only to SFTP , the EndpointType can be set to PUBLIC and
	//   the IdentityProviderType can be set any of the supported identity types:
	//   SERVICE_MANAGED , AWS_DIRECTORY_SERVICE , AWS_LAMBDA , or API_GATEWAY .
	//   - If Protocol includes AS2 , then the EndpointType must be VPC , and domain
	//   must be Amazon S3.
	Protocols []Protocol

	// Specifies the name of the security policy that is attached to the server.
	SecurityPolicyName *string

	// Specifies the unique system-assigned identifier for a server that you
	// instantiate.
	ServerId *string

	// The condition of the server that was described. A value of ONLINE indicates
	// that the server can accept jobs and transfer files. A State value of OFFLINE
	// means that the server cannot perform file transfer operations. The states of
	// STARTING and STOPPING indicate that the server is in an intermediate state,
	// either not fully able to respond, or not fully offline. The values of
	// START_FAILED or STOP_FAILED can indicate an error condition.
	State State

	// Specifies the log groups to which your server logs are sent. To specify a log
	// group, you must provide the ARN for an existing log group. In this case, the
	// format of the log group is as follows:
	// arn:aws:logs:region-name:amazon-account-id:log-group:log-group-name:* For
	// example, arn:aws:logs:us-east-1:111122223333:log-group:mytestgroup:* If you
	// have previously specified a log group for a server, you can clear it, and in
	// effect turn off structured logging, by providing an empty value for this
	// parameter in an update-server call. For example: update-server --server-id
	// s-1234567890abcdef0 --structured-log-destinations
	StructuredLogDestinations []string

	// Specifies the key-value pairs that you can use to search for and group servers
	// that were assigned to the server that was described.
	Tags []Tag

	// Specifies the number of users that are assigned to a server you specified with
	// the ServerId .
	UserCount *int32

	// Specifies the workflow ID for the workflow to assign and the execution role
	// that's used for executing the workflow. In addition to a workflow to execute
	// when a file is uploaded completely, WorkflowDetails can also contain a workflow
	// ID (and execution role) for a workflow to execute on partial upload. A partial
	// upload occurs when the server session disconnects while the file is still being
	// uploaded.
	WorkflowDetails *WorkflowDetails

	noSmithyDocumentSerde
}

// Describes the properties of a user that was specified.
type DescribedUser struct {

	// Specifies the unique Amazon Resource Name (ARN) for the user that was requested
	// to be described.
	//
	// This member is required.
	Arn *string

	// The landing directory (folder) for a user when they log in to the server using
	// the client. A HomeDirectory example is /bucket_name/home/mydirectory .
	HomeDirectory *string

	// Logical directory mappings that specify what Amazon S3 or Amazon EFS paths and
	// keys should be visible to your user and how you want to make them visible. You
	// must specify the Entry and Target pair, where Entry shows how the path is made
	// visible and Target is the actual Amazon S3 or Amazon EFS path. If you only
	// specify a target, it is displayed as is. You also must ensure that your Identity
	// and Access Management (IAM) role provides access to paths in Target . This value
	// can be set only when HomeDirectoryType is set to LOGICAL. In most cases, you
	// can use this value instead of the session policy to lock your user down to the
	// designated home directory (" chroot "). To do this, you can set Entry to '/'
	// and set Target to the HomeDirectory parameter value.
	HomeDirectoryMappings []HomeDirectoryMapEntry

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH , the user will see
	// the absolute Amazon S3 bucket or EFS paths as is in their file transfer protocol
	// clients. If you set it LOGICAL , you need to provide mappings in the
	// HomeDirectoryMappings for how you want to make Amazon S3 or Amazon EFS paths
	// visible to your users.
	HomeDirectoryType HomeDirectoryType

	// A session policy for your user so that you can use the same Identity and Access
	// Management (IAM) role across multiple users. This policy scopes down a user's
	// access to portions of their Amazon S3 bucket. Variables that you can use inside
	// this policy include ${Transfer:UserName} , ${Transfer:HomeDirectory} , and
	// ${Transfer:HomeBucket} .
	Policy *string

	// Specifies the full POSIX identity, including user ID ( Uid ), group ID ( Gid ),
	// and any secondary groups IDs ( SecondaryGids ), that controls your users' access
	// to your Amazon Elastic File System (Amazon EFS) file systems. The POSIX
	// permissions that are set on files and directories in your file system determine
	// the level of access your users get when transferring files into and out of your
	// Amazon EFS file systems.
	PosixProfile *PosixProfile

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that controls your users' access to your Amazon S3 bucket or Amazon EFS file
	// system. The policies attached to this role determine the level of access that
	// you want to provide your users when transferring files into and out of your
	// Amazon S3 bucket or Amazon EFS file system. The IAM role should also contain a
	// trust relationship that allows the server to access your resources when
	// servicing your users' transfer requests.
	Role *string

	// Specifies the public key portion of the Secure Shell (SSH) keys stored for the
	// described user.
	SshPublicKeys []SshPublicKey

	// Specifies the key-value pairs for the user requested. Tag can be used to search
	// for and group users for a variety of purposes.
	Tags []Tag

	// Specifies the name of the user that was requested to be described. User names
	// are used for authentication purposes. This is the string that will be used by
	// your user when they log in to your server.
	UserName *string

	noSmithyDocumentSerde
}

// Describes the properties of the specified workflow
type DescribedWorkflow struct {

	// Specifies the unique Amazon Resource Name (ARN) for the workflow.
	//
	// This member is required.
	Arn *string

	// Specifies the text description for the workflow.
	Description *string

	// Specifies the steps (actions) to take if errors are encountered during
	// execution of the workflow.
	OnExceptionSteps []WorkflowStep

	// Specifies the details for the steps that are in the specified workflow.
	Steps []WorkflowStep

	// Key-value pairs that can be used to group and search for workflows. Tags are
	// metadata attached to workflows for any purpose.
	Tags []Tag

	// A unique identifier for the workflow.
	WorkflowId *string

	noSmithyDocumentSerde
}

// Specifies the details for the file location for the file that's being used in
// the workflow. Only applicable if you are using Amazon Elastic File Systems
// (Amazon EFS) for storage.
type EfsFileLocation struct {

	// The identifier of the file system, assigned by Amazon EFS.
	FileSystemId *string

	// The pathname for the folder being used by a workflow.
	Path *string

	noSmithyDocumentSerde
}

// The virtual private cloud (VPC) endpoint settings that are configured for your
// file transfer protocol-enabled server. With a VPC endpoint, you can restrict
// access to your server and resources only within your VPC. To control incoming
// internet traffic, invoke the UpdateServer API and attach an Elastic IP address
// to your server's endpoint. After May 19, 2021, you won't be able to create a
// server using EndpointType=VPC_ENDPOINT in your Amazon Web Servicesaccount if
// your account hasn't already done so before May 19, 2021. If you have already
// created servers with EndpointType=VPC_ENDPOINT in your Amazon Web
// Servicesaccount on or before May 19, 2021, you will not be affected. After this
// date, use EndpointType = VPC . For more information, see
// https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
type EndpointDetails struct {

	// A list of address allocation IDs that are required to attach an Elastic IP
	// address to your server's endpoint. This property can only be set when
	// EndpointType is set to VPC and it is only valid in the UpdateServer API.
	AddressAllocationIds []string

	// A list of security groups IDs that are available to attach to your server's
	// endpoint. This property can only be set when EndpointType is set to VPC . You
	// can edit the SecurityGroupIds property in the UpdateServer (https://docs.aws.amazon.com/transfer/latest/userguide/API_UpdateServer.html)
	// API only if you are changing the EndpointType from PUBLIC or VPC_ENDPOINT to VPC
	// . To change security groups associated with your server's VPC endpoint after
	// creation, use the Amazon EC2 ModifyVpcEndpoint (https://docs.aws.amazon.com/AWSEC2/latest/APIReference/API_ModifyVpcEndpoint.html)
	// API.
	SecurityGroupIds []string

	// A list of subnet IDs that are required to host your server endpoint in your
	// VPC. This property can only be set when EndpointType is set to VPC .
	SubnetIds []string

	// The identifier of the VPC endpoint. This property can only be set when
	// EndpointType is set to VPC_ENDPOINT . For more information, see
	// https://docs.aws.amazon.com/transfer/latest/userguide/create-server-in-vpc.html#deprecate-vpc-endpoint.
	VpcEndpointId *string

	// The VPC identifier of the VPC in which a server's endpoint will be hosted. This
	// property can only be set when EndpointType is set to VPC .
	VpcId *string

	noSmithyDocumentSerde
}

// Specifies the error message and type, for an error that occurs during the
// execution of the workflow.
type ExecutionError struct {

	// Specifies the descriptive message that corresponds to the ErrorType .
	//
	// This member is required.
	Message *string

	// Specifies the error type.
	//   - ALREADY_EXISTS : occurs for a copy step, if the overwrite option is not
	//   selected and a file with the same name already exists in the target location.
	//   - BAD_REQUEST : a general bad request: for example, a step that attempts to
	//   tag an EFS file returns BAD_REQUEST , as only S3 files can be tagged.
	//   - CUSTOM_STEP_FAILED : occurs when the custom step provided a callback that
	//   indicates failure.
	//   - INTERNAL_SERVER_ERROR : a catch-all error that can occur for a variety of
	//   reasons.
	//   - NOT_FOUND : occurs when a requested entity, for example a source file for a
	//   copy step, does not exist.
	//   - PERMISSION_DENIED : occurs if your policy does not contain the correct
	//   permissions to complete one or more of the steps in the workflow.
	//   - TIMEOUT : occurs when the execution times out. You can set the
	//   TimeoutSeconds for a custom step, anywhere from 1 second to 1800 seconds (30
	//   minutes).
	//   - THROTTLED : occurs if you exceed the new execution refill rate of one
	//   workflow per second.
	//
	// This member is required.
	Type ExecutionErrorType

	noSmithyDocumentSerde
}

// Specifies the steps in the workflow, as well as the steps to execute in case of
// any errors during workflow execution.
type ExecutionResults struct {

	// Specifies the steps (actions) to take if errors are encountered during
	// execution of the workflow.
	OnExceptionSteps []ExecutionStepResult

	// Specifies the details for the steps that are in the specified workflow.
	Steps []ExecutionStepResult

	noSmithyDocumentSerde
}

// Specifies the following details for the step: error (if any), outputs (if any),
// and the step type.
type ExecutionStepResult struct {

	// Specifies the details for an error, if it occurred during execution of the
	// specified workflow step.
	Error *ExecutionError

	// The values for the key/value pair applied as a tag to the file. Only applicable
	// if the step type is TAG .
	Outputs *string

	// One of the available step types.
	//   - COPY - Copy the file to another location.
	//   - CUSTOM - Perform a custom step with an Lambda function target.
	//   - DECRYPT - Decrypt a file that was encrypted before it was uploaded.
	//   - DELETE - Delete the file.
	//   - TAG - Add a tag to the file.
	StepType WorkflowStepType

	noSmithyDocumentSerde
}

// Specifies the Amazon S3 or EFS file details to be used in the step.
type FileLocation struct {

	// Specifies the Amazon EFS identifier and the path for the file being used.
	EfsFileLocation *EfsFileLocation

	// Specifies the S3 details for the file being used, such as bucket, ETag, and so
	// forth.
	S3FileLocation *S3FileLocation

	noSmithyDocumentSerde
}

// Represents an object that contains entries and targets for HomeDirectoryMappings
// . The following is an Entry and Target pair example for chroot . [ { "Entry":
// "/", "Target": "/bucket_name/home/mydirectory" } ]
type HomeDirectoryMapEntry struct {

	// Represents an entry for HomeDirectoryMappings .
	//
	// This member is required.
	Entry *string

	// Represents the map target that is used in a HomeDirectorymapEntry .
	//
	// This member is required.
	Target *string

	noSmithyDocumentSerde
}

// Returns information related to the type of user authentication that is in use
// for a file transfer protocol-enabled server's users. A server can have only one
// method of authentication.
type IdentityProviderDetails struct {

	// The identifier of the Directory Service directory that you want to stop sharing.
	DirectoryId *string

	// The ARN for a Lambda function to use for the Identity provider.
	Function *string

	// This parameter is only applicable if your IdentityProviderType is API_GATEWAY .
	// Provides the type of InvocationRole used to authenticate the user account.
	InvocationRole *string

	// For SFTP-enabled servers, and for custom identity providers only, you can
	// specify whether to authenticate using a password, SSH key pair, or both.
	//   - PASSWORD - users must provide their password to connect.
	//   - PUBLIC_KEY - users must provide their private key to connect.
	//   - PUBLIC_KEY_OR_PASSWORD - users can authenticate with either their password
	//   or their key. This is the default value.
	//   - PUBLIC_KEY_AND_PASSWORD - users must provide both their private key and
	//   their password to connect. The server checks the key first, and then if the key
	//   is valid, the system prompts for a password. If the private key provided does
	//   not match the public key that is stored, authentication fails.
	SftpAuthenticationMethods SftpAuthenticationMethods

	// Provides the location of the service endpoint used to authenticate users.
	Url *string

	noSmithyDocumentSerde
}

// Specifies the location for the file that's being processed.
type InputFileLocation struct {

	// Specifies the details for the Amazon Elastic File System (Amazon EFS) file
	// that's being decrypted.
	EfsFileLocation *EfsFileLocation

	// Specifies the details for the Amazon S3 file that's being copied or decrypted.
	S3FileLocation *S3InputFileLocation

	noSmithyDocumentSerde
}

// Lists the properties for one or more specified associated accesses.
type ListedAccess struct {

	// A unique identifier that is required to identify specific groups within your
	// directory. The users of the group that you associate have access to your Amazon
	// S3 or Amazon EFS resources over the enabled protocols using Transfer Family. If
	// you know the group name, you can view the SID values by running the following
	// command using Windows PowerShell. Get-ADGroup -Filter {samAccountName -like
	// "YourGroupName*"} -Properties * | Select SamAccountName,ObjectSid In that
	// command, replace YourGroupName with the name of your Active Directory group. The
	// regular expression used to validate this parameter is a string of characters
	// consisting of uppercase and lowercase alphanumeric characters with no spaces.
	// You can also include underscores or any of the following characters: =,.@:/-
	ExternalId *string

	// The landing directory (folder) for a user when they log in to the server using
	// the client. A HomeDirectory example is /bucket_name/home/mydirectory .
	HomeDirectory *string

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH , the user will see
	// the absolute Amazon S3 bucket or EFS paths as is in their file transfer protocol
	// clients. If you set it LOGICAL , you need to provide mappings in the
	// HomeDirectoryMappings for how you want to make Amazon S3 or Amazon EFS paths
	// visible to your users.
	HomeDirectoryType HomeDirectoryType

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that controls your users' access to your Amazon S3 bucket or Amazon EFS file
	// system. The policies attached to this role determine the level of access that
	// you want to provide your users when transferring files into and out of your
	// Amazon S3 bucket or Amazon EFS file system. The IAM role should also contain a
	// trust relationship that allows the server to access your resources when
	// servicing your users' transfer requests.
	Role *string

	noSmithyDocumentSerde
}

// Describes the properties of an agreement.
type ListedAgreement struct {

	// A unique identifier for the agreement. This identifier is returned when you
	// create an agreement.
	AgreementId *string

	// The Amazon Resource Name (ARN) of the specified agreement.
	Arn *string

	// The current description for the agreement. You can change it by calling the
	// UpdateAgreement operation and providing a new description.
	Description *string

	// A unique identifier for the AS2 local profile.
	LocalProfileId *string

	// A unique identifier for the partner profile.
	PartnerProfileId *string

	// The unique identifier for the agreement.
	ServerId *string

	// The agreement can be either ACTIVE or INACTIVE .
	Status AgreementStatusType

	noSmithyDocumentSerde
}

// Describes the properties of a certificate.
type ListedCertificate struct {

	// An optional date that specifies when the certificate becomes active.
	ActiveDate *time.Time

	// The Amazon Resource Name (ARN) of the specified certificate.
	Arn *string

	// An array of identifiers for the imported certificates. You use this identifier
	// for working with profiles and partner profiles.
	CertificateId *string

	// The name or short description that's used to identify the certificate.
	Description *string

	// An optional date that specifies when the certificate becomes inactive.
	InactiveDate *time.Time

	// The certificate can be either ACTIVE , PENDING_ROTATION , or INACTIVE .
	// PENDING_ROTATION means that this certificate will replace the current
	// certificate when it expires.
	Status CertificateStatusType

	// The type for the certificate. If a private key has been specified for the
	// certificate, its type is CERTIFICATE_WITH_PRIVATE_KEY . If there is no private
	// key, the type is CERTIFICATE .
	Type CertificateType

	// Specifies whether this certificate is used for signing or encryption.
	Usage CertificateUsageType

	noSmithyDocumentSerde
}

// Returns details of the connector that is specified.
type ListedConnector struct {

	// The Amazon Resource Name (ARN) of the specified connector.
	Arn *string

	// The unique identifier for the connector.
	ConnectorId *string

	// The URL of the partner's AS2 or SFTP endpoint.
	Url *string

	noSmithyDocumentSerde
}

// Returns properties of the execution that is specified.
type ListedExecution struct {

	// A unique identifier for the execution of a workflow.
	ExecutionId *string

	// A structure that describes the Amazon S3 or EFS file location. This is the file
	// location when the execution begins: if the file is being copied, this is the
	// initial (as opposed to destination) file location.
	InitialFileLocation *FileLocation

	// A container object for the session details that are associated with a workflow.
	ServiceMetadata *ServiceMetadata

	// The status is one of the execution. Can be in progress, completed, exception
	// encountered, or handling the exception.
	Status ExecutionStatus

	noSmithyDocumentSerde
}

// Returns properties of the host key that's specified.
type ListedHostKey struct {

	// The unique Amazon Resource Name (ARN) of the host key.
	//
	// This member is required.
	Arn *string

	// The date on which the host key was added to the server.
	DateImported *time.Time

	// The current description for the host key. You can change it by calling the
	// UpdateHostKey operation and providing a new description.
	Description *string

	// The public key fingerprint, which is a short sequence of bytes used to identify
	// the longer public key.
	Fingerprint *string

	// A unique identifier for the host key.
	HostKeyId *string

	// The encryption algorithm that is used for the host key. The Type parameter is
	// specified by using one of the following values:
	//   - ssh-rsa
	//   - ssh-ed25519
	//   - ecdsa-sha2-nistp256
	//   - ecdsa-sha2-nistp384
	//   - ecdsa-sha2-nistp521
	Type *string

	noSmithyDocumentSerde
}

// Returns the properties of the profile that was specified.
type ListedProfile struct {

	// The Amazon Resource Name (ARN) of the specified profile.
	Arn *string

	// The As2Id is the AS2-name, as defined in the RFC 4130 (https://datatracker.ietf.org/doc/html/rfc4130)
	// . For inbound transfers, this is the AS2-From header for the AS2 messages sent
	// from the partner. For outbound connectors, this is the AS2-To header for the
	// AS2 messages sent to the partner using the StartFileTransfer API operation.
	// This ID cannot include spaces.
	As2Id *string

	// A unique identifier for the local or partner AS2 profile.
	ProfileId *string

	// Indicates whether to list only LOCAL type profiles or only PARTNER type
	// profiles. If not supplied in the request, the command lists all types of
	// profiles.
	ProfileType ProfileType

	noSmithyDocumentSerde
}

// Returns properties of a file transfer protocol-enabled server that was
// specified.
type ListedServer struct {

	// Specifies the unique Amazon Resource Name (ARN) for a server to be listed.
	//
	// This member is required.
	Arn *string

	// Specifies the domain of the storage system that is used for file transfers.
	Domain Domain

	// Specifies the type of VPC endpoint that your server is connected to. If your
	// server is connected to a VPC endpoint, your server isn't accessible over the
	// public internet.
	EndpointType EndpointType

	// The mode of authentication for a server. The default value is SERVICE_MANAGED ,
	// which allows you to store and access user credentials within the Transfer Family
	// service. Use AWS_DIRECTORY_SERVICE to provide access to Active Directory groups
	// in Directory Service for Microsoft Active Directory or Microsoft Active
	// Directory in your on-premises environment or in Amazon Web Services using AD
	// Connector. This option also requires you to provide a Directory ID by using the
	// IdentityProviderDetails parameter. Use the API_GATEWAY value to integrate with
	// an identity provider of your choosing. The API_GATEWAY setting requires you to
	// provide an Amazon API Gateway endpoint URL to call for authentication by using
	// the IdentityProviderDetails parameter. Use the AWS_LAMBDA value to directly use
	// an Lambda function as your identity provider. If you choose this value, you must
	// specify the ARN for the Lambda function in the Function parameter for the
	// IdentityProviderDetails data type.
	IdentityProviderType IdentityProviderType

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or
	// Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.
	LoggingRole *string

	// Specifies the unique system assigned identifier for the servers that were
	// listed.
	ServerId *string

	// The condition of the server that was described. A value of ONLINE indicates
	// that the server can accept jobs and transfer files. A State value of OFFLINE
	// means that the server cannot perform file transfer operations. The states of
	// STARTING and STOPPING indicate that the server is in an intermediate state,
	// either not fully able to respond, or not fully offline. The values of
	// START_FAILED or STOP_FAILED can indicate an error condition.
	State State

	// Specifies the number of users that are assigned to a server you specified with
	// the ServerId .
	UserCount *int32

	noSmithyDocumentSerde
}

// Returns properties of the user that you specify.
type ListedUser struct {

	// Provides the unique Amazon Resource Name (ARN) for the user that you want to
	// learn about.
	//
	// This member is required.
	Arn *string

	// The landing directory (folder) for a user when they log in to the server using
	// the client. A HomeDirectory example is /bucket_name/home/mydirectory .
	HomeDirectory *string

	// The type of landing directory (folder) that you want your users' home directory
	// to be when they log in to the server. If you set it to PATH , the user will see
	// the absolute Amazon S3 bucket or EFS paths as is in their file transfer protocol
	// clients. If you set it LOGICAL , you need to provide mappings in the
	// HomeDirectoryMappings for how you want to make Amazon S3 or Amazon EFS paths
	// visible to your users.
	HomeDirectoryType HomeDirectoryType

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that controls your users' access to your Amazon S3 bucket or Amazon EFS file
	// system. The policies attached to this role determine the level of access that
	// you want to provide your users when transferring files into and out of your
	// Amazon S3 bucket or Amazon EFS file system. The IAM role should also contain a
	// trust relationship that allows the server to access your resources when
	// servicing your users' transfer requests. The IAM role that controls your users'
	// access to your Amazon S3 bucket for servers with Domain=S3 , or your EFS file
	// system for servers with Domain=EFS . The policies attached to this role
	// determine the level of access you want to provide your users when transferring
	// files into and out of your S3 buckets or EFS file systems.
	Role *string

	// Specifies the number of SSH public keys stored for the user you specified.
	SshPublicKeyCount *int32

	// Specifies the name of the user whose ARN was specified. User names are used for
	// authentication purposes.
	UserName *string

	noSmithyDocumentSerde
}

// Contains the identifier, text description, and Amazon Resource Name (ARN) for
// the workflow.
type ListedWorkflow struct {

	// Specifies the unique Amazon Resource Name (ARN) for the workflow.
	Arn *string

	// Specifies the text description for the workflow.
	Description *string

	// A unique identifier for the workflow.
	WorkflowId *string

	noSmithyDocumentSerde
}

// Consists of the logging role and the log group name.
type LoggingConfiguration struct {

	// The name of the CloudWatch logging group for the Transfer Family server to
	// which this workflow belongs.
	LogGroupName *string

	// The Amazon Resource Name (ARN) of the Identity and Access Management (IAM) role
	// that allows a server to turn on Amazon CloudWatch logging for Amazon S3 or
	// Amazon EFSevents. When set, you can view user activity in your CloudWatch logs.
	LoggingRole *string

	noSmithyDocumentSerde
}

// The full POSIX identity, including user ID ( Uid ), group ID ( Gid ), and any
// secondary groups IDs ( SecondaryGids ), that controls your users' access to your
// Amazon EFS file systems. The POSIX permissions that are set on files and
// directories in your file system determine the level of access your users get
// when transferring files into and out of your Amazon EFS file systems.
type PosixProfile struct {

	// The POSIX group ID used for all EFS operations by this user.
	//
	// This member is required.
	Gid *int64

	// The POSIX user ID used for all EFS operations by this user.
	//
	// This member is required.
	Uid *int64

	// The secondary POSIX group IDs used for all EFS operations by this user.
	SecondaryGids []int64

	noSmithyDocumentSerde
}

// The protocol settings that are configured for your server.
type ProtocolDetails struct {

	// Indicates the transport method for the AS2 messages. Currently, only HTTP is
	// supported.
	As2Transports []As2Transport

	// Indicates passive mode, for FTP and FTPS protocols. Enter a single IPv4
	// address, such as the public IP address of a firewall, router, or load balancer.
	// For example: aws transfer update-server --protocol-details PassiveIp=0.0.0.0
	// Replace 0.0.0.0 in the example above with the actual IP address you want to
	// use. If you change the PassiveIp value, you must stop and then restart your
	// Transfer Family server for the change to take effect. For details on using
	// passive mode (PASV) in a NAT environment, see Configuring your FTPS server
	// behind a firewall or NAT with Transfer Family (http://aws.amazon.com/blogs/storage/configuring-your-ftps-server-behind-a-firewall-or-nat-with-aws-transfer-family/)
	// . Special values The AUTO and 0.0.0.0 are special values for the PassiveIp
	// parameter. The value PassiveIp=AUTO is assigned by default to FTP and FTPS type
	// servers. In this case, the server automatically responds with one of the
	// endpoint IPs within the PASV response. PassiveIp=0.0.0.0 has a more unique
	// application for its usage. For example, if you have a High Availability (HA)
	// Network Load Balancer (NLB) environment, where you have 3 subnets, you can only
	// specify a single IP address using the PassiveIp parameter. This reduces the
	// effectiveness of having High Availability. In this case, you can specify
	// PassiveIp=0.0.0.0 . This tells the client to use the same IP address as the
	// Control connection and utilize all AZs for their connections. Note, however,
	// that not all FTP clients support the PassiveIp=0.0.0.0 response. FileZilla and
	// WinSCP do support it. If you are using other clients, check to see if your
	// client supports the PassiveIp=0.0.0.0 response.
	PassiveIp *string

	// Use the SetStatOption to ignore the error that is generated when the client
	// attempts to use SETSTAT on a file you are uploading to an S3 bucket. Some SFTP
	// file transfer clients can attempt to change the attributes of remote files,
	// including timestamp and permissions, using commands, such as SETSTAT when
	// uploading the file. However, these commands are not compatible with object
	// storage systems, such as Amazon S3. Due to this incompatibility, file uploads
	// from these clients can result in errors even when the file is otherwise
	// successfully uploaded. Set the value to ENABLE_NO_OP to have the Transfer
	// Family server ignore the SETSTAT command, and upload files without needing to
	// make any changes to your SFTP client. While the SetStatOption ENABLE_NO_OP
	// setting ignores the error, it does generate a log entry in Amazon CloudWatch
	// Logs, so you can determine when the client is making a SETSTAT call. If you
	// want to preserve the original timestamp for your file, and modify other file
	// attributes using SETSTAT , you can use Amazon EFS as backend storage with
	// Transfer Family.
	SetStatOption SetStatOption

	// A property used with Transfer Family servers that use the FTPS protocol. TLS
	// Session Resumption provides a mechanism to resume or share a negotiated secret
	// key between the control and data connection for an FTPS session.
	// TlsSessionResumptionMode determines whether or not the server resumes recent,
	// negotiated sessions through a unique session ID. This property is available
	// during CreateServer and UpdateServer calls. If a TlsSessionResumptionMode value
	// is not specified during CreateServer , it is set to ENFORCED by default.
	//   - DISABLED : the server does not process TLS session resumption client
	//   requests and creates a new TLS session for each request.
	//   - ENABLED : the server processes and accepts clients that are performing TLS
	//   session resumption. The server doesn't reject client data connections that do
	//   not perform the TLS session resumption client processing.
	//   - ENFORCED : the server processes and accepts clients that are performing TLS
	//   session resumption. The server rejects client data connections that do not
	//   perform the TLS session resumption client processing. Before you set the value
	//   to ENFORCED , test your clients. Not all FTPS clients perform TLS session
	//   resumption. So, if you choose to enforce TLS session resumption, you prevent any
	//   connections from FTPS clients that don't perform the protocol negotiation. To
	//   determine whether or not you can use the ENFORCED value, you need to test your
	//   clients.
	TlsSessionResumptionMode TlsSessionResumptionMode

	noSmithyDocumentSerde
}

// Specifies the details for the file location for the file that's being used in
// the workflow. Only applicable if you are using S3 storage.
type S3FileLocation struct {

	// Specifies the S3 bucket that contains the file being used.
	Bucket *string

	// The entity tag is a hash of the object. The ETag reflects changes only to the
	// contents of an object, not its metadata.
	Etag *string

	// The name assigned to the file when it was created in Amazon S3. You use the
	// object key to retrieve the object.
	Key *string

	// Specifies the file version.
	VersionId *string

	noSmithyDocumentSerde
}

// Specifies the customer input Amazon S3 file location. If it is used inside
// copyStepDetails.DestinationFileLocation , it should be the S3 copy destination.
// You need to provide the bucket and key. The key can represent either a path or a
// file. This is determined by whether or not you end the key value with the
// forward slash (/) character. If the final character is "/", then your file is
// copied to the folder, and its name does not change. If, rather, the final
// character is alphanumeric, your uploaded file is renamed to the path value. In
// this case, if a file with that name already exists, it is overwritten. For
// example, if your path is shared-files/bob/ , your uploaded files are copied to
// the shared-files/bob/ , folder. If your path is shared-files/today , each
// uploaded file is copied to the shared-files folder and named today : each upload
// overwrites the previous version of the bob file.
type S3InputFileLocation struct {

	// Specifies the S3 bucket for the customer input file.
	Bucket *string

	// The name assigned to the file when it was created in Amazon S3. You use the
	// object key to retrieve the object.
	Key *string

	noSmithyDocumentSerde
}

// Specifies the key-value pair that are assigned to a file during the execution
// of a Tagging step.
type S3Tag struct {

	// The name assigned to the tag that you create.
	//
	// This member is required.
	Key *string

	// The value that corresponds to the key.
	//
	// This member is required.
	Value *string

	noSmithyDocumentSerde
}

// A container object for the session details that are associated with a workflow.
type ServiceMetadata struct {

	// The Server ID ( ServerId ), Session ID ( SessionId ) and user ( UserName ) make
	// up the UserDetails .
	//
	// This member is required.
	UserDetails *UserDetails

	noSmithyDocumentSerde
}

// Contains the details for an SFTP connector object. The connector object is used
// for transferring files to and from a partner's SFTP server.
type SftpConnectorConfig struct {

	// The public portion of the host key, or keys, that are used to authenticate the
	// user to the external server to which you are connecting. You can use the
	// ssh-keyscan command against the SFTP server to retrieve the necessary key. The
	// three standard SSH public key format elements are , , and an optional , with
	// spaces between each element. For the trusted host key, Transfer Family accepts
	// RSA and ECDSA keys.
	//   - For RSA keys, the key type is ssh-rsa .
	//   - For ECDSA keys, the key type is either ecdsa-sha2-nistp256 ,
	//   ecdsa-sha2-nistp384 , or ecdsa-sha2-nistp521 , depending on the size of the
	//   key you generated.
	TrustedHostKeys []string

	// The identifiers for the secrets (in Amazon Web Services Secrets Manager) that
	// contain the SFTP user's private keys or passwords.
	UserSecretId *string

	noSmithyDocumentSerde
}

// Provides information about the public Secure Shell (SSH) key that is associated
// with a Transfer Family user for the specific file transfer protocol-enabled
// server (as identified by ServerId ). The information returned includes the date
// the key was imported, the public key contents, and the public key ID. A user can
// store more than one SSH public key associated with their user name on a specific
// server.
type SshPublicKey struct {

	// Specifies the date that the public key was added to the Transfer Family user.
	//
	// This member is required.
	DateImported *time.Time

	// Specifies the content of the SSH public key as specified by the PublicKeyId .
	// Transfer Family accepts RSA, ECDSA, and ED25519 keys.
	//
	// This member is required.
	SshPublicKeyBody *string

	// Specifies the SshPublicKeyId parameter contains the identifier of the public
	// key.
	//
	// This member is required.
	SshPublicKeyId *string

	noSmithyDocumentSerde
}

// Creates a key-value pair for a specific resource. Tags are metadata that you
// can use to search for and group a resource for various purposes. You can apply
// tags to servers, users, and roles. A tag key can take more than one value. For
// example, to group servers for accounting purposes, you might create a tag called
// Group and assign the values Research and Accounting to that group.
type Tag struct {

	// The name assigned to the tag that you create.
	//
	// This member is required.
	Key *string

	// Contains one or more values that you assigned to the key name you create.
	//
	// This member is required.
	Value *string

	noSmithyDocumentSerde
}

// Each step type has its own StepDetails structure. The key/value pairs used to
// tag a file during the execution of a workflow step.
type TagStepDetails struct {

	// The name of the step, used as an identifier.
	Name *string

	// Specifies which file to use as input to the workflow step: either the output
	// from the previous step, or the originally uploaded file for the workflow.
	//   - To use the previous file as the input, enter ${previous.file} . In this
	//   case, this workflow step uses the output file from the previous workflow step as
	//   input. This is the default value.
	//   - To use the originally uploaded file location as input for this step, enter
	//   ${original.file} .
	SourceFileLocation *string

	// Array that contains from 1 to 10 key/value pairs.
	Tags []S3Tag

	noSmithyDocumentSerde
}

// Specifies the user name, server ID, and session ID for a workflow.
type UserDetails struct {

	// The system-assigned unique identifier for a Transfer server instance.
	//
	// This member is required.
	ServerId *string

	// A unique string that identifies a Transfer Family user associated with a server.
	//
	// This member is required.
	UserName *string

	// The system-assigned unique identifier for a session that corresponds to the
	// workflow.
	SessionId *string

	noSmithyDocumentSerde
}

// Specifies the workflow ID for the workflow to assign and the execution role
// that's used for executing the workflow. In addition to a workflow to execute
// when a file is uploaded completely, WorkflowDetails can also contain a workflow
// ID (and execution role) for a workflow to execute on partial upload. A partial
// upload occurs when the server session disconnects while the file is still being
// uploaded.
type WorkflowDetail struct {

	// Includes the necessary permissions for S3, EFS, and Lambda operations that
	// Transfer can assume, so that all workflow steps can operate on the required
	// resources
	//
	// This member is required.
	ExecutionRole *string

	// A unique identifier for the workflow.
	//
	// This member is required.
	WorkflowId *string

	noSmithyDocumentSerde
}

// Container for the WorkflowDetail data type. It is used by actions that trigger
// a workflow to begin execution.
type WorkflowDetails struct {

	// A trigger that starts a workflow if a file is only partially uploaded. You can
	// attach a workflow to a server that executes whenever there is a partial upload.
	// A partial upload occurs when a file is open when the session disconnects.
	OnPartialUpload []WorkflowDetail

	// A trigger that starts a workflow: the workflow begins to execute after a file
	// is uploaded. To remove an associated workflow from a server, you can provide an
	// empty OnUpload object, as in the following example. aws transfer update-server
	// --server-id s-01234567890abcdef --workflow-details '{"OnUpload":[]}'
	OnUpload []WorkflowDetail

	noSmithyDocumentSerde
}

// The basic building block of a workflow.
type WorkflowStep struct {

	// Details for a step that performs a file copy. Consists of the following values:
	//   - A description
	//   - An Amazon S3 location for the destination of the file copy.
	//   - A flag that indicates whether to overwrite an existing file of the same
	//   name. The default is FALSE .
	CopyStepDetails *CopyStepDetails

	// Details for a step that invokes an Lambda function. Consists of the Lambda
	// function's name, target, and timeout (in seconds).
	CustomStepDetails *CustomStepDetails

	// Details for a step that decrypts an encrypted file. Consists of the following
	// values:
	//   - A descriptive name
	//   - An Amazon S3 or Amazon Elastic File System (Amazon EFS) location for the
	//   source file to decrypt.
	//   - An S3 or Amazon EFS location for the destination of the file decryption.
	//   - A flag that indicates whether to overwrite an existing file of the same
	//   name. The default is FALSE .
	//   - The type of encryption that's used. Currently, only PGP encryption is
	//   supported.
	DecryptStepDetails *DecryptStepDetails

	// Details for a step that deletes the file.
	DeleteStepDetails *DeleteStepDetails

	// Details for a step that creates one or more tags. You specify one or more tags.
	// Each tag contains a key-value pair.
	TagStepDetails *TagStepDetails

	// Currently, the following step types are supported.
	//   - COPY - Copy the file to another location.
	//   - CUSTOM - Perform a custom step with an Lambda function target.
	//   - DECRYPT - Decrypt a file that was encrypted before it was uploaded.
	//   - DELETE - Delete the file.
	//   - TAG - Add a tag to the file.
	Type WorkflowStepType

	noSmithyDocumentSerde
}

type noSmithyDocumentSerde = smithydocument.NoSerde