소스 검색

Split main

Ettore Di Giacinto 3 년 전
부모
커밋
d03d9d6e1e
6개의 변경된 파일164개의 추가작업 그리고 124개의 파일을 삭제
  1. 34 0
      cmd/join.go
  2. 85 0
      cmd/main.go
  3. 34 0
      cmd/util.go
  4. 1 0
      go.mod
  5. 7 123
      main.go
  6. 3 1
      pkg/edgevpn/edgevpn.go

+ 34 - 0
cmd/join.go

@@ -0,0 +1,34 @@
+package cmd
+
+import (
+	"github.com/mudler/edgevpn/pkg/blockchain"
+	"github.com/mudler/edgevpn/pkg/edgevpn"
+	"github.com/urfave/cli"
+	"go.uber.org/zap"
+)
+
+func Join(l *zap.Logger) cli.Command {
+	return cli.Command{
+		Name:        "join",
+		Description: "join the network without activating any interface",
+		Flags:       CommonFlags,
+		Action: func(c *cli.Context) error {
+			e := edgevpn.New(cliToOpts(l, c)...)
+
+			mw, err := e.MessageWriter()
+			if err != nil {
+				return err
+			}
+
+			ledger := blockchain.New(mw, 1000)
+
+			// Join the node to the network, using our ledger
+			if err := e.Join(ledger); err != nil {
+				return err
+			}
+
+			for {
+			}
+		},
+	}
+}

+ 85 - 0
cmd/main.go

@@ -0,0 +1,85 @@
+package cmd
+
+import (
+	"fmt"
+	"os"
+
+	"github.com/mudler/edgevpn/internal"
+	"github.com/mudler/edgevpn/pkg/edgevpn"
+	"github.com/urfave/cli"
+	"go.uber.org/zap"
+	"gopkg.in/yaml.v2"
+)
+
+const Copyright string = `	edgevpn  Copyright (C) 2021 Ettore Di Giacinto
+This program comes with ABSOLUTELY NO WARRANTY.
+This is free software, and you are welcome to redistribute it
+under certain conditions.`
+
+var CommonFlags []cli.Flag = []cli.Flag{
+	&cli.StringFlag{
+		Name:   "config",
+		Usage:  "Specify a path to a edgevpn config file",
+		EnvVar: "EDGEVPNCONFIG",
+	},
+	&cli.StringFlag{
+		Name:   "token",
+		Usage:  "Specify an edgevpn token in place of a config file",
+		EnvVar: "EDGEVPNTOKEN",
+	}}
+
+func MainFlags() []cli.Flag {
+	return append([]cli.Flag{
+		&cli.BoolFlag{
+			Name:  "g",
+			Usage: "Generates a new configuration and prints it on screen",
+		},
+		&cli.StringFlag{
+			Name:   "address",
+			Usage:  "VPN virtual address",
+			EnvVar: "ADDRESS",
+			Value:  "10.1.0.1/24",
+		},
+		&cli.StringFlag{
+			Name:   "interface",
+			Usage:  "Interface name",
+			Value:  "edgevpn0",
+			EnvVar: "IFACE",
+		}}, CommonFlags...)
+}
+
+func Main(l *zap.Logger) func(c *cli.Context) error {
+	return func(c *cli.Context) error {
+		if c.Bool("g") {
+			// Generates a new config and exit
+			newData, err := edgevpn.GenerateNewConnectionData()
+			if err != nil {
+				fmt.Println(err)
+				os.Exit(1)
+			}
+
+			bytesData, err := yaml.Marshal(newData)
+			if err != nil {
+				fmt.Println(err)
+				os.Exit(1)
+			}
+
+			fmt.Println(string(bytesData))
+			os.Exit(0)
+		}
+
+		e := edgevpn.New(cliToOpts(l, c)...)
+
+		l.Sugar().Info(Copyright)
+
+		l.Sugar().Infof("Version: %s commit: %s", internal.Version, internal.Commit)
+
+		l.Sugar().Info("Start")
+
+		if err := e.Start(); err != nil {
+			l.Sugar().Fatal(err.Error())
+		}
+
+		return nil
+	}
+}

