flags.go 1.7 KB

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