add fs providers hook

Signed-off-by: Nicola Murino <nicola.murino@gmail.com>
This commit is contained in:
Nicola Murino
2024-08-10 15:57:05 +02:00
parent 81433e00d1
commit 954c36c0a2
5 changed files with 34 additions and 8 deletions

View File

@@ -16,10 +16,17 @@ package vfs
import (
"os"
"slices"
"github.com/sftpgo/sdk"
"github.com/drakkan/sftpgo/v2/internal/kms"
"github.com/drakkan/sftpgo/v2/internal/util"
)
var (
disabledFilesystemProviders []sdk.FilesystemProvider
loadDisabledProvidersFn func()
)
// Filesystem defines filesystem details
@@ -232,8 +239,7 @@ func (f *Filesystem) Validate(additionalData string) error {
f.CryptConfig = CryptFsConfig{}
f.SFTPConfig = SFTPFsConfig{}
return nil
default:
f.Provider = sdk.LocalFilesystemProvider
case sdk.LocalFilesystemProvider:
f.S3Config = S3FsConfig{}
f.GCSConfig = GCSFsConfig{}
f.AzBlobConfig = AzBlobFsConfig{}
@@ -241,6 +247,11 @@ func (f *Filesystem) Validate(additionalData string) error {
f.SFTPConfig = SFTPFsConfig{}
f.HTTPConfig = HTTPFsConfig{}
return validateOSFsConfig(&f.OSConfig)
default:
return util.NewI18nError(
util.NewValidationError("invalid filesystem provider"),
util.I18nErrorFsValidation,
)
}
}
@@ -390,3 +401,11 @@ func (f *Filesystem) GetACopy() Filesystem {
}
return fs
}
// IsFsDisabled returns if a filesystem provider is disabled
func IsFsDisabled(provider sdk.FilesystemProvider) bool {
if loadDisabledProvidersFn != nil {
loadDisabledProvidersFn()
}
return slices.Contains(disabledFilesystemProviders, provider)
}

View File

@@ -140,6 +140,9 @@ type VirtualFolder struct {
// GetFilesystem returns the filesystem for this folder
func (v *VirtualFolder) GetFilesystem(connectionID string, forbiddenSelfUsers []string) (Fs, error) {
if IsFsDisabled(v.FsConfig.Provider) {
return nil, fmt.Errorf("filesystem provider %d is disabled", v.FsConfig.Provider)
}
switch v.FsConfig.Provider {
case sdk.S3FilesystemProvider:
return NewS3Fs(connectionID, v.MappedPath, v.VirtualPath, v.FsConfig.S3Config)