+ 34 - 0
cmd/util.go

@@ -0,0 +1,34 @@
+package cmd
+
+import (
+	"github.com/ipfs/go-log"
+	"github.com/mudler/edgevpn/pkg/edgevpn"
+	"github.com/songgao/water"
+	"github.com/urfave/cli"
+	"go.uber.org/zap"
+)
+
+func cliToOpts(l *zap.Logger, c *cli.Context) []edgevpn.Option {
+	config := c.String("config")
+	address := c.String("address")
+	iface := c.String("interface")
+	token := c.String("token")
+	if config == "" &&
+		token == "" {
+		l.Sugar().Fatal("EDGEVPNCONFIG or EDGEVPNTOKEN not supplied. At least a config file is required")
+	}
+	return []edgevpn.Option{
+		edgevpn.Logger(l),
+		edgevpn.LogLevel(log.LevelInfo),
+		edgevpn.MaxMessageSize(2 << 20), // 2MB
+		edgevpn.WithInterfaceMTU(1450),
+		edgevpn.WithPacketMTU(1420),
+		edgevpn.WithInterfaceAddress(address),
+		edgevpn.WithInterfaceName(iface),
+		edgevpn.WithMaxBlockChainSize(1000),
+		edgevpn.WithInterfaceType(water.TUN),
+		edgevpn.NetLinkBootstrap(true),
+		edgevpn.FromBase64(token),
+		edgevpn.FromYaml(config),
+	}
+}

+ 1 - 0
go.mod

