Documentation
¶
Overview ¶
Package sdk provides SFTPGo data structures primarily intended for use within plugins
Index ¶
- Constants
- Variables
- func IsProviderSupported(provider FilesystemProvider) bool
- type AzBlobFsConfig
- type BandwidthLimit
- type BaseAzBlobFsConfig
- type BaseGCSFsConfig
- type BaseGroup
- type BaseGroupUserSettings
- type BaseHTTPFsConfig
- type BaseS3FsConfig
- type BaseSFTPFsConfig
- type BaseUser
- type BaseUserFilters
- type BaseVirtualFolder
- type CryptFsConfig
- type DirectoryPermissions
- type Filesystem
- type FilesystemProvider
- type GCSFsConfig
- type Group
- type GroupMapping
- type GroupUserSettings
- type HTTPFsConfig
- type HooksFilter
- type OSFsConfig
- type PatternsFilter
- type RecoveryCode
- type S3FsConfig
- type SFTPFsConfig
- type TLSUsername
- type TOTPConfig
- type TimePeriod
- type User
- type UserFilters
- type UserType
- type VirtualFolder
Constants ¶
const ( // Primary group GroupTypePrimary = iota + 1 // Secondary group GroupTypeSecondary // Membership only, no settings are inherited from this group type GroupTypeMembership )
Group types
const ( WebClientPubKeyChangeDisabled = "publickey-change-disabled" WebClientTLSCertChangeDisabled = "tls-cert-change-disabled" WebClientWriteDisabled = "write-disabled" WebClientMFADisabled = "mfa-disabled" WebClientPasswordChangeDisabled = "password-change-disabled" WebClientAPIKeyAuthChangeDisabled = "api-key-auth-change-disabled" WebClientInfoChangeDisabled = "info-change-disabled" WebClientPasswordResetDisabled = "password-reset-disabled" )
Web Client/user REST API restrictions
const ( // DenyPolicyDefault means that denied files matching the filters are visible in directory // listing but cannot be uploaded/downloaded/overwritten/renamed DenyPolicyDefault = iota // DenyPolicyHide applies the same restrictions as DenyPolicyDefault and denied files/directories // matching the filters will also be hidden in directory listing. // This mode may cause performance issues for large directories DenyPolicyHide )
Variables ¶
var ( // WebClientOptions defines the available options for the web client interface/user REST API WebClientOptions = []string{WebClientWriteDisabled, WebClientPasswordChangeDisabled, WebClientPasswordResetDisabled, WebClientPubKeyChangeDisabled, WebClientTLSCertChangeDisabled, WebClientMFADisabled, WebClientAPIKeyAuthChangeDisabled, WebClientInfoChangeDisabled, WebClientSharesDisabled, WebClientShareNoPasswordDisabled} // UserTypes defines the supported user type hints for auth plugins UserTypes = []string{string(UserTypeLDAP), string(UserTypeOS)} )
Functions ¶
func IsProviderSupported ¶ added in v0.1.7
func IsProviderSupported(provider FilesystemProvider) bool
IsProviderSupported returns true if the specified provider is supported.
Types ¶
type AzBlobFsConfig ¶
type AzBlobFsConfig struct {
BaseAzBlobFsConfig
// Storage Account Key leave blank to use SAS URL.
// The access key is stored encrypted based on the kms configuration
AccountKey kms.BaseSecret `json:"account_key,omitempty"`
// Shared access signature URL, leave blank if using account/key
SASURL kms.BaseSecret `json:"sas_url,omitempty"`
}
AzBlobFsConfig defines the configuration for Azure Blob Storage based filesystem
type BandwidthLimit ¶
type BandwidthLimit struct {
// Source networks in CIDR notation as defined in RFC 4632 and RFC 4291
// for example "192.0.2.0/24" or "2001:db8::/32". The limit applies if the
// defined networks contain the client IP
Sources []string `json:"sources"`
// Maximum upload bandwidth as KB/s
UploadBandwidth int64 `json:"upload_bandwidth,omitempty"`
// Maximum download bandwidth as KB/s
DownloadBandwidth int64 `json:"download_bandwidth,omitempty"`
}
BandwidthLimit defines a per-source bandwidth limit
func (*BandwidthLimit) GetSourcesAsString ¶
func (l *BandwidthLimit) GetSourcesAsString() string
GetSourcesAsString returns the sources as comma separated string
type BaseAzBlobFsConfig ¶
type BaseAzBlobFsConfig struct {
Container string `json:"container,omitempty"`
// Storage Account Name, leave blank to use SAS URL
AccountName string `json:"account_name,omitempty"`
// Optional endpoint. Default is "blob.core.windows.net".
// If you use the emulator the endpoint must include the protocol,
// for example "http://127.0.0.1:10000"
Endpoint string `json:"endpoint,omitempty"`
// KeyPrefix is similar to a chroot directory for local filesystem.
// If specified then the SFTPGo user will only see objects that starts
// with this prefix and so you can restrict access to a specific
// folder. The prefix, if not empty, must not start with "/" and must
// end with "/".
// If empty the whole bucket contents will be available
KeyPrefix string `json:"key_prefix,omitempty"`
// The buffer size (in MB) to use for multipart uploads.
// If this value is set to zero, the default value (5MB) will be used.
// Please note that if the upload bandwidth between the SFTPGo client and SFTPGo server is
// greater than the upload bandwidth between SFTPGo and Azure then the SFTP client have
// to wait for the upload of the last parts to Azure after it ends the file upload to SFTPGo,
// and it may time out.
// Keep this in mind if you customize these parameters.
UploadPartSize int64 `json:"upload_part_size,omitempty"`
// How many parts are uploaded in parallel. Default: 5
UploadConcurrency int `json:"upload_concurrency,omitempty"`
// The buffer size (in MB) to use for multipart downloads.
// If this value is set to zero, the default value (5MB) will be used.
DownloadPartSize int64 `json:"download_part_size,omitempty"`
// How many parts are downloaded in parallel. 0 means the default (5)
DownloadConcurrency int `json:"download_concurrency,omitempty"`
// Set to true if you use an Azure emulator such as Azurite
UseEmulator bool `json:"use_emulator,omitempty"`
// Blob Access Tier
AccessTier string `json:"access_tier,omitempty"`
}
BaseAzBlobFsConfig defines the base configuration for Azure Blob Storage based filesystem
type BaseGCSFsConfig ¶
type BaseGCSFsConfig struct {
Bucket string `json:"bucket,omitempty"`
// KeyPrefix is similar to a chroot directory for local filesystem.
// If specified then the SFTP user will only see objects that starts
// with this prefix and so you can restrict access to a specific
// folder. The prefix, if not empty, must not start with "/" and must
// end with "/".
// If empty the whole bucket contents will be available
KeyPrefix string `json:"key_prefix,omitempty"`
CredentialFile string `json:"-"`
// 0 explicit, 1 automatic
AutomaticCredentials int `json:"automatic_credentials,omitempty"`
StorageClass string `json:"storage_class,omitempty"`
// The ACL to apply to uploaded objects. Leave empty to use the default ACL.
// For more information and available ACLs, refer to the JSON API here:
// https://cloud.google.com/storage/docs/access-control/lists#predefined-acl
ACL string `json:"acl,omitempty"`
// The buffer size (in MB) to use for multipart uploads. The default value is 16MB.
// 0 means use the default
UploadPartSize int64 `json:"upload_part_size,omitempty"`
// UploadPartMaxTime defines the maximum time allowed, in seconds, to upload a single chunk.
// The default value is 32. 0 means use the default
UploadPartMaxTime int `json:"upload_part_max_time,omitempty"`
}
BaseGCSFsConfig defines the base configuration for Google Cloud Storage based filesystems
type BaseGroup ¶ added in v0.1.1
type BaseGroup struct {
// Data provider unique identifier
ID int64 `json:"id"`
// Group name
Name string `json:"name"`
// optional description
Description string `json:"description,omitempty"`
// Creation time as unix timestamp in milliseconds
CreatedAt int64 `json:"created_at"`
// last update time as unix timestamp in milliseconds
UpdatedAt int64 `json:"updated_at"`
// list of usernames associated with this group
Users []string `json:"users,omitempty"`
// list of admins associated with this group
Admins []string `json:"admins,omitempty"`
}
BaseGroup defines the shared group fields
type BaseGroupUserSettings ¶ added in v0.1.1
type BaseGroupUserSettings struct {
HomeDir string `json:"home_dir"`
// Maximum concurrent sessions. 0 means unlimited
MaxSessions int `json:"max_sessions"`
// Maximum size allowed as bytes. 0 means unlimited
QuotaSize int64 `json:"quota_size"`
// Maximum number of files allowed. 0 means unlimited
QuotaFiles int `json:"quota_files"`
// List of permissions granted per-directory
Permissions map[string][]string `json:"permissions"`
// Maximum upload bandwidth as KB/s, 0 means unlimited.
// This is the default if no per-source limit match
UploadBandwidth int64 `json:"upload_bandwidth,omitempty"`
// Maximum download bandwidth as KB/s, 0 means unlimited.
// This is the default if no per-source limit match
DownloadBandwidth int64 `json:"download_bandwidth,omitempty"`
// Maximum data transfer allowed for uploads as MB. 0 means no limit.
// You can periodically reset the data related transfer fields for example
// each month
UploadDataTransfer int64 `json:"upload_data_transfer"`
// Maximum data transfer allowed for downloads as MB. 0 means no limit.
DownloadDataTransfer int64 `json:"download_data_transfer"`
// Maximum total data transfer as MB. 0 means unlimited.
// You can set a total data transfer instead of the individual values
// for uploads and downloads
TotalDataTransfer int64 `json:"total_data_transfer"`
// Defines account expiration in number of days from creation.
// 0 means no expiration
ExpiresIn int `json:"expires_in,omitempty"`
// Additional restrictions
Filters BaseUserFilters `json:"filters"`
}
BaseGroupUserSettings defines the base settings to apply to users
type BaseHTTPFsConfig ¶ added in v0.1.2
type BaseHTTPFsConfig struct {
// HTTP/S endpoint URL. SFTPGo will use this URL as base, for example for the
// "stat" API, SFTPGo will add "/stat/{name}"
Endpoint string `json:"endpoint,omitempty"`
Username string `json:"username,omitempty"`
// if enabled the HTTP client accepts any TLS certificate presented by
// the server and any host name in that certificate.
// In this mode, TLS is susceptible to man-in-the-middle attacks.
// This should be used only for testing.
SkipTLSVerify bool `json:"skip_tls_verify,omitempty"`
// Defines how to check if this config points to the same
// server as another config. By default both the endpoint and
// the username must match. 1 means that only the endpoint must match.
// If different configs point to the same server the renaming
// between the fs configs is allowed.
EqualityCheckMode int `json:"equality_check_mode,omitempty"`
}
BaseHTTPFsConfig defines the base configuration for HTTP based filesystem
type BaseS3FsConfig ¶
type BaseS3FsConfig struct {
Bucket string `json:"bucket,omitempty"`
// KeyPrefix is similar to a chroot directory for local filesystem.
// If specified then the SFTP user will only see objects that starts
// with this prefix and so you can restrict access to a specific
// folder. The prefix, if not empty, must not start with "/" and must
// end with "/".
// If empty the whole bucket contents will be available
KeyPrefix string `json:"key_prefix,omitempty"`
Region string `json:"region,omitempty"`
AccessKey string `json:"access_key,omitempty"`
// IAM Role ARN to assume
RoleARN string `json:"role_arn,omitempty"`
// Optional Session token that is a part of temporary security credentials provisioned by AWS STS.
SessionToken string `json:"session_token,omitempty"`
Endpoint string `json:"endpoint,omitempty"`
StorageClass string `json:"storage_class,omitempty"`
// The canned ACL to apply to uploaded objects. Leave empty to use the default ACL.
// For more information and available ACLs, see here:
// https://docs.aws.amazon.com/AmazonS3/latest/userguide/acl-overview.html#canned-acl
ACL string `json:"acl,omitempty"`
// The buffer size (in MB) to use for multipart uploads. The minimum allowed part size is 5MB,
// and if this value is set to zero, the default value (5MB) for the AWS SDK will be used.
// The minimum allowed value is 5.
// Please note that if the upload bandwidth between the SFTP client and SFTPGo is greater than
// the upload bandwidth between SFTPGo and S3 then the SFTP client have to wait for the upload
// of the last parts to S3 after it ends the file upload to SFTPGo, and it may time out.
// Keep this in mind if you customize these parameters.
UploadPartSize int64 `json:"upload_part_size,omitempty"`
// How many parts are uploaded in parallel. 0 means the default (5)
UploadConcurrency int `json:"upload_concurrency,omitempty"`
// The buffer size (in MB) to use for multipart downloads. The minimum allowed part size is 5MB,
// and if this value is set to zero, the default value (5MB) for the AWS SDK will be used.
// The minimum allowed value is 5. Ignored for partial downloads.
DownloadPartSize int64 `json:"download_part_size,omitempty"`
// UploadPartMaxTime defines the maximum time allowed, in seconds, to upload a single chunk.
// 0 means no timeout.
UploadPartMaxTime int `json:"upload_part_max_time,omitempty"`
// How many parts are downloaded in parallel. 0 means the default (5). Ignored for partial downloads.
DownloadConcurrency int `json:"download_concurrency,omitempty"`
// DownloadPartMaxTime defines the maximum time allowed, in seconds, to download a single chunk.
// 0 means no timeout. Ignored for partial downloads.
DownloadPartMaxTime int `json:"download_part_max_time,omitempty"`
// Set this to `true` to force the request to use path-style addressing,
// i.e., `http://s3.amazonaws.com/BUCKET/KEY`. By default, the S3 client
// will use virtual hosted bucket addressing when possible
// (`http://BUCKET.s3.amazonaws.com/KEY`)
ForcePathStyle bool `json:"force_path_style,omitempty"`
// If enabled the S3 client accepts any TLS certificate presented by
// the server and any host name in that certificate.
// In this mode, TLS is susceptible to man-in-the-middle attacks.
// This should be used only for testing.
SkipTLSVerify bool `json:"skip_tls_verify,omitempty"`
}
BaseS3FsConfig defines the base configuration for S3 based filesystems
type BaseSFTPFsConfig ¶
type BaseSFTPFsConfig struct {
Endpoint string `json:"endpoint,omitempty"`
Username string `json:"username,omitempty"`
Fingerprints []string `json:"fingerprints,omitempty"`
// Prefix is the path prefix to strip from SFTP resource paths.
Prefix string `json:"prefix,omitempty"`
// Concurrent reads are safe to use and disabling them will degrade performance.
// Some servers automatically delete files once they are downloaded.
// Using concurrent reads is problematic with such servers.
DisableCouncurrentReads bool `json:"disable_concurrent_reads,omitempty"`
// The buffer size (in MB) to use for transfers.
// Buffering could improve performance for high latency networks.
// With buffering enabled upload resume is not supported and a file
// cannot be opened for both reading and writing at the same time
// 0 means disabled.
BufferSize int64 `json:"buffer_size,omitempty"`
// Defines how to check if this config points to the same
// server as another config. By default both the endpoint and
// the username must match. 1 means that only the endpoint must match.
// If different configs point to the same server the renaming
// between the fs configs is allowed.
EqualityCheckMode int `json:"equality_check_mode,omitempty"`
}
BaseSFTPFsConfig defines the base configuration for SFTP based filesystem
type BaseUser ¶
type BaseUser struct {
// Data provider unique identifier
ID int64 `json:"id"`
// 1 enabled, 0 disabled (login is not allowed)
Status int `json:"status"`
// Username
Username string `json:"username"`
// Email
Email string `json:"email,omitempty"`
// Account expiration date as unix timestamp in milliseconds. An expired account cannot login.
// 0 means no expiration
ExpirationDate int64 `json:"expiration_date,omitempty"`
// Password used for password authentication.
// For users created using SFTPGo REST API the password is be stored using bcrypt or argon2id hashing algo.
// Checking passwords stored with pbkdf2, md5crypt and sha512crypt is supported too.
Password string `json:"password,omitempty"`
// PublicKeys used for public key authentication.
PublicKeys []string `json:"public_keys,omitempty"`
// Indicates whether the password is set
HasPassword bool `json:"has_password,omitempty"`
// The user cannot upload or download files outside this directory. Must be an absolute path
HomeDir string `json:"home_dir"`
// If SFTPGo runs as root system user then the created files and directories will be assigned to this system UID
UID int `json:"uid"`
// If SFTPGo runs as root system user then the created files and directories will be assigned to this system GID
GID int `json:"gid"`
// Maximum concurrent sessions. 0 means unlimited
MaxSessions int `json:"max_sessions"`
// Maximum size allowed as bytes. 0 means unlimited
QuotaSize int64 `json:"quota_size"`
// Maximum number of files allowed. 0 means unlimited
QuotaFiles int `json:"quota_files"`
// List of permissions granted per-directory
Permissions map[string][]string `json:"permissions"`
// Used quota as bytes
UsedQuotaSize int64 `json:"used_quota_size,omitempty"`
// Used quota as number of files
UsedQuotaFiles int `json:"used_quota_files,omitempty"`
// Last quota update as unix timestamp in milliseconds
LastQuotaUpdate int64 `json:"last_quota_update,omitempty"`
// Maximum upload bandwidth as KB/s, 0 means unlimited.
// This is the default if no per-source limit match
UploadBandwidth int64 `json:"upload_bandwidth,omitempty"`
// Maximum download bandwidth as KB/s, 0 means unlimited.
// This is the default if no per-source limit match
DownloadBandwidth int64 `json:"download_bandwidth,omitempty"`
// Maximum data transfer allowed for uploads as MB. 0 means no limit.
// You can periodically reset the data related transfer fields for example
// each month
UploadDataTransfer int64 `json:"upload_data_transfer"`
// Maximum data transfer allowed for downloads as MB. 0 means no limit.
DownloadDataTransfer int64 `json:"download_data_transfer"`
// Maximum total data transfer as MB. 0 means unlimited.
// You can set a total data transfer instead of the individual values
// for uploads and downloads
TotalDataTransfer int64 `json:"total_data_transfer"`
// Uploaded size, as bytes, since the last reset
UsedUploadDataTransfer int64 `json:"used_upload_data_transfer,omitempty"`
// Downloaded size, as bytes, since the last reset
UsedDownloadDataTransfer int64 `json:"used_download_data_transfer,omitempty"`
// Last login as unix timestamp in milliseconds
LastLogin int64 `json:"last_login,omitempty"`
// Creation time as unix timestamp in milliseconds. It will be 0 for admins created before v2.2.0
CreatedAt int64 `json:"created_at"`
// last update time as unix timestamp in milliseconds
UpdatedAt int64 `json:"updated_at"`
// first download time as unix timestamp in milliseconds
FirstDownload int64 `json:"first_download,omitempty"`
// first upload time as unix timestamp in milliseconds
FirstUpload int64 `json:"first_upload,omitempty"`
// last password change as unix timestamp in milliseconds
LastPasswordChange int64 `json:"last_password_change,omitempty"`
// optional description, for example full name
Description string `json:"description,omitempty"`
// free form text field for external systems
AdditionalInfo string `json:"additional_info,omitempty"`
// groups associated with this user
Groups []GroupMapping `json:"groups,omitempty"`
// This field is passed to the pre-login hook if custom OIDC fields have been configured.
// Field values can be of any type (this is a free form object) and depend on the type
// of the configured OIDC fields.
// This fields are never saved or returned in anything other than the pre-login hook
OIDCCustomFields *map[string]interface{} `json:"oidc_custom_fields,omitempty"`
// Role name
Role string `json:"role,omitempty"`
}
BaseUser defines the shared user fields
type BaseUserFilters ¶
type BaseUserFilters struct {
// only clients connecting from these IP/Mask are allowed.
// IP/Mask must be in CIDR notation as defined in RFC 4632 and RFC 4291
// for example "192.0.2.0/24" or "2001:db8::/32"
AllowedIP []string `json:"allowed_ip,omitempty"`
// clients connecting from these IP/Mask are not allowed.
// Denied rules will be evaluated before allowed ones
DeniedIP []string `json:"denied_ip,omitempty"`
// these login methods are not allowed.
// If null or empty any available login method is allowed
DeniedLoginMethods []string `json:"denied_login_methods,omitempty"`
// these protocols are not allowed.
// If null or empty any available protocol is allowed
DeniedProtocols []string `json:"denied_protocols,omitempty"`
// filter based on shell patterns.
// Please note that these restrictions can be easily bypassed.
FilePatterns []PatternsFilter `json:"file_patterns,omitempty"`
// max size allowed for a single upload, 0 means unlimited
MaxUploadFileSize int64 `json:"max_upload_file_size,omitempty"`
// TLS certificate attribute to use as username.
// For FTP clients it must match the name provided using the
// "USER" command
TLSUsername TLSUsername `json:"tls_username,omitempty"`
// TLSCerts defines the allowed TLS certificates for mutual authentication.
// If provided will be checked before TLSUsername
TLSCerts []string `json:"tls_certs,omitempty"`
// user specific hook overrides
Hooks HooksFilter `json:"hooks,omitempty"`
// Disable checks for existence and automatic creation of home directory
// and virtual folders.
// SFTPGo requires that the user's home directory, virtual folder root,
// and intermediate paths to virtual folders exist to work properly.
// If you already know that the required directories exist, disabling
// these checks will speed up login.
// You could, for example, disable these checks after the first login
DisableFsChecks bool `json:"disable_fs_checks,omitempty"`
// WebClient related configuration options
WebClient []string `json:"web_client,omitempty"`
// API key auth allows to impersonate this user with an API key
AllowAPIKeyAuth bool `json:"allow_api_key_auth,omitempty"`
// UserType is an hint for authentication plugins.
// It is ignored when using SFTPGo internal authentication
UserType string `json:"user_type,omitempty"`
// Per-source bandwidth limits
BandwidthLimits []BandwidthLimit `json:"bandwidth_limits,omitempty"`
// Defines the cache time, in seconds, for users authenticated using
// an external auth hook. 0 means no cache
ExternalAuthCacheTime int64 `json:"external_auth_cache_time,omitempty"`
// Specifies an alternate starting directory. If not set, the default is "/".
// This option is supported for SFTP/SCP, FTP and HTTP (WebClient/REST API) protocols.
// Relative paths will use this directory as base
StartDirectory string `json:"start_directory,omitempty"`
// TwoFactorAuthProtocols defines protocols that require two factor authentication
TwoFactorAuthProtocols []string `json:"two_factor_protocols,omitempty"`
// Define the FTP security mode. Set to 1 to require TLS for both data and control
// connection. This setting is useful if you want to allow both encrypted and plain text
// FTP sessions globally and then you want to require encrypted sessions on a per-user
// basis.
// It has no effect if TLS is already required for all users in the configuration file.
FTPSecurity int `json:"ftp_security,omitempty"`
// If enabled the user can login with any password or no password at all.
// Anonymous users are supported for FTP and WebDAV protocols and
// permissions will be automatically set to "list" and "download" (read only)
IsAnonymous bool `json:"is_anonymous,omitempty"`
// 0 means no expiration
DefaultSharesExpiration int `json:"default_shares_expiration,omitempty"`
// must set an expiration for their shares and it must be less than or equal
// to this number of days. 0 means any expiration
MaxSharesExpiration int `json:"max_shares_expiration,omitempty"`
// The password expires after the defined number of days. 0 means no expiration
PasswordExpiration int `json:"password_expiration,omitempty"`
// PasswordStrength defines the minimum password strength.
// 0 means disabled, any password will be accepted. Values in the 50-70
// range are suggested for common use cases.
PasswordStrength int `json:"password_strength,omitempty"`
// AccessTime defines the time periods in which access is allowed
AccessTime []TimePeriod `json:"access_time,omitempty"`
}
BaseUserFilters defines additional restrictions for a user
func (*BaseUserFilters) GetFlatFilePatterns ¶ added in v0.1.1
func (f *BaseUserFilters) GetFlatFilePatterns() []PatternsFilter
GetFlatFilePatterns returns file patterns as flat list duplicating a path if it has both allowed and denied patterns
type BaseVirtualFolder ¶
type BaseVirtualFolder struct {
ID int64 `json:"id"`
Name string `json:"name"`
MappedPath string `json:"mapped_path,omitempty"`
Description string `json:"description,omitempty"`
UsedQuotaSize int64 `json:"used_quota_size"`
// Used quota as number of files
UsedQuotaFiles int `json:"used_quota_files"`
// Last quota update as unix timestamp in milliseconds
LastQuotaUpdate int64 `json:"last_quota_update"`
// list of usernames associated with this virtual folder
Users []string `json:"users,omitempty"`
// list of group names associated with this virtual folder
Groups []string `json:"groups,omitempty"`
// Filesystem configuration details
FsConfig Filesystem `json:"filesystem"`
}
BaseVirtualFolder defines the path for the virtual folder and the used quota limits. The same folder can be shared among multiple users and each user can have different quota limits or a different virtual path.
type CryptFsConfig ¶
type CryptFsConfig struct {
OSFsConfig
Passphrase kms.BaseSecret `json:"passphrase,omitempty"`
}
CryptFsConfig defines the configuration to store local files as encrypted
type DirectoryPermissions ¶
DirectoryPermissions defines permissions for a directory virtual path
type Filesystem ¶
type Filesystem struct {
Provider FilesystemProvider `json:"provider"`
OSConfig OSFsConfig `json:"osconfig,omitempty"`
S3Config S3FsConfig `json:"s3config,omitempty"`
GCSConfig GCSFsConfig `json:"gcsconfig,omitempty"`
AzBlobConfig AzBlobFsConfig `json:"azblobconfig,omitempty"`
CryptConfig CryptFsConfig `json:"cryptconfig,omitempty"`
SFTPConfig SFTPFsConfig `json:"sftpconfig,omitempty"`
HTTPConfig HTTPFsConfig `json:"httpconfig,omitempty"`
}
Filesystem defines filesystem details
type FilesystemProvider ¶
type FilesystemProvider int
FilesystemProvider defines the supported storage filesystems
const ( LocalFilesystemProvider FilesystemProvider = iota // Local S3FilesystemProvider // AWS S3 compatible GCSFilesystemProvider // Google Cloud Storage AzureBlobFilesystemProvider // Azure Blob Storage CryptedFilesystemProvider // Local encrypted SFTPFilesystemProvider // SFTP HTTPFilesystemProvider // HTTP )
supported values for FilesystemProvider
type GCSFsConfig ¶
type GCSFsConfig struct {
BaseGCSFsConfig
Credentials kms.BaseSecret `json:"credentials,omitempty"`
}
GCSFsConfig defines the configuration for Google Cloud Storage based filesystems
type Group ¶ added in v0.1.1
type Group struct {
BaseGroup
// settings to apply to users for whom this is a primary group
UserSettings GroupUserSettings `json:"user_settings,omitempty"`
// Mapping between virtual paths and virtual folders
VirtualFolders []VirtualFolder `json:"virtual_folders,omitempty"`
}
Group defines an SFTPGo group. Groups are used to easily configure similar users
type GroupMapping ¶ added in v0.1.1
GroupMapping defines the mapping between an SFTPGo user and a group
type GroupUserSettings ¶ added in v0.1.1
type GroupUserSettings struct {
BaseGroupUserSettings
// Filesystem configuration details
FsConfig Filesystem `json:"filesystem"`
}
GroupUserSettings defines the settings to apply to users
type HTTPFsConfig ¶ added in v0.1.2
type HTTPFsConfig struct {
BaseHTTPFsConfig
Password kms.BaseSecret `json:"password,omitempty"`
APIKey kms.BaseSecret `json:"api_key,omitempty"`
}
HTTPFsConfig defines the configuration for HTTP based filesystem
type HooksFilter ¶
type HooksFilter struct {
ExternalAuthDisabled bool `json:"external_auth_disabled"`
PreLoginDisabled bool `json:"pre_login_disabled"`
CheckPasswordDisabled bool `json:"check_password_disabled"`
}
HooksFilter defines user specific overrides for global hooks
type OSFsConfig ¶ added in v0.1.4
type OSFsConfig struct {
// Read buffer size as bytes, 0 means no buffering
ReadBufferSize int `json:"read_buffer_size,omitempty"`
// Write buffer size as bytes, 0 means no buffering
WriteBufferSize int `json:"write_buffer_size,omitempty"`
}
OSFsConfig defines the configuration for local filesystem
type PatternsFilter ¶
type PatternsFilter struct {
// Virtual path, if no other specific filter is defined, the filter applies for
// sub directories too.
// For example if filters are defined for the paths "/" and "/sub" then the
// filters for "/" are applied for any file outside the "/sub" directory
Path string `json:"path"`
// files/dir with these, case insensitive, patterns are allowed.
// Denied file patterns are evaluated before the allowed ones
AllowedPatterns []string `json:"allowed_patterns,omitempty"`
// files/dir with these, case insensitive, patterns are not allowed.
// Denied file patterns are evaluated before the allowed ones
DeniedPatterns []string `json:"denied_patterns,omitempty"`
// Deny policy
DenyPolicy int `json:"deny_policy,omitempty"`
}
PatternsFilter defines filters based on shell like patterns. System commands such as Git and rsync interacts with the filesystem directly and they are not aware about these restrictions so they are not allowed inside paths with extensions filters
func (*PatternsFilter) CheckAllowed ¶ added in v0.1.1
func (p *PatternsFilter) CheckAllowed(item string) bool
CheckAllowed returns true if the specified item is allowed
func (*PatternsFilter) GetCommaSeparatedPatterns ¶
func (p *PatternsFilter) GetCommaSeparatedPatterns() string
GetCommaSeparatedPatterns returns the first non empty patterns list comma separated
func (*PatternsFilter) IsAllowed ¶
func (p *PatternsFilter) IsAllowed() bool
IsAllowed returns true if the patterns has one or more allowed patterns
func (*PatternsFilter) IsDenied ¶
func (p *PatternsFilter) IsDenied() bool
IsDenied returns true if the patterns has one or more denied patterns
type RecoveryCode ¶
type RecoveryCode struct {
Secret kms.BaseSecret `json:"secret"`
Used bool `json:"used,omitempty"`
}
RecoveryCode defines a 2FA recovery code
type S3FsConfig ¶
type S3FsConfig struct {
BaseS3FsConfig
AccessSecret kms.BaseSecret `json:"access_secret,omitempty"`
SSECustomerKey kms.BaseSecret `json:"sse_customer_key,omitempty"`
}
S3FsConfig defines the base configuration for S3 based filesystems
type SFTPFsConfig ¶
type SFTPFsConfig struct {
BaseSFTPFsConfig
Password kms.BaseSecret `json:"password,omitempty"`
PrivateKey kms.BaseSecret `json:"private_key,omitempty"`
KeyPassphrase kms.BaseSecret `json:"key_passphrase,omitempty"`
}
SFTPFsConfig defines the configuration for SFTP based filesystem
type TLSUsername ¶
type TLSUsername string
TLSUsername defines the TLS certificate attribute to use as username
const ( TLSUsernameNone TLSUsername = "None" TLSUsernameCN TLSUsername = "CommonName" )
Supported certificate attributes to use as username
type TOTPConfig ¶
type TOTPConfig struct {
Enabled bool `json:"enabled,omitempty"`
ConfigName string `json:"config_name,omitempty"`
Secret kms.BaseSecret `json:"secret,omitempty"`
// TOTP will be required for the specified protocols.
// SSH protocol (SFTP/SCP/SSH commands) will ask for the TOTP passcode if the client uses keyboard interactive
// authentication.
// FTP have no standard way to support two factor authentication, if you
// enable the support for this protocol you have to add the TOTP passcode after the password.
// For example if your password is "password" and your one time passcode is
// "123456" you have to use "password123456" as password.
Protocols []string `json:"protocols,omitempty"`
}
TOTPConfig defines the time-based one time password configuration
type TimePeriod ¶ added in v0.1.7
type TimePeriod struct {
DayOfWeek int `json:"day_of_week,omitempty"`
From string `json:"from,omitempty"`
To string `json:"to,omitempty"`
}
TimePeriod defines a period of time
type User ¶
type User struct {
BaseUser
// Additional restrictions
Filters UserFilters `json:"filters"`
// Mapping between virtual paths and virtual folders
VirtualFolders []VirtualFolder `json:"virtual_folders,omitempty"`
// Filesystem configuration details
FsConfig Filesystem `json:"filesystem"`
}
User defines a SFTPGo user
type UserFilters ¶
type UserFilters struct {
BaseUserFilters
// User must change password from WebClient/REST API at next login.
RequirePasswordChange bool `json:"require_password_change,omitempty"`
// AdditionalEmails defines additional email addresses
AdditionalEmails []string `json:"additional_emails,omitempty"`
// Time-based one time passwords configuration
TOTPConfig TOTPConfig `json:"totp_config,omitempty"`
// Recovery codes to use if the user loses access to their second factor auth device.
// Each code can only be used once, you should use these codes to login and disable or
// reset 2FA for your account
RecoveryCodes []RecoveryCode `json:"recovery_codes,omitempty"`
}
UserFilters defines additional restrictions for a user TODO: rename to UserOptions in v3
type UserType ¶
type UserType string
UserType defines the supported user types. This is an hint for external auth plugins, is not used in SFTPGo directly
type VirtualFolder ¶
type VirtualFolder struct {
BaseVirtualFolder
VirtualPath string `json:"virtual_path"`
// Maximum size allowed as bytes. 0 means unlimited, -1 included in user quota
QuotaSize int64 `json:"quota_size"`
// Maximum number of files allowed. 0 means unlimited, -1 included in user quota
QuotaFiles int `json:"quota_files"`
}
VirtualFolder defines a mapping between an SFTPGo exposed virtual path and a filesystem path outside the user home directory. The specified paths must be absolute and the virtual path cannot be "/", it must be a sub directory. The parent directory for the specified virtual path must exist. SFTPGo will, by default, try to automatically create any missing parent directory for the configured virtual folders at user login.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package kms provides Key Management Services support
|
Package kms provides Key Management Services support |
|
auth
Package auth defines the interface and the GRPC implementation for authentication plugins.
|
Package auth defines the interface and the GRPC implementation for authentication plugins. |
|
eventsearcher
Package eventsearcher defines the interface and the GRPC implementation for events search plugins.
|
Package eventsearcher defines the interface and the GRPC implementation for events search plugins. |
|
ipfilter
Package ipfilter defines the interface and the GRPC implementation for IP filter plugins.
|
Package ipfilter defines the interface and the GRPC implementation for IP filter plugins. |
|
kms
Package kms defines the interface and the GRPC implementation for kms plugins.
|
Package kms defines the interface and the GRPC implementation for kms plugins. |
|
notifier
Package notifier defines the interface and the GRPC implementation for event notifier plugins.
|
Package notifier defines the interface and the GRPC implementation for event notifier plugins. |