Command line client for Write.as https://write.as/apps/cli
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
2.5 KiB

  1. package config
  2. import (
  3. "strings"
  4. "github.com/cloudfoundry/jibber_jabber"
  5. "github.com/writeas/writeas-cli/log"
  6. cli "gopkg.in/urfave/cli.v1"
  7. )
  8. // Application constants.
  9. const (
  10. writeasUserAgent = "writeas-cli v"
  11. wfUserAgent = "wf-cli v"
  12. // Defaults for posts on Write.as.
  13. DefaultFont = PostFontMono
  14. WriteasBaseURL = "https://write.as"
  15. DevBaseURL = "https://development.write.as"
  16. TorBaseURL = "http://writeas7pm7rcdqg.onion"
  17. torPort = 9150
  18. )
  19. func UserAgent(c *cli.Context) string {
  20. client := wfUserAgent
  21. if c.App.Name == "writeas" {
  22. client = writeasUserAgent
  23. }
  24. ua := c.String("user-agent")
  25. if ua == "" {
  26. return client + c.App.ExtraInfo()["version"]
  27. }
  28. return ua + " (" + client + c.App.ExtraInfo()["version"] + ")"
  29. }
  30. func IsTor(c *cli.Context) bool {
  31. return c.Bool("tor") || c.Bool("t")
  32. }
  33. func TorPort(c *cli.Context) int {
  34. if c.IsSet("tor-port") && c.Int("tor-port") != 0 {
  35. return c.Int("tor-port")
  36. }
  37. return torPort
  38. }
  39. func TorURL(c *cli.Context) string {
  40. flagHost := c.String("host")
  41. if flagHost != "" && strings.HasSuffix(flagHost, "onion") {
  42. return flagHost
  43. }
  44. cfg, _ := LoadConfig(c.App.ExtraInfo()["configDir"])
  45. if cfg != nil && cfg.Default.Host != "" && strings.HasSuffix(cfg.Default.Host, "onion") {
  46. return cfg.Default.Host
  47. }
  48. return TorBaseURL
  49. }
  50. func Language(c *cli.Context, auto bool) string {
  51. if l := c.String("lang"); l != "" {
  52. return l
  53. }
  54. if !auto {
  55. return ""
  56. }
  57. // Automatically detect language
  58. l, err := jibber_jabber.DetectLanguage()
  59. if err != nil {
  60. log.Info(c, "Language detection failed: %s", err)
  61. return ""
  62. }
  63. return l
  64. }
  65. func Collection(c *cli.Context) string {
  66. if coll := c.String("c"); coll != "" {
  67. return coll
  68. }
  69. if coll := c.String("b"); coll != "" {
  70. return coll
  71. }
  72. return ""
  73. }
  74. // HostDirectory returns the sub directory string for the host. Order of
  75. // precedence is a host flag if any, then the configured default, if any
  76. func HostDirectory(c *cli.Context) (string, error) {
  77. cfg, err := LoadConfig(UserDataDir(c.App.ExtraInfo()["configDir"]))
  78. if err != nil {
  79. return "", err
  80. }
  81. // flag takes precedence over defaults
  82. if hostFlag := c.GlobalString("host"); hostFlag != "" {
  83. if parts := strings.Split(hostFlag, "://"); len(parts) > 1 {
  84. return parts[1], nil
  85. }
  86. return hostFlag, nil
  87. }
  88. if cfg.Default.Host != "" && cfg.Default.User != "" {
  89. if parts := strings.Split(cfg.Default.Host, "://"); len(parts) > 1 {
  90. return parts[1], nil
  91. }
  92. return cfg.Default.Host, nil
  93. }
  94. return "", nil
  95. }