@@ -4,6 +4,7 @@ go 1.14
 
 require (
 	github.com/ipfs/go-ipns v0.1.2 // indirect
+	github.com/ipfs/go-log v1.0.5 // indirect
 	github.com/ipfs/go-log/v2 v2.3.0
 	github.com/kr/text v0.2.0 // indirect
 	github.com/libp2p/go-libp2p v0.15.1

+ 7 - 123
main.go

@@ -16,148 +16,32 @@
 package main
 
 import (
-	"fmt"
 	"os"
 
-	"github.com/ipfs/go-log/v2"
-	"github.com/songgao/water"
 	"github.com/urfave/cli"
 
+	"github.com/mudler/edgevpn/cmd"
 	internal "github.com/mudler/edgevpn/internal"
 	"go.uber.org/zap"
-	"gopkg.in/yaml.v2"
-
-	"github.com/mudler/edgevpn/pkg/blockchain"
-	edgevpn "github.com/mudler/edgevpn/pkg/edgevpn"
 )
 
-const copyRight string = `	edgevpn  Copyright (C) 2021 Ettore Di Giacinto
-This program comes with ABSOLUTELY NO WARRANTY.
-This is free software, and you are welcome to redistribute it
-under certain conditions.`
-
-func cliToOpts(l *zap.Logger, c *cli.Context) []edgevpn.Option {
-	config := c.String("config")
-	address := c.String("address")
-	iface := c.String("interface")
-	token := c.String("token")
-	if config == "" &&
-		token == "" {
-		l.Sugar().Fatal("EDGEVPNCONFIG or EDGEVPNTOKEN not supplied. At least a config file is required")
-	}
-	return []edgevpn.Option{
-		edgevpn.Logger(l),
-		edgevpn.LogLevel(log.LevelInfo),
-		edgevpn.MaxMessageSize(2 << 20), // 2MB
-		edgevpn.WithInterfaceMTU(1450),
-		edgevpn.WithPacketMTU(1420),
-		edgevpn.WithInterfaceAddress(address),
-		edgevpn.WithInterfaceName(iface),
-		edgevpn.WithMaxBlockChainSize(1000),
-		edgevpn.WithInterfaceType(water.TUN),
-		edgevpn.NetLinkBootstrap(true),
-		edgevpn.FromBase64(token),
-		edgevpn.FromYaml(config),
-	}
-}
-
 func main() {
 	l, _ := zap.NewProduction()
 	defer l.Sync() // flushes buffer, if any
 
-	common := []cli.Flag{&cli.StringFlag{
-		Name:   "config",
-		Usage:  "Specify a path to a edgevpn config file",
-		EnvVar: "EDGEVPNCONFIG",
-	},
-		&cli.StringFlag{
-			Name:   "token",
-			Usage:  "Specify an edgevpn token in place of a config file",
-			EnvVar: "EDGEVPNTOKEN",
-		}}
-
 	app := &cli.App{
 		Name:        "edgevpn",
 		Version:     internal.Version,
 		Author:      "Ettore Di Giacinto",
 		Usage:       "edgevpn --config /etc/edgevpn/config.yaml",
 		Description: "edgevpn uses libp2p to build an immutable trusted blockchain addressable p2p network",
-		Copyright:   copyRight,
-		Flags: append([]cli.Flag{
-			&cli.BoolFlag{
-				Name:  "g",
-				Usage: "Generates a new configuration and prints it on screen",
-			},
-			&cli.StringFlag{
-				Name:   "address",
-				Usage:  "VPN virtual address",
-				EnvVar: "ADDRESS",
-				Value:  "10.1.0.1/24",
-			},
-			&cli.StringFlag{
-				Name:   "interface",
-				Usage:  "Interface name",
-				Value:  "edgevpn0",
-				EnvVar: "IFACE",
-			}}, common...),
-
-		Commands: []cli.Command{{
-			Name:        "join",
-			Description: "join the network without activating any interface",
-			Flags:       common,
-			Action: func(c *cli.Context) error {
-				e := edgevpn.New(cliToOpts(l, c)...)
-
-				mw, err := e.MessageWriter()
-				if err != nil {
-					return err
-				}
-
-				ledger := blockchain.New(mw, 1000)
-
-				// Join the node to the network, using our ledger
-				if err := e.Join(ledger); err != nil {
-					return err
-				}
-
-				for {
-				}
-			},
-		}},
-
-		Action: func(c *cli.Context) error {
-			if c.Bool("g") {
-				// Generates a new config and exit
-				newData, err := edgevpn.GenerateNewConnectionData()
-				if err != nil {
-					fmt.Println(err)
-					os.Exit(1)
-				}
-
-				bytesData, err := yaml.Marshal(newData)
-				if err != nil {
-					fmt.Println(err)
-					os.Exit(1)
-				}
-
-				fmt.Println(string(bytesData))
-				os.Exit(0)
-			}
-
-			e := edgevpn.New(cliToOpts(l, c)...)
-
-			l.Sugar().Info(copyRight)
-
-			l.Sugar().Infof("Version: %s commit: %s", internal.Version, internal.Commit)
-
-			l.Sugar().Info("Start")
-
-			if err := e.Start(); err != nil {
-				l.Sugar().Fatal(err.Error())
-			}
-
-			return nil
+		Copyright:   cmd.Copyright,
+		Flags:       cmd.MainFlags(),
+		Commands: []cli.Command{
+			cmd.Join(l),
 		},
+
+		Action: cmd.Main(l),
 	}
 
 	err := app.Run(os.Args)

+ 3 - 1
pkg/edgevpn/edgevpn.go

@@ -81,6 +81,8 @@ func (e *EdgeVPN) Start() error {
 	e.config.StreamHandlers[protocol.ID(Protocol)] = streamHandler(ledger, ifce)
 
 	// Join the node to the network, using our ledger
+	// it also starts up a goroutine that periodically sends
+	// messages to the network with our blockchain content
 	if err := e.Join(ledger); err != nil {
 		return err
 	}
@@ -217,7 +219,7 @@ func (e *EdgeVPN) startNetwork() error {
 		return err
 	}
 
-	// join the chat room
+	// join the "chat" room
 	cr, err := hub.JoinRoom(ctx, ps, host.ID(), e.config.RoomName)
 	if err != nil {
 		return err