diff --git a/cmd/stcli/cmd_errors.go b/cmd/stcli/cmd_errors.go index 1d2c59e6..32c094f6 100644 --- a/cmd/stcli/cmd_errors.go +++ b/cmd/stcli/cmd_errors.go @@ -30,7 +30,7 @@ func init() { Name: "clear", Usage: "Clear pending errors", Requires: &cli.Requires{}, - Action: wrappedHttpPost("system/error/clear"), + Action: wrappedHTTPPost("system/error/clear"), }, }, }) diff --git a/cmd/stcli/cmd_folders.go b/cmd/stcli/cmd_folders.go index 710cd657..7a696f99 100644 --- a/cmd/stcli/cmd_folders.go +++ b/cmd/stcli/cmd_folders.go @@ -102,7 +102,7 @@ func foldersList(c *cli.Context) { } fmt.Fprintln(writer, "ID:\t", folder.ID, "\t") fmt.Fprintln(writer, "Path:\t", folder.RawPath, "\t(directory)") - fmt.Fprintln(writer, "Folder master:\t", folder.ReadOnly, "\t(master)") + fmt.Fprintln(writer, "Folder type:\t", folder.Type, "\t(type)") fmt.Fprintln(writer, "Ignore permissions:\t", folder.IgnorePerms, "\t(permissions)") fmt.Fprintln(writer, "Rescan interval in seconds:\t", folder.RescanIntervalS, "\t(rescan)") @@ -112,9 +112,6 @@ func foldersList(c *cli.Context) { fmt.Fprintf(writer, "Versioning %s:\t %s \t(versioning-%s)\n", key, value, key) } } - if folder.Invalid != "" { - fmt.Fprintln(writer, "Invalid:\t", folder.Invalid, "\t") - } first = false } writer.Flush() @@ -151,7 +148,7 @@ func foldersOverride(c *cli.Context) { cfg := getConfig(c) rid := c.Args()[0] for _, folder := range cfg.Folders { - if folder.ID == rid && folder.ReadOnly { + if folder.ID == rid && folder.Type == config.FolderTypeReadOnly { response := httpPost(c, "db/override", "") if response.StatusCode != 200 { err := fmt.Sprint("Failed to override changes\nStatus code: ", response.StatusCode) @@ -187,8 +184,8 @@ func foldersGet(c *cli.Context) { switch arg { case "directory": fmt.Println(folder.RawPath) - case "master": - fmt.Println(folder.ReadOnly) + case "type": + fmt.Println(folder.Type) case "permissions": fmt.Println(folder.IgnorePerms) case "rescan": @@ -198,7 +195,7 @@ func foldersGet(c *cli.Context) { fmt.Println(folder.Versioning.Type) } default: - die("Invalid property: " + c.Args()[1] + "\nAvailable properties: directory, master, permissions, versioning, versioning-") + die("Invalid property: " + c.Args()[1] + "\nAvailable properties: directory, type, permissions, versioning, versioning-") } return } @@ -222,8 +219,12 @@ func foldersSet(c *cli.Context) { switch arg { case "directory": cfg.Folders[i].RawPath = val - case "master": - cfg.Folders[i].ReadOnly = parseBool(val) + case "type": + var t config.FolderType + if err := t.UnmarshalText([]byte(val)); err != nil { + die("Invalid folder type: " + err.Error()) + } + cfg.Folders[i].Type = t case "permissions": cfg.Folders[i].IgnorePerms = parseBool(val) case "rescan": diff --git a/cmd/stcli/cmd_general.go b/cmd/stcli/cmd_general.go index b81fba25..80ad0482 100644 --- a/cmd/stcli/cmd_general.go +++ b/cmd/stcli/cmd_general.go @@ -25,25 +25,25 @@ func init() { Name: "restart", Usage: "Restart syncthing", Requires: &cli.Requires{}, - Action: wrappedHttpPost("system/restart"), + Action: wrappedHTTPPost("system/restart"), }, { Name: "shutdown", Usage: "Shutdown syncthing", Requires: &cli.Requires{}, - Action: wrappedHttpPost("system/shutdown"), + Action: wrappedHTTPPost("system/shutdown"), }, { Name: "reset", Usage: "Reset syncthing deleting all folders and devices", Requires: &cli.Requires{}, - Action: wrappedHttpPost("system/reset"), + Action: wrappedHTTPPost("system/reset"), }, { Name: "upgrade", Usage: "Upgrade syncthing (if a newer version is available)", Requires: &cli.Requires{}, - Action: wrappedHttpPost("system/upgrade"), + Action: wrappedHTTPPost("system/upgrade"), }, { Name: "version", @@ -72,5 +72,5 @@ func generalVersion(c *cli.Context) { response := httpGet(c, "system/version") version := make(map[string]interface{}) json.Unmarshal(responseToBArray(response), &version) - prettyPrintJson(version) + prettyPrintJSON(version) } diff --git a/cmd/stcli/cmd_gui.go b/cmd/stcli/cmd_gui.go index e4149be9..aaf841ca 100644 --- a/cmd/stcli/cmd_gui.go +++ b/cmd/stcli/cmd_gui.go @@ -45,8 +45,8 @@ func guiDump(c *cli.Context) { cfg := getConfig(c).GUI writer := newTableWriter() fmt.Fprintln(writer, "Enabled:\t", cfg.Enabled, "\t(enabled)") - fmt.Fprintln(writer, "Use HTTPS:\t", cfg.UseTLS, "\t(tls)") - fmt.Fprintln(writer, "Listen Addresses:\t", cfg.Address, "\t(address)") + fmt.Fprintln(writer, "Use HTTPS:\t", cfg.UseTLS(), "\t(tls)") + fmt.Fprintln(writer, "Listen Addresses:\t", cfg.Address(), "\t(address)") if cfg.User != "" { fmt.Fprintln(writer, "Authentication User:\t", cfg.User, "\t(username)") fmt.Fprintln(writer, "Authentication Password:\t", cfg.Password, "\t(password)") @@ -64,9 +64,9 @@ func guiGet(c *cli.Context) { case "enabled": fmt.Println(cfg.Enabled) case "tls": - fmt.Println(cfg.UseTLS) + fmt.Println(cfg.UseTLS()) case "address": - fmt.Println(cfg.Address) + fmt.Println(cfg.Address()) case "user": if cfg.User != "" { fmt.Println(cfg.User) @@ -92,10 +92,10 @@ func guiSet(c *cli.Context) { case "enabled": cfg.GUI.Enabled = parseBool(val) case "tls": - cfg.GUI.UseTLS = parseBool(val) + cfg.GUI.RawUseTLS = parseBool(val) case "address": validAddress(val) - cfg.GUI.Address = val + cfg.GUI.RawAddress = val case "user": cfg.GUI.User = val case "password": diff --git a/cmd/stcli/cmd_options.go b/cmd/stcli/cmd_options.go index 03ef4816..b0eb14c0 100644 --- a/cmd/stcli/cmd_options.go +++ b/cmd/stcli/cmd_options.go @@ -39,7 +39,7 @@ func optionsDump(c *cli.Context) { cfg := getConfig(c).Options writer := newTableWriter() - fmt.Fprintln(writer, "Sync protocol listen addresses:\t", strings.Join(cfg.ListenAddress, " "), "\t(address)") + fmt.Fprintln(writer, "Sync protocol listen addresses:\t", strings.Join(cfg.ListenAddresses, " "), "\t(addresses)") fmt.Fprintln(writer, "Global discovery enabled:\t", cfg.GlobalAnnEnabled, "\t(globalannenabled)") fmt.Fprintln(writer, "Global discovery servers:\t", strings.Join(cfg.GlobalAnnServers, " "), "\t(globalannserver)") @@ -50,9 +50,9 @@ func optionsDump(c *cli.Context) { fmt.Fprintln(writer, "Incoming rate limit in KiB/s:\t", cfg.MaxRecvKbps, "\t(maxrecv)") fmt.Fprintln(writer, "Reconnect interval in seconds:\t", cfg.ReconnectIntervalS, "\t(reconnect)") fmt.Fprintln(writer, "Start browser:\t", cfg.StartBrowser, "\t(browser)") - fmt.Fprintln(writer, "Enable UPnP:\t", cfg.UPnPEnabled, "\t(upnp)") - fmt.Fprintln(writer, "UPnP Lease in minutes:\t", cfg.UPnPLeaseM, "\t(upnplease)") - fmt.Fprintln(writer, "UPnP Renewal period in minutes:\t", cfg.UPnPRenewalM, "\t(upnprenew)") + fmt.Fprintln(writer, "Enable UPnP:\t", cfg.NATEnabled, "\t(nat)") + fmt.Fprintln(writer, "UPnP Lease in minutes:\t", cfg.NATLeaseM, "\t(natlease)") + fmt.Fprintln(writer, "UPnP Renewal period in minutes:\t", cfg.NATRenewalM, "\t(natrenew)") fmt.Fprintln(writer, "Restart on Wake Up:\t", cfg.RestartOnWakeup, "\t(wake)") reporting := "unrecognized value" @@ -74,7 +74,7 @@ func optionsGet(c *cli.Context) { arg := c.Args()[0] switch strings.ToLower(arg) { case "address": - fmt.Println(strings.Join(cfg.ListenAddress, "\n")) + fmt.Println(strings.Join(cfg.ListenAddresses, "\n")) case "globalannenabled": fmt.Println(cfg.GlobalAnnEnabled) case "globalannservers": @@ -91,12 +91,12 @@ func optionsGet(c *cli.Context) { fmt.Println(cfg.ReconnectIntervalS) case "browser": fmt.Println(cfg.StartBrowser) - case "upnp": - fmt.Println(cfg.UPnPEnabled) - case "upnplease": - fmt.Println(cfg.UPnPLeaseM) - case "upnprenew": - fmt.Println(cfg.UPnPRenewalM) + case "nat": + fmt.Println(cfg.NATEnabled) + case "natlease": + fmt.Println(cfg.NATLeaseM) + case "natrenew": + fmt.Println(cfg.NATRenewalM) case "reporting": switch cfg.URAccepted { case -1: @@ -124,7 +124,7 @@ func optionsSet(c *cli.Context) { for _, item := range c.Args().Tail() { validAddress(item) } - config.Options.ListenAddress = c.Args().Tail() + config.Options.ListenAddresses = c.Args().Tail() case "globalannenabled": config.Options.GlobalAnnEnabled = parseBool(val) case "globalannserver": @@ -144,12 +144,12 @@ func optionsSet(c *cli.Context) { config.Options.ReconnectIntervalS = parseUint(val) case "browser": config.Options.StartBrowser = parseBool(val) - case "upnp": - config.Options.UPnPEnabled = parseBool(val) - case "upnplease": - config.Options.UPnPLeaseM = parseUint(val) - case "upnprenew": - config.Options.UPnPRenewalM = parseUint(val) + case "nat": + config.Options.NATEnabled = parseBool(val) + case "natlease": + config.Options.NATLeaseM = parseUint(val) + case "natrenew": + config.Options.NATRenewalM = parseUint(val) case "reporting": switch strings.ToLower(val) { case "u", "undecided", "unset": diff --git a/cmd/stcli/cmd_report.go b/cmd/stcli/cmd_report.go index 87d8e382..472e3d25 100644 --- a/cmd/stcli/cmd_report.go +++ b/cmd/stcli/cmd_report.go @@ -39,7 +39,7 @@ func reportSystem(c *cli.Context) { response := httpGet(c, "system/status") data := make(map[string]interface{}) json.Unmarshal(responseToBArray(response), &data) - prettyPrintJson(data) + prettyPrintJSON(data) } func reportConnections(c *cli.Context) { @@ -53,12 +53,12 @@ func reportConnections(c *cli.Context) { continue } value["Device ID"] = key - prettyPrintJson(value) + prettyPrintJSON(value) fmt.Println() } if overall != nil { fmt.Println("=== Overall statistics ===") - prettyPrintJson(overall) + prettyPrintJSON(overall) } } @@ -66,5 +66,5 @@ func reportUsage(c *cli.Context) { response := httpGet(c, "svc/report") report := make(map[string]interface{}) json.Unmarshal(responseToBArray(response), &report) - prettyPrintJson(report) + prettyPrintJSON(report) } diff --git a/cmd/stcli/labels.go b/cmd/stcli/labels.go index 13702686..67dd8e67 100644 --- a/cmd/stcli/labels.go +++ b/cmd/stcli/labels.go @@ -1,6 +1,6 @@ package main -var jsonAttributeLabels map[string]string = map[string]string{ +var jsonAttributeLabels = map[string]string{ "folderMaxMiB": "Largest folder size in MiB", "folderMaxFiles": "Largest folder file count", "longVersion": "Long version", diff --git a/cmd/stcli/utils.go b/cmd/stcli/utils.go index 436a882e..f41e9db6 100644 --- a/cmd/stcli/utils.go +++ b/cmd/stcli/utils.go @@ -34,13 +34,13 @@ func die(vals ...interface{}) { } } -func wrappedHttpPost(url string) func(c *cli.Context) { +func wrappedHTTPPost(url string) func(c *cli.Context) { return func(c *cli.Context) { httpPost(c, url, "") } } -func prettyPrintJson(json map[string]interface{}) { +func prettyPrintJSON(json map[string]interface{}) { writer := newTableWriter() remap := make(map[string]interface{}) for k, v := range json { @@ -51,12 +51,12 @@ func prettyPrintJson(json map[string]interface{}) { remap[key] = v } - json_keys := make([]string, 0, len(remap)) + jsonKeys := make([]string, 0, len(remap)) for key := range remap { - json_keys = append(json_keys, key) + jsonKeys = append(jsonKeys, key) } - sort.Strings(json_keys) - for _, k := range json_keys { + sort.Strings(jsonKeys) + for _, k := range jsonKeys { value := "" rvalue := remap[k] switch rvalue.(type) {