Initial main commit.
[src/xds/xds-server.git] / lib / syncthing / st.go
1 package st
2
3 import (
4         "encoding/json"
5
6         "strings"
7
8         "fmt"
9
10         "github.com/Sirupsen/logrus"
11         "github.com/iotbzh/xds-server/lib/common"
12         "github.com/syncthing/syncthing/lib/config"
13 )
14
15 // SyncThing .
16 type SyncThing struct {
17         BaseURL string
18         client  *common.HTTPClient
19         log     *logrus.Logger
20 }
21
22 // NewSyncThing creates a new instance of Syncthing
23 func NewSyncThing(url string, apikey string, log *logrus.Logger) *SyncThing {
24         cl, err := common.HTTPNewClient(url,
25                 common.HTTPClientConfig{
26                         URLPrefix:           "/rest",
27                         HeaderClientKeyName: "X-Syncthing-ID",
28                 })
29         if err != nil {
30                 msg := ": " + err.Error()
31                 if strings.Contains(err.Error(), "connection refused") {
32                         msg = fmt.Sprintf("(url: %s)", url)
33                 }
34                 log.Debugf("ERROR: cannot connect to Syncthing %s", msg)
35                 return nil
36         }
37
38         s := SyncThing{
39                 BaseURL: url,
40                 client:  cl,
41                 log:     log,
42         }
43
44         return &s
45 }
46
47 // IDGet returns the Syncthing ID of Syncthing instance running locally
48 func (s *SyncThing) IDGet() (string, error) {
49         var data []byte
50         if err := s.client.HTTPGet("system/status", &data); err != nil {
51                 return "", err
52         }
53         status := make(map[string]interface{})
54         json.Unmarshal(data, &status)
55         return status["myID"].(string), nil
56 }
57
58 // ConfigGet returns the current Syncthing configuration
59 func (s *SyncThing) ConfigGet() (config.Configuration, error) {
60         var data []byte
61         config := config.Configuration{}
62         if err := s.client.HTTPGet("system/config", &data); err != nil {
63                 return config, err
64         }
65         err := json.Unmarshal(data, &config)
66         return config, err
67 }
68
69 // ConfigSet set Syncthing configuration
70 func (s *SyncThing) ConfigSet(cfg config.Configuration) error {
71         body, err := json.Marshal(cfg)
72         if err != nil {
73                 return err
74         }
75         return s.client.HTTPPost("system/config", string(body))
76 }