package utils
import (
"fmt"
"path/filepath"
"strings"
)
type Config struct {
Features map[string]bool
ReleaseBinary bool
SandboxfsBinary string
UnprivilegedUser *UnixUser
}
var globalConfig *Config
func SetConfigFromFlags(rawFeatures string, releaseBinary bool, rawSandboxfsBinary string, unprivilegedUserName string) error {
if globalConfig != nil {
panic("SetConfigFromFlags can only be called once")
}
features := make(map[string]bool)
for _, feature := range strings.Split(rawFeatures, " ") {
features[feature] = true
}
sandboxfsBinary, err := filepath.Abs(rawSandboxfsBinary)
if err != nil {
return fmt.Errorf("cannot make %s absolute: %v", rawSandboxfsBinary, err)
}
var unprivilegedUser *UnixUser
if unprivilegedUserName != "" {
unprivilegedUser, err = LookupUser(unprivilegedUserName)
if err != nil {
return fmt.Errorf("invalid unprivileged user setting %s: %v", unprivilegedUserName, err)
}
}
globalConfig = &Config{
Features: features,
ReleaseBinary: releaseBinary,
SandboxfsBinary: sandboxfsBinary,
UnprivilegedUser: unprivilegedUser,
}
return nil
}
func GetConfig() *Config {
if globalConfig == nil {
panic("GetConfig should have been called from main but was not yet")
}
return globalConfig
}