main.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package cmd
  2. import (
  3. "encoding/base64"
  4. "fmt"
  5. "os"
  6. "github.com/mudler/edgevpn/pkg/edgevpn"
  7. "github.com/urfave/cli"
  8. "gopkg.in/yaml.v2"
  9. )
  10. const Copyright string = ` edgevpn Copyright (C) 2021 Ettore Di Giacinto
  11. This program comes with ABSOLUTELY NO WARRANTY.
  12. This is free software, and you are welcome to redistribute it
  13. under certain conditions.`
  14. var CommonFlags []cli.Flag = []cli.Flag{
  15. &cli.StringFlag{
  16. Name: "config",
  17. Usage: "Specify a path to a edgevpn config file",
  18. EnvVar: "EDGEVPNCONFIG",
  19. },
  20. &cli.IntFlag{
  21. Name: "mtu",
  22. Usage: "Specify a mtu",
  23. EnvVar: "EDGEVPNMTU",
  24. Value: 1200,
  25. },
  26. &cli.StringFlag{
  27. Name: "log-level",
  28. Usage: "Specify loglevel",
  29. EnvVar: "EDGEVPNLOGLEVEL",
  30. Value: "info",
  31. },
  32. &cli.StringFlag{
  33. Name: "libp2p-log-level",
  34. Usage: "Specify libp2p loglevel",
  35. EnvVar: "EDGEVPNLIBP2PLOGLEVEL",
  36. Value: "fatal",
  37. },
  38. &cli.StringFlag{
  39. Name: "token",
  40. Usage: "Specify an edgevpn token in place of a config file",
  41. EnvVar: "EDGEVPNTOKEN",
  42. }}
  43. func MainFlags() []cli.Flag {
  44. return append([]cli.Flag{
  45. &cli.BoolFlag{
  46. Name: "g",
  47. Usage: "Generates a new configuration and prints it on screen",
  48. },
  49. &cli.BoolFlag{
  50. Name: "b",
  51. Usage: "Encodes the new config in base64, so it can be used as a token",
  52. },
  53. &cli.StringFlag{
  54. Name: "address",
  55. Usage: "VPN virtual address",
  56. EnvVar: "ADDRESS",
  57. Value: "10.1.0.1/24",
  58. },
  59. &cli.StringFlag{
  60. Name: "interface",
  61. Usage: "Interface name",
  62. Value: "edgevpn0",
  63. EnvVar: "IFACE",
  64. }}, CommonFlags...)
  65. }
  66. func Main() func(c *cli.Context) error {
  67. return func(c *cli.Context) error {
  68. if c.Bool("g") {
  69. // Generates a new config and exit
  70. newData, err := edgevpn.GenerateNewConnectionData()
  71. if err != nil {
  72. fmt.Println(err)
  73. os.Exit(1)
  74. }
  75. bytesData, err := yaml.Marshal(newData)
  76. if err != nil {
  77. fmt.Println(err)
  78. os.Exit(1)
  79. }
  80. if c.Bool("b") {
  81. fmt.Print(base64.StdEncoding.EncodeToString(bytesData))
  82. } else {
  83. fmt.Println(string(bytesData))
  84. }
  85. os.Exit(0)
  86. }
  87. e := edgevpn.New(cliToOpts(c)...)
  88. displayStart(e)
  89. if err := e.Start(); err != nil {
  90. e.Logger().Fatal(err.Error())
  91. }
  92. return nil
  93. }
  94. }