operations.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. // Copyright (C) 2019 The Syncthing Authors.
  2. //
  3. // This Source Code Form is subject to the terms of the Mozilla Public
  4. // License, v. 2.0. If a copy of the MPL was not distributed with this file,
  5. // You can obtain one at https://mozilla.org/MPL/2.0/.
  6. package main
  7. import (
  8. "fmt"
  9. "github.com/urfave/cli"
  10. )
  11. var operationCommand = cli.Command{
  12. Name: "operations",
  13. HideHelp: true,
  14. Usage: "Operation command group",
  15. Subcommands: []cli.Command{
  16. {
  17. Name: "restart",
  18. Usage: "Restart syncthing",
  19. Action: expects(0, emptyPost("system/restart")),
  20. },
  21. {
  22. Name: "shutdown",
  23. Usage: "Shutdown syncthing",
  24. Action: expects(0, emptyPost("system/shutdown")),
  25. },
  26. {
  27. Name: "reset",
  28. Usage: "Reset syncthing deleting all folders and devices",
  29. Action: expects(0, emptyPost("system/reset")),
  30. },
  31. {
  32. Name: "upgrade",
  33. Usage: "Upgrade syncthing (if a newer version is available)",
  34. Action: expects(0, emptyPost("system/upgrade")),
  35. },
  36. {
  37. Name: "folder-override",
  38. Usage: "Override changes on folder (remote for sendonly, local for receiveonly)",
  39. ArgsUsage: "[folder id]",
  40. Action: expects(1, foldersOverride),
  41. },
  42. },
  43. }
  44. func foldersOverride(c *cli.Context) error {
  45. client := c.App.Metadata["client"].(*APIClient)
  46. cfg, err := getConfig(client)
  47. if err != nil {
  48. return err
  49. }
  50. rid := c.Args()[0]
  51. for _, folder := range cfg.Folders {
  52. if folder.ID == rid {
  53. response, err := client.Post("db/override", "")
  54. if err != nil {
  55. return err
  56. }
  57. if response.StatusCode != 200 {
  58. errStr := fmt.Sprint("Failed to override changes\nStatus code: ", response.StatusCode)
  59. bytes, err := responseToBArray(response)
  60. if err != nil {
  61. return err
  62. }
  63. body := string(bytes)
  64. if body != "" {
  65. errStr += "\nBody: " + body
  66. }
  67. return fmt.Errorf(errStr)
  68. }
  69. return nil
  70. }
  71. }
  72. return fmt.Errorf("Folder " + rid + " not found")
  73. }