Use autogenerated Synchting apikey.
[src/xds/xds-server.git] / lib / syncthing / st.go
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
 }