X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=lib%2Fxdsconfig%2Ffileconfig.go;h=90c1aad34c5fe5de41baa1d5b8b7d671c73cddc2;hb=0262f5bef6ff67e77b844a04733c57740fba9f00;hp=d39cae032e46e6fc73b93e380c6766aad96fc02c;hpb=51da3506a296b7d5d4185b17364f188292136888;p=src%2Fxds%2Fxds-server.git diff --git a/lib/xdsconfig/fileconfig.go b/lib/xdsconfig/fileconfig.go index d39cae0..90c1aad 100644 --- a/lib/xdsconfig/fileconfig.go +++ b/lib/xdsconfig/fileconfig.go @@ -2,22 +2,21 @@ package xdsconfig import ( "encoding/json" - "fmt" "os" "os/user" "path" "path/filepath" - "regexp" "strings" - "github.com/iotbzh/xds-server/lib/common" + common "github.com/iotbzh/xds-common/golib" ) type SyncThingConf struct { - BinDir string `json:"binDir"` - Home string `json:"home"` - GuiAddress string `json:"gui-address"` - GuiAPIKey string `json:"gui-apikey"` + BinDir string `json:"binDir"` + Home string `json:"home"` + GuiAddress string `json:"gui-address"` + GuiAPIKey string `json:"gui-apikey"` + RescanIntervalS int `json:"rescanIntervalS"` } type FileConfig struct { @@ -78,7 +77,6 @@ func updateConfigFromFile(c *Config, confFile string) error { if err := json.NewDecoder(fd).Decode(&fCfg); err != nil { return err } - c.FileConf = fCfg // Support environment variables (IOW ${MY_ENV_VAR} syntax) in config.json for _, field := range []*string{ @@ -89,55 +87,39 @@ func updateConfigFromFile(c *Config, confFile string) error { &fCfg.SThgConf.Home, &fCfg.SThgConf.BinDir} { - rep, err := resolveEnvVar(*field) - if err != nil { + var err error + if *field, err = common.ResolveEnvVar(*field); err != nil { return err } - *field = path.Clean(rep) } - // Config file settings overwrite default config - - if fCfg.WebAppDir != "" { - c.WebAppDir = strings.Trim(fCfg.WebAppDir, " ") + // Use config file settings else use default config + if fCfg.WebAppDir == "" { + fCfg.WebAppDir = c.FileConf.WebAppDir + } + if fCfg.ShareRootDir == "" { + fCfg.ShareRootDir = c.FileConf.ShareRootDir + } + if fCfg.SdkRootDir == "" { + fCfg.SdkRootDir = c.FileConf.SdkRootDir + } + if fCfg.HTTPPort == "" { + fCfg.HTTPPort = c.FileConf.HTTPPort } - // Is it a full path ? - if !strings.HasPrefix(c.WebAppDir, "/") && exePath != "" { + + // Resolve webapp dir (support relative or full path) + fCfg.WebAppDir = strings.Trim(fCfg.WebAppDir, " ") + if !strings.HasPrefix(fCfg.WebAppDir, "/") && exePath != "" { // Check first from current directory for _, rootD := range []string{cwd, exePath} { - ff := path.Join(rootD, c.WebAppDir, "index.html") + ff := path.Join(rootD, fCfg.WebAppDir, "index.html") if common.Exists(ff) { - c.WebAppDir = path.Join(rootD, c.WebAppDir) + fCfg.WebAppDir = path.Join(rootD, fCfg.WebAppDir) break } } } - if fCfg.ShareRootDir != "" { - c.ShareRootDir = fCfg.ShareRootDir - } - - if fCfg.HTTPPort != "" { - c.HTTPPort = fCfg.HTTPPort - } - + c.FileConf = fCfg return nil } - -// resolveEnvVar Resolved environment variable regarding the syntax ${MYVAR} -func resolveEnvVar(s string) (string, error) { - re := regexp.MustCompile("\\${(.*)}") - vars := re.FindAllStringSubmatch(s, -1) - res := s - for _, v := range vars { - val := os.Getenv(v[1]) - if val == "" { - return res, fmt.Errorf("ERROR: %s env variable not defined", v[1]) - } - - rer := regexp.MustCompile("\\${" + v[1] + "}") - res = rer.ReplaceAllString(res, val) - } - - return res, nil -}