mirror of
https://github.com/matt-dunleavy/plugin-manager.git
synced 2025-10-07 08:11:20 +08:00
43 lines
760 B
Go
43 lines
760 B
Go
package pluginmanager
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
type Sandbox interface {
|
|
Enable() error
|
|
Disable() error
|
|
VerifyPluginPath(path string) error
|
|
}
|
|
|
|
type DefaultSandbox struct {
|
|
pluginDir string
|
|
}
|
|
|
|
func NewDefaultSandbox(pluginDir string) *DefaultSandbox {
|
|
return &DefaultSandbox{
|
|
pluginDir: pluginDir,
|
|
}
|
|
}
|
|
|
|
func (s *DefaultSandbox) Enable() error {
|
|
return os.Chdir(s.pluginDir)
|
|
}
|
|
|
|
func (s *DefaultSandbox) Disable() error {
|
|
return nil
|
|
}
|
|
|
|
func (s *DefaultSandbox) VerifyPluginPath(path string) error {
|
|
absPath, err := filepath.Abs(path)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if !filepath.HasPrefix(absPath, s.pluginDir) {
|
|
return ErrPluginSandboxViolation
|
|
}
|
|
|
|
return nil
|
|
} |