cli: allow generating private key on startup
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
		
							parent
							
								
									78b61aede4
								
							
						
					
					
						commit
						44961e91dc
					
				@ -114,7 +114,6 @@ func createCliApp() *cli.App {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    privateKeyFileFlag := cli.PathFlag{
 | 
					    privateKeyFileFlag := cli.PathFlag{
 | 
				
			||||||
        Name: "private-key",
 | 
					        Name: "private-key",
 | 
				
			||||||
        Required: true,
 | 
					 | 
				
			||||||
        Usage: "Path to file with private key",
 | 
					        Usage: "Path to file with private key",
 | 
				
			||||||
        Destination: &PrivateKeyPath,
 | 
					        Destination: &PrivateKeyPath,
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@ -204,29 +203,45 @@ func setup(ctx *cli.Context) error {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    slog.Info("Node UUID: " + uuid.String())
 | 
					    slog.Info("Node UUID: " + uuid.String())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    privKeyFile, err := os.Open(PrivateKeyPath)
 | 
					    var privateKey wgtypes.Key
 | 
				
			||||||
    if err != nil {
 | 
					    createPrivKey := func() error {
 | 
				
			||||||
        return cli.Exit(err, 1)
 | 
					        slog.Info("Creating a private key")
 | 
				
			||||||
 | 
					        privateKey, err = wgtypes.GeneratePrivateKey()
 | 
				
			||||||
 | 
					        if err != nil {
 | 
				
			||||||
 | 
					            return cli.Exit(err, 1)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        slog.Debug(fmt.Sprintf("Private key: %s", privateKey.String()))
 | 
				
			||||||
 | 
					        return nil
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    defer privKeyFile.Close()
 | 
					 | 
				
			||||||
    slog.Debug("Keyfile opened for reading")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if PrivateKeyPath == "" {
 | 
				
			||||||
 | 
					        err := createPrivKey()
 | 
				
			||||||
 | 
					        if err != nil {
 | 
				
			||||||
 | 
					            return err
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					        privKeyFile, err := os.Open(PrivateKeyPath)
 | 
				
			||||||
 | 
					        defer privKeyFile.Close()
 | 
				
			||||||
 | 
					        if err != nil {
 | 
				
			||||||
 | 
					            return cli.Exit(err, 1)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        privateKeyStr := make([]byte, 45)
 | 
				
			||||||
 | 
					        n, err := privKeyFile.Read(privateKeyStr)
 | 
				
			||||||
 | 
					        if err != nil {
 | 
				
			||||||
 | 
					            return cli.Exit(err, 1)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if n != 45 {
 | 
				
			||||||
 | 
					            slog.Warn("Private key length did not math the expected 45!")
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        slog.Debug(fmt.Sprintf("Read %d bytes from keyfile", n))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    privateKeyStr := make([]byte, 45)
 | 
					        privateKey, err = wgtypes.ParseKey(string(privateKeyStr))
 | 
				
			||||||
    n, err := privKeyFile.Read(privateKeyStr)
 | 
					        slog.Debug("Keyfile opened for reading")
 | 
				
			||||||
    if err != nil {
 | 
					        if err != nil {
 | 
				
			||||||
        return cli.Exit(err, 1)
 | 
					            return cli.Exit(err, 1)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        slog.Debug("Private key parsed and is correct")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    if n != 45 {
 | 
					 | 
				
			||||||
        slog.Warn("Private key length did not math the expected 45!")
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    slog.Debug(fmt.Sprintf("Read %d bytes from keyfile", n))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    privateKey, err := wgtypes.ParseKey(string(privateKeyStr))
 | 
					 | 
				
			||||||
    if err != nil {
 | 
					 | 
				
			||||||
        return cli.Exit(err, 1)
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    slog.Debug("Private key parsed and is correct")
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    wg, err := hvpnnode3.InitWGLink(
 | 
					    wg, err := hvpnnode3.InitWGLink(
 | 
				
			||||||
        InterfaceName, 
 | 
					        InterfaceName, 
 | 
				
			||||||
@ -366,6 +381,7 @@ func handleStdin(c chan struct{}) {
 | 
				
			|||||||
        in = strings.ReplaceAll(in, "\n", "")
 | 
					        in = strings.ReplaceAll(in, "\n", "")
 | 
				
			||||||
        if in == "q" || in == "exit" {
 | 
					        if in == "q" || in == "exit" {
 | 
				
			||||||
            c <- struct{}{}
 | 
					            c <- struct{}{}
 | 
				
			||||||
 | 
					            break
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user