fix: skip dotfiles and directories in plugin loading (#811) (#812)

* fix: skip dotfiles and directories in plugin loading (#811)

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>

* fixup! fix: skip dotfiles and directories in plugin loading (#811)

---------

Signed-off-by: eternal-flame-AD <yume@yumechi.jp>
This commit is contained in:
饺子w (Yumechi) 2025-07-09 19:05:40 +00:00 committed by GitHub
parent c1cb2e855a
commit bfcd1cb037
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 31 additions and 4 deletions

View File

@ -226,19 +226,28 @@ func (m *Manager) loadPlugins(directory string) error {
return fmt.Errorf("error while reading directory %s", err) return fmt.Errorf("error while reading directory %s", err)
} }
for _, f := range pluginFiles { for _, f := range pluginFiles {
pluginPath := filepath.Join(directory, "./", f.Name()) if f.IsDir() {
continue
}
name := f.Name()
if strings.HasPrefix(name, ".") {
continue
}
pluginPath := filepath.Join(directory, "./", name)
fmt.Println("Loading plugin", pluginPath) fmt.Println("Loading plugin", pluginPath)
pRaw, err := plugin.Open(pluginPath) pRaw, err := plugin.Open(pluginPath)
if err != nil { if err != nil {
return pluginFileLoadError{f.Name(), err} return pluginFileLoadError{name, err}
} }
compatPlugin, err := compat.Wrap(pRaw) compatPlugin, err := compat.Wrap(pRaw)
if err != nil { if err != nil {
return pluginFileLoadError{f.Name(), err} return pluginFileLoadError{name, err}
} }
if err := m.LoadPlugin(compatPlugin); err != nil { if err := m.LoadPlugin(compatPlugin); err != nil {
return pluginFileLoadError{f.Name(), err} return pluginFileLoadError{name, err}
} }
} }
return nil return nil

View File

@ -147,6 +147,24 @@ func (s *ManagerSuite) TestInitializePlugin_noOpIfEmpty() {
assert.Nil(s.T(), s.manager.loadPlugins("")) assert.Nil(s.T(), s.manager.loadPlugins(""))
} }
func (s *ManagerSuite) TestInitializePlugin_noOpIfDotFile() {
tmpDir := test.NewTmpDir("gotify_testinitializeplugin_dotfile")
defer tmpDir.Clean()
f, err := os.Create(tmpDir.Path(".test"))
assert.NoError(s.T(), err)
_, err = f.WriteString("dummy")
assert.NoError(s.T(), err)
assert.NoError(s.T(), f.Close())
assert.Nil(s.T(), s.manager.loadPlugins(tmpDir.Path()))
}
func (s *ManagerSuite) TestInitializePlugin_noOpIfSubDir() {
tmpDir := test.NewTmpDir("gotify_testinitializeplugin_subdir")
defer tmpDir.Clean()
os.Mkdir(tmpDir.Path("subdir"), 0o755)
assert.Nil(s.T(), s.manager.loadPlugins(tmpDir.Path()))
}
func (s *ManagerSuite) TestInitializePlugin_directoryInvalid_expectError() { func (s *ManagerSuite) TestInitializePlugin_directoryInvalid_expectError() {
assert.Error(s.T(), s.manager.loadPlugins("<<")) assert.Error(s.T(), s.manager.loadPlugins("<<"))
} }