Use autogenerated Synchting apikey.
authorSebastien Douheret <sebastien.douheret@iot.bzh>
Wed, 17 May 2017 14:08:03 +0000 (16:08 +0200)
committerSebastien Douheret <sebastien.douheret@iot.bzh>
Wed, 17 May 2017 15:11:42 +0000 (17:11 +0200)
Except if gui-apikey is set in config.json file.

Signed-off-by: Sebastien Douheret <sebastien.douheret@iot.bzh>
README.md
lib/syncthing/st.go
lib/xdsconfig/fileconfig.go

index 7b60cdc..b910e06 100644 (file)
--- a/README.md
+++ b/README.md
@@ -69,7 +69,8 @@ Supported fields in configuration file are:
     "syncthing": {
         "binDir": "syncthing binaries directory (default: executable directory)",
         "home": "syncthing home directory (usually .../syncthing-config)",
-        "gui-address": "syncthing gui url (default http://localhost:8384)"
+        "gui-address": "syncthing gui url (default http://localhost:8384)",
+        "gui-apikey": "syncthing api-key to use (default auto-generated)"
     }
 }
 ```
index 9452fbd..841901d 100644 (file)
@@ -15,6 +15,10 @@ import (
 
        "io"
 
+       "io/ioutil"
+
+       "regexp"
+
        "github.com/Sirupsen/logrus"
        "github.com/iotbzh/xds-server/lib/common"
        "github.com/iotbzh/xds-server/lib/xdsconfig"
@@ -172,27 +176,44 @@ func (s *SyncThing) Start() (*exec.Cmd, error) {
 
        s.STCmd, err = s.startProc("syncthing", args, env, &s.exitSTChan)
 
+       // Use autogenerated apikey if not set by config.json
+       if s.APIKey == "" {
+               if fd, err := os.Open(filepath.Join(s.Home, "config.xml")); err == nil {
+                       defer fd.Close()
+                       if b, err := ioutil.ReadAll(fd); err == nil {
+                               re := regexp.MustCompile("<apikey>(.*)</apikey>")
+                               key := re.FindStringSubmatch(string(b))
+                               if len(key) >= 1 {
+                                       s.APIKey = key[1]
+                               }
+                       }
+               }
+       }
+
        return s.STCmd, err
 }
 
 // StartInotify Starts syncthing-inotify process
 func (s *SyncThing) StartInotify() (*exec.Cmd, error) {
        var err error
+       exeName := "syncthing-inotify"
 
-       s.log.Infof(" STI home=%s", s.Home)
        s.log.Infof(" STI  url=%s", s.BaseURL)
 
        args := []string{
-               "--home=" + s.Home,
                "-target=" + s.BaseURL,
        }
+       if s.APIKey != "" {
+               args = append(args, "-api="+s.APIKey)
+               s.log.Infof("%s uses apikey=%s", exeName, s.APIKey)
+       }
        if s.log.Level == logrus.DebugLevel {
                args = append(args, "-verbosity=4")
        }
 
        env := []string{}
 
-       s.STICmd, err = s.startProc("syncthing-inotify", args, env, &s.exitSTIChan)
+       s.STICmd, err = s.startProc(exeName, args, env, &s.exitSTIChan)
 
        return s.STICmd, err
 }
index 776eb78..d39cae0 100644 (file)
@@ -23,7 +23,7 @@ type SyncThingConf struct {
 type FileConfig struct {
        WebAppDir    string         `json:"webAppDir"`
        ShareRootDir string         `json:"shareRootDir"`
-       SdkRootDir   string        `json:"sdkRootDir"`
+       SdkRootDir   string         `json:"sdkRootDir"`
        HTTPPort     string         `json:"httpPort"`
        SThgConf     *SyncThingConf `json:"syncthing"`
        LogsDir      string         `json:"logsDir"`
@@ -86,7 +86,8 @@ func updateConfigFromFile(c *Config, confFile string) error {
                &fCfg.ShareRootDir,
                &fCfg.SdkRootDir,
                &fCfg.LogsDir,
-               &fCfg.SThgConf.Home} {
+               &fCfg.SThgConf.Home,
+               &fCfg.SThgConf.BinDir} {
 
                rep, err := resolveEnvVar(*field)
                if err != nil {
@@ -94,7 +95,7 @@ func updateConfigFromFile(c *Config, confFile string) error {
                }
                *field = path.Clean(rep)
        }
-       
+
        // Config file settings overwrite default config
 
        if fCfg.WebAppDir != "" {