diff --git a/internal/common/eventmanager.go b/internal/common/eventmanager.go index ccb6b607..eb4b3a2a 100644 --- a/internal/common/eventmanager.go +++ b/internal/common/eventmanager.go @@ -70,7 +70,6 @@ var ( // eventManager handle the supported event rules actions eventManager eventRulesContainer multipartQuoteEscaper = strings.NewReplacer("\\", "\\\\", `"`, "\\\"") - loadBuiltinRulesFn func() []dataprovider.EventRule ) func init() { @@ -279,9 +278,6 @@ func (r *eventRulesContainer) loadRules() { eventManagerLog(logger.LevelError, "unable to load event rules: %v", err) return } - if loadBuiltinRulesFn != nil { - rules = append(rules, loadBuiltinRulesFn()...) - } eventManagerLog(logger.LevelDebug, "recently updated event rules loaded: %d", len(rules)) if len(rules) > 0 { @@ -2792,20 +2788,9 @@ func (j *eventCronJob) getTask(rule *dataprovider.EventRule) (dataprovider.Task, return dataprovider.Task{}, nil } -func (j *eventCronJob) getEventRule() (dataprovider.EventRule, error) { - if loadBuiltinRulesFn != nil { - for _, rule := range loadBuiltinRulesFn() { - if rule.Name == j.ruleName { - return rule, nil - } - } - } - return dataprovider.EventRuleExists(j.ruleName) -} - func (j *eventCronJob) Run() { eventManagerLog(logger.LevelDebug, "executing scheduled rule %q", j.ruleName) - rule, err := j.getEventRule() + rule, err := dataprovider.EventRuleExists(j.ruleName) if err != nil { eventManagerLog(logger.LevelError, "unable to load rule with name %q", j.ruleName) return diff --git a/internal/common/eventmanager_test.go b/internal/common/eventmanager_test.go index 4f66d16c..f00330b1 100644 --- a/internal/common/eventmanager_test.go +++ b/internal/common/eventmanager_test.go @@ -800,75 +800,6 @@ func TestEventManagerErrors(t *testing.T) { stopEventScheduler() } -func TestBuiltinRules(t *testing.T) { - startEventScheduler() - rule1 := util.GenerateUniqueID() - loadBuiltinRulesFn = func() []dataprovider.EventRule { - return []dataprovider.EventRule{ - { - Name: rule1, - Status: 1, - CreatedAt: util.GetTimeAsMsSinceEpoch(time.Now()), - UpdatedAt: util.GetTimeAsMsSinceEpoch(time.Now()), - Trigger: dataprovider.EventTriggerSchedule, - Conditions: dataprovider.EventConditions{ - Schedules: []dataprovider.Schedule{ - { - Hours: "0", - DayOfWeek: "*", - DayOfMonth: "*", - Month: "*", - }, - }, - }, - Actions: []dataprovider.EventAction{ - { - BaseEventAction: dataprovider.BaseEventAction{ - Name: "backup", - Type: dataprovider.ActionTypeBackup, - Options: dataprovider.BaseEventActionOptions{}, - }, - Order: 1, - Options: dataprovider.EventActionOptions{}, - }, - }, - }, - } - } - - eventManager.loadRules() - - eventManager.RLock() - assert.Len(t, eventManager.FsEvents, 0) - assert.Len(t, eventManager.ProviderEvents, 0) - assert.Len(t, eventManager.Schedules, 1) - eventManager.RUnlock() - - cronJob := eventCronJob{ - ruleName: rule1, - } - r, err := cronJob.getEventRule() - assert.NoError(t, err) - assert.Equal(t, rule1, r.Name) - assert.Len(t, r.Actions, 1) - assert.Equal(t, dataprovider.EventTriggerSchedule, r.Trigger) - - eventManager.RLock() - eventManager.Schedules = nil - eventManager.RUnlock() - - loadBuiltinRulesFn = nil - - eventManager.loadRules() - - eventManager.RLock() - assert.Len(t, eventManager.FsEvents, 0) - assert.Len(t, eventManager.ProviderEvents, 0) - assert.Len(t, eventManager.Schedules, 0) - eventManager.RUnlock() - stopEventScheduler() -} - func TestEventRuleActions(t *testing.T) { actionName := "test rule action" action := dataprovider.BaseEventAction{ diff --git a/internal/dataprovider/dataprovider.go b/internal/dataprovider/dataprovider.go index 30ec310b..bda89e99 100644 --- a/internal/dataprovider/dataprovider.go +++ b/internal/dataprovider/dataprovider.go @@ -236,20 +236,8 @@ var ( fnReloadRules FnReloadRules fnRemoveRule FnRemoveRule fnHandleRuleForProviderEvent FnHandleRuleForProviderEvent - fnCanSetHomeDir func() bool - fnPreUserValidation func(u *User) - fnPreFolderValidation func(f *vfs.BaseVirtualFolder) - fnPreGroupValidation func(g *Group) ) -// CanSetHomeDir returns true if the home directory can be changed -func CanSetHomeDir() bool { - if fnCanSetHomeDir != nil { - return fnCanSetHomeDir() - } - return true -} - func initSQLTables() { sqlTableUsers = "users" sqlTableFolders = "folders" @@ -3334,9 +3322,6 @@ func createUserPasswordHash(user *User) error { // FIXME: this should be defined as Folder struct method func ValidateFolder(folder *vfs.BaseVirtualFolder) error { folder.FsConfig.SetEmptySecretsIfNil() - if fnPreFolderValidation != nil { - fnPreFolderValidation(folder) - } if folder.Name == "" { return util.NewI18nError(util.NewValidationError("folder name is mandatory"), util.I18nErrorNameRequired) } @@ -3369,9 +3354,6 @@ func ValidateUser(user *User) error { user.OIDCCustomFields = nil user.HasPassword = false user.SetEmptySecretsIfNil() - if fnPreUserValidation != nil { - fnPreUserValidation(user) - } buildUserHomeDir(user) if err := validateBaseParams(user); err != nil { return err diff --git a/internal/dataprovider/group.go b/internal/dataprovider/group.go index 00cd061e..8577efda 100644 --- a/internal/dataprovider/group.go +++ b/internal/dataprovider/group.go @@ -134,9 +134,6 @@ func (g *Group) hasRedactedSecret() bool { func (g *Group) validate() error { g.SetEmptySecretsIfNil() - if fnPreGroupValidation != nil { - fnPreGroupValidation(g) - } if g.Name == "" { return util.NewI18nError(util.NewValidationError("name is mandatory"), util.I18nErrorNameRequired) } diff --git a/internal/dataprovider/user.go b/internal/dataprovider/user.go index 707ecd83..cf3d5b87 100644 --- a/internal/dataprovider/user.go +++ b/internal/dataprovider/user.go @@ -157,9 +157,6 @@ func (u *User) GetFilesystem(connectionID string) (fs vfs.Fs, err error) { } func (u *User) getRootFs(connectionID string) (fs vfs.Fs, err error) { - if vfs.IsFsDisabled(u.FsConfig.Provider) { - return nil, fmt.Errorf("filesystem provider %d is disabled", u.FsConfig.Provider) - } switch u.FsConfig.Provider { case sdk.S3FilesystemProvider: return vfs.NewS3Fs(connectionID, u.GetHomeDir(), "", u.FsConfig.S3Config) diff --git a/internal/httpd/webadmin.go b/internal/httpd/webadmin.go index 7feff43b..83fb964e 100644 --- a/internal/httpd/webadmin.go +++ b/internal/httpd/webadmin.go @@ -168,7 +168,6 @@ type fsWrapper struct { IsHidden bool HasUsersBaseDir bool DirPath string - CanSetHomeDir bool } type userPage struct { @@ -515,7 +514,6 @@ func loadAdminTemplates(templatesPath string) { fsBaseTpl := template.New("fsBaseTemplate").Funcs(template.FuncMap{ "HumanizeBytes": util.ByteCountSI, - "IsFsDisabled": vfs.IsFsDisabled, }) usersTmpl := util.LoadTemplate(nil, usersPaths...) userTmpl := util.LoadTemplate(fsBaseTpl, userPaths...) @@ -971,7 +969,6 @@ func (s *httpdServer) renderUserPage(w http.ResponseWriter, r *http.Request, use IsHidden: basePage.LoggedUser.Filters.Preferences.HideFilesystem(), HasUsersBaseDir: dataprovider.HasUsersBaseDir(), DirPath: user.HomeDir, - CanSetHomeDir: dataprovider.CanSetHomeDir(), }, } renderAdminTemplate(w, templateUser, data) @@ -1057,7 +1054,6 @@ func (s *httpdServer) renderGroupPage(w http.ResponseWriter, r *http.Request, gr IsGroupPage: true, HasUsersBaseDir: false, DirPath: group.UserSettings.HomeDir, - CanSetHomeDir: dataprovider.CanSetHomeDir(), }, } renderAdminTemplate(w, templateGroup, data) @@ -1161,7 +1157,6 @@ func (s *httpdServer) renderFolderPage(w http.ResponseWriter, r *http.Request, f IsGroupPage: false, HasUsersBaseDir: false, DirPath: folder.MappedPath, - CanSetHomeDir: dataprovider.CanSetHomeDir(), }, } renderAdminTemplate(w, templateFolder, data) diff --git a/internal/vfs/filesystem.go b/internal/vfs/filesystem.go index 3d871c51..59ce47dd 100644 --- a/internal/vfs/filesystem.go +++ b/internal/vfs/filesystem.go @@ -16,7 +16,6 @@ package vfs import ( "os" - "slices" "github.com/sftpgo/sdk" @@ -24,11 +23,6 @@ import ( "github.com/drakkan/sftpgo/v2/internal/util" ) -var ( - disabledFilesystemProviders []sdk.FilesystemProvider - loadDisabledProvidersFn func() -) - // Filesystem defines filesystem details type Filesystem struct { RedactedSecret string `json:"-"` @@ -412,11 +406,3 @@ 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) -} diff --git a/internal/vfs/folder.go b/internal/vfs/folder.go index 4b6169ee..b85d82ff 100644 --- a/internal/vfs/folder.go +++ b/internal/vfs/folder.go @@ -140,9 +140,6 @@ 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) diff --git a/templates/webadmin/fsconfig.html b/templates/webadmin/fsconfig.html index ff909929..479084b6 100644 --- a/templates/webadmin/fsconfig.html +++ b/templates/webadmin/fsconfig.html @@ -24,17 +24,17 @@ explicit grant from the SFTPGo Team (support@sftpgo.com).