| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 | 
							- // Copyright (C) 2014 Audrius Butkevičius
 
- package main
 
- import (
 
- 	"fmt"
 
- 	"strings"
 
- 	"github.com/AudriusButkevicius/cli"
 
- )
 
- func init() {
 
- 	cliCommands = append(cliCommands, cli.Command{
 
- 		Name:     "options",
 
- 		HideHelp: true,
 
- 		Usage:    "Options command group",
 
- 		Subcommands: []cli.Command{
 
- 			{
 
- 				Name:     "dump",
 
- 				Usage:    "Show all Syncthing option settings",
 
- 				Requires: &cli.Requires{},
 
- 				Action:   optionsDump,
 
- 			},
 
- 			{
 
- 				Name:     "get",
 
- 				Usage:    "Get a Syncthing option setting",
 
- 				Requires: &cli.Requires{"setting"},
 
- 				Action:   optionsGet,
 
- 			},
 
- 			{
 
- 				Name:     "set",
 
- 				Usage:    "Set a Syncthing option setting",
 
- 				Requires: &cli.Requires{"setting", "value..."},
 
- 				Action:   optionsSet,
 
- 			},
 
- 		},
 
- 	})
 
- }
 
- func optionsDump(c *cli.Context) {
 
- 	cfg := getConfig(c).Options
 
- 	writer := newTableWriter()
 
- 	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)")
 
- 	fmt.Fprintln(writer, "Local discovery enabled:\t", cfg.LocalAnnEnabled, "\t(localannenabled)")
 
- 	fmt.Fprintln(writer, "Local discovery port:\t", cfg.LocalAnnPort, "\t(localannport)")
 
- 	fmt.Fprintln(writer, "Outgoing rate limit in KiB/s:\t", cfg.MaxSendKbps, "\t(maxsend)")
 
- 	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.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"
 
- 	switch cfg.URAccepted {
 
- 	case -1:
 
- 		reporting = "false"
 
- 	case 0:
 
- 		reporting = "undecided/false"
 
- 	case 1:
 
- 		reporting = "true"
 
- 	}
 
- 	fmt.Fprintln(writer, "Anonymous usage reporting:\t", reporting, "\t(reporting)")
 
- 	writer.Flush()
 
- }
 
- func optionsGet(c *cli.Context) {
 
- 	cfg := getConfig(c).Options
 
- 	arg := c.Args()[0]
 
- 	switch strings.ToLower(arg) {
 
- 	case "address":
 
- 		fmt.Println(strings.Join(cfg.ListenAddresses, "\n"))
 
- 	case "globalannenabled":
 
- 		fmt.Println(cfg.GlobalAnnEnabled)
 
- 	case "globalannservers":
 
- 		fmt.Println(strings.Join(cfg.GlobalAnnServers, "\n"))
 
- 	case "localannenabled":
 
- 		fmt.Println(cfg.LocalAnnEnabled)
 
- 	case "localannport":
 
- 		fmt.Println(cfg.LocalAnnPort)
 
- 	case "maxsend":
 
- 		fmt.Println(cfg.MaxSendKbps)
 
- 	case "maxrecv":
 
- 		fmt.Println(cfg.MaxRecvKbps)
 
- 	case "reconnect":
 
- 		fmt.Println(cfg.ReconnectIntervalS)
 
- 	case "browser":
 
- 		fmt.Println(cfg.StartBrowser)
 
- 	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:
 
- 			fmt.Println("false")
 
- 		case 0:
 
- 			fmt.Println("undecided/false")
 
- 		case 1:
 
- 			fmt.Println("true")
 
- 		default:
 
- 			fmt.Println("unknown")
 
- 		}
 
- 	case "wake":
 
- 		fmt.Println(cfg.RestartOnWakeup)
 
- 	default:
 
- 		die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
 
- 	}
 
- }
 
- func optionsSet(c *cli.Context) {
 
- 	config := getConfig(c)
 
- 	arg := c.Args()[0]
 
- 	val := c.Args()[1]
 
- 	switch strings.ToLower(arg) {
 
- 	case "address":
 
- 		for _, item := range c.Args().Tail() {
 
- 			validAddress(item)
 
- 		}
 
- 		config.Options.ListenAddresses = c.Args().Tail()
 
- 	case "globalannenabled":
 
- 		config.Options.GlobalAnnEnabled = parseBool(val)
 
- 	case "globalannserver":
 
- 		for _, item := range c.Args().Tail() {
 
- 			validAddress(item)
 
- 		}
 
- 		config.Options.GlobalAnnServers = c.Args().Tail()
 
- 	case "localannenabled":
 
- 		config.Options.LocalAnnEnabled = parseBool(val)
 
- 	case "localannport":
 
- 		config.Options.LocalAnnPort = parsePort(val)
 
- 	case "maxsend":
 
- 		config.Options.MaxSendKbps = parseUint(val)
 
- 	case "maxrecv":
 
- 		config.Options.MaxRecvKbps = parseUint(val)
 
- 	case "reconnect":
 
- 		config.Options.ReconnectIntervalS = parseUint(val)
 
- 	case "browser":
 
- 		config.Options.StartBrowser = parseBool(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":
 
- 			config.Options.URAccepted = 0
 
- 		default:
 
- 			boolvalue := parseBool(val)
 
- 			if boolvalue {
 
- 				config.Options.URAccepted = 1
 
- 			} else {
 
- 				config.Options.URAccepted = -1
 
- 			}
 
- 		}
 
- 	case "wake":
 
- 		config.Options.RestartOnWakeup = parseBool(val)
 
- 	default:
 
- 		die("Invalid setting: " + arg + "\nAvailable settings: address, globalannenabled, globalannserver, localannenabled, localannport, maxsend, maxrecv, reconnect, browser, upnp, upnplease, upnprenew, reporting, wake")
 
- 	}
 
- 	setConfig(c, config)
 
- }
 
 
  |