9 "github.com/Sirupsen/logrus"
10 "github.com/codegangsta/cli"
11 common "github.com/iotbzh/xds-common/golib"
12 "github.com/iotbzh/xds-server/lib/xsapiv1"
15 // Config parameters (json format) of /config command
17 // Public APIConfig fields
20 // Private (un-exported fields in REST GET /config route)
21 Options Options `json:"-"`
22 FileConf FileConfig `json:"-"`
23 Log *logrus.Logger `json:"-"`
24 LogVerboseOut io.Writer `json:"-"`
27 // Options set at the command line
35 // Config default values
37 DefaultAPIVersion = "1"
39 DefaultShareDir = "${HOME}/.xds-server/projects"
40 DefaultSTHomeDir = "${HOME}/.xds-server/syncthing-config"
41 DefaultSdkRootDir = "/xdt/sdk"
44 // Init loads the configuration on start-up
45 func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
48 dfltShareDir := DefaultShareDir
49 dfltSTHomeDir := DefaultSTHomeDir
50 if resDir, err := common.ResolveEnvVar(DefaultShareDir); err == nil {
53 if resDir, err := common.ResolveEnvVar(DefaultSTHomeDir); err == nil {
54 dfltSTHomeDir = resDir
57 // Retrieve Server ID (or create one the first time)
58 uuid, err := ServerIDGet()
63 // Define default configuration
65 APIConfig: xsapiv1.APIConfig{
67 Version: cliCtx.App.Metadata["version"].(string),
68 APIVersion: DefaultAPIVersion,
69 VersionGitTag: cliCtx.App.Metadata["git-tag"].(string),
70 Builder: xsapiv1.BuilderConfig{},
71 SupportedSharing: map[string]bool{ /*FIXME USE folder.TypePathMap*/ "PathMap": true},
75 ConfigFile: cliCtx.GlobalString("config"),
76 LogLevel: cliCtx.GlobalString("log"),
77 LogFile: cliCtx.GlobalString("logfile"),
78 NoFolderConfig: cliCtx.GlobalBool("no-folderconfig"),
81 WebAppDir: "webapp/dist",
82 ShareRootDir: dfltShareDir,
83 SdkRootDir: DefaultSdkRootDir,
84 HTTPPort: DefaultPort,
85 SThgConf: &SyncThingConf{Home: dfltSTHomeDir},
91 c.Log.Infoln("Server UUID: ", uuid)
93 // config file settings overwrite default config
94 err = readGlobalConfig(&c, c.Options.ConfigFile)
99 // Update location of shared dir if needed
100 if !common.Exists(c.FileConf.ShareRootDir) {
101 if err := os.MkdirAll(c.FileConf.ShareRootDir, 0770); err != nil {
102 return nil, fmt.Errorf("No valid shared directory found: %v", err)
105 c.Log.Infoln("Share root directory: ", c.FileConf.ShareRootDir)
107 // Where Logs are redirected:
108 // default 'stdout' (logfile option default value)
109 // else use file (or filepath) set by --logfile option
110 // that may be overwritten by LogsDir field of config file
111 logF := c.Options.LogFile
112 logD := c.FileConf.LogsDir
113 if logF != "stdout" {
115 lf := filepath.Base(logF)
116 if lf == "" || lf == "." {
117 lf = "xds-server.log"
119 logF = filepath.Join(logD, lf)
121 logD = filepath.Dir(logF)
124 if logD == "" || logD == "." {
125 logD = "/tmp/xds/logs"
127 c.Options.LogFile = logF
128 c.FileConf.LogsDir = logD
130 if c.FileConf.LogsDir != "" && !common.Exists(c.FileConf.LogsDir) {
131 if err := os.MkdirAll(c.FileConf.LogsDir, 0770); err != nil {
132 return nil, fmt.Errorf("Cannot create logs dir: %v", err)
136 c.Log.Infoln("Logs file: ", c.Options.LogFile)
137 c.Log.Infoln("Logs directory: ", c.FileConf.LogsDir)