Standardized XDS config file name and location.
[src/xds/xds-server.git] / lib / xdsconfig / config.go
index f3cba4a..59cf394 100644 (file)
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2017 "IoT.bzh"
+ * Author Sebastien Douheret <sebastien@iot.bzh>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package xdsconfig
 
 import (
@@ -9,14 +26,13 @@ import (
        "github.com/Sirupsen/logrus"
        "github.com/codegangsta/cli"
        common "github.com/iotbzh/xds-common/golib"
+       "github.com/iotbzh/xds-server/lib/xsapiv1"
 )
 
 // Config parameters (json format) of /config command
 type Config struct {
-       Version       string        `json:"version"`
-       APIVersion    string        `json:"apiVersion"`
-       VersionGitTag string        `json:"gitTag"`
-       Builder       BuilderConfig `json:"builder"`
+       // Public APIConfig fields
+       xsapiv1.APIConfig
 
        // Private (un-exported fields in REST GET /config route)
        Options       Options        `json:"-"`
@@ -37,7 +53,8 @@ type Options struct {
 const (
        DefaultAPIVersion = "1"
        DefaultPort       = "8000"
-       DefaultShareDir   = "${HOME}/.xds-server/projects"
+       DefaultShareDir   = "${HOME}/.xds/server/projects"
+       DefaultSTHomeDir  = "${HOME}/.xds/server/syncthing-config"
        DefaultSdkRootDir = "/xdt/sdk"
 )
 
@@ -45,12 +62,31 @@ const (
 func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
        var err error
 
+       dfltShareDir := DefaultShareDir
+       dfltSTHomeDir := DefaultSTHomeDir
+       if resDir, err := common.ResolveEnvVar(DefaultShareDir); err == nil {
+               dfltShareDir = resDir
+       }
+       if resDir, err := common.ResolveEnvVar(DefaultSTHomeDir); err == nil {
+               dfltSTHomeDir = resDir
+       }
+
+       // Retrieve Server ID (or create one the first time)
+       uuid, err := ServerIDGet()
+       if err != nil {
+               return nil, err
+       }
+
        // Define default configuration
        c := Config{
-               Version:       cliCtx.App.Metadata["version"].(string),
-               APIVersion:    DefaultAPIVersion,
-               VersionGitTag: cliCtx.App.Metadata["git-tag"].(string),
-               Builder:       BuilderConfig{},
+               APIConfig: xsapiv1.APIConfig{
+                       ServerUID:        uuid,
+                       Version:          cliCtx.App.Metadata["version"].(string),
+                       APIVersion:       DefaultAPIVersion,
+                       VersionGitTag:    cliCtx.App.Metadata["git-tag"].(string),
+                       Builder:          xsapiv1.BuilderConfig{},
+                       SupportedSharing: map[string]bool{ /*FIXME USE folder.TypePathMap*/ "PathMap": true},
+               },
 
                Options: Options{
                        ConfigFile:     cliCtx.GlobalString("config"),
@@ -60,14 +96,17 @@ func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
                },
                FileConf: FileConfig{
                        WebAppDir:    "webapp/dist",
-                       ShareRootDir: DefaultShareDir,
+                       ShareRootDir: dfltShareDir,
                        SdkRootDir:   DefaultSdkRootDir,
                        HTTPPort:     DefaultPort,
+                       SThgConf:     &SyncThingConf{Home: dfltSTHomeDir},
                        LogsDir:      "",
                },
                Log: log,
        }
 
+       c.Log.Infoln("Server UUID:          ", uuid)
+
        // config file settings overwrite default config
        err = readGlobalConfig(&c, c.Options.ConfigFile)
        if err != nil {
@@ -110,8 +149,9 @@ func Init(cliCtx *cli.Context, log *logrus.Logger) (*Config, error) {
                        return nil, fmt.Errorf("Cannot create logs dir: %v", err)
                }
        }
-       c.Log.Infoln("Logs file:      ", c.Options.LogFile)
-       c.Log.Infoln("Logs directory: ", c.FileConf.LogsDir)
+
+       c.Log.Infoln("Logs file:            ", c.Options.LogFile)
+       c.Log.Infoln("Logs directory:       ", c.FileConf.LogsDir)
 
        return &c, nil
 }