flags.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. package main
  2. import (
  3. "errors"
  4. "flag"
  5. "fmt"
  6. "os"
  7. "path/filepath"
  8. "strconv"
  9. "strings"
  10. "dev.hexasoftware.com/hxs/cloudmount/internal/core"
  11. )
  12. func parseFlags(config *core.Config) (err error) {
  13. var mountoptsFlag string
  14. flag.StringVar(&config.Type, "t", config.Type, "which cloud service to use [gdrive]")
  15. flag.BoolVar(&config.Daemonize, "d", false, "Run app in background")
  16. flag.BoolVar(&config.VerboseLog, "v", false, "Verbose log")
  17. flag.StringVar(&config.HomeDir, "w", config.HomeDir, "Work dir, path that holds configurations")
  18. flag.DurationVar(&config.RefreshTime, "r", config.RefreshTime, "Timed cloud synchronization interval [if applied]")
  19. flag.StringVar(&mountoptsFlag, "o", "", "uid,gid ex: -o uid=1000,gid=0 ")
  20. flag.Usage = func() {
  21. fmt.Fprintf(os.Stderr, "Usage: %s [options] <SRC/CONFIG?> MOUNTPOINT\n\n", os.Args[0])
  22. fmt.Fprintf(os.Stderr, "Options:\n")
  23. flag.PrintDefaults()
  24. fmt.Fprintf(os.Stderr, "\n")
  25. }
  26. flag.Parse()
  27. if flag.NArg() < 1 {
  28. flag.Usage()
  29. //fmt.Println("Usage:\n gdrivemount [-d] [-v] <SRC/CONFIG> <MOUNTPOINT>")
  30. return errors.New("Missing parameter")
  31. }
  32. if flag.NArg() == 1 {
  33. config.Source = filepath.Join(config.HomeDir, config.Type+".json")
  34. config.Target = flag.Arg(0)
  35. } else {
  36. config.Source = flag.Arg(0)
  37. config.Target = flag.Arg(1)
  38. }
  39. /////////////////////////////////////
  40. // Parse mount opts
  41. /////////////////
  42. pmountopts := strings.Split(mountoptsFlag, ",")
  43. mountopts := map[string]string{}
  44. for _, v := range pmountopts {
  45. if keyindex := strings.Index(v, "="); keyindex != -1 {
  46. key := strings.TrimSpace(v[:keyindex])
  47. value := strings.TrimSpace(v[keyindex+1:])
  48. mountopts[key] = value
  49. }
  50. }
  51. /////////////////////////////////////
  52. // Use mount opts
  53. ///////////////
  54. uidStr, ok := mountopts["uid"]
  55. if ok {
  56. uid, err := strconv.Atoi(uidStr)
  57. if err != nil {
  58. panic(err)
  59. }
  60. config.UID = uint32(uid)
  61. }
  62. gidStr, ok := mountopts["gid"]
  63. if ok {
  64. gid, err := strconv.Atoi(gidStr)
  65. if err != nil {
  66. panic(err)
  67. }
  68. config.GID = uint32(gid)
  69. }
  70. return
  71. }