@@ -14,6 +14,7 @@ limitations under the License.
1414package cmd
1515
1616import (
17+ "encoding/base64"
1718 "encoding/json"
1819 "fmt"
1920 "os"
@@ -321,6 +322,11 @@ var CommonFlags []cli.Flag = []cli.Flag{
321322 Usage : "Enable peerguard. (Experimental)" ,
322323 EnvVars : []string {"PEERGUARD" },
323324 },
325+ & cli.StringFlag {
326+ Name : "privkey" ,
327+ Usage : "Use fixed base64 <- protobuf encoded privkey. (Experimental)" ,
328+ EnvVars : []string {"EDGEVPNPRIVKEY" },
329+ },
324330 & cli.BoolFlag {
325331 Name : "privkey-cache" ,
326332 Usage : "Enable privkey caching. (Experimental)" ,
@@ -495,31 +501,39 @@ func cliToOpts(c *cli.Context) ([]node.Option, []vpn.Option, *logger.Logger) {
495501 }
496502 }
497503
498- // Check if we have any privkey identity cached already
499- if c .Bool ("privkey-cache" ) {
500- keyFile := filepath .Join (c .String ("privkey-cache-dir" ), "privkey" )
501- dat , err := os .ReadFile (keyFile )
502- if err == nil && len (dat ) > 0 {
503- llger .Info ("Reading key from" , keyFile )
504-
505- nc .Privkey = dat
504+ if c .String ("privkey" ) != "" {
505+ raw , err := base64 .StdEncoding .DecodeString (c .String ("privkey" ))
506+ if err != nil {
507+ checkErr (fmt .Errorf ("failed to decode privkey: %v" , err ))
506508 } else {
507- // generate, write
508- llger .Info ("Generating private key and saving it locally for later use in" , keyFile )
509+ nc .Privkey = raw
510+ }
511+ } else {
512+ // Check if we have any privkey identity cached already
513+ if c .Bool ("privkey-cache" ) {
514+ keyFile := filepath .Join (c .String ("privkey-cache-dir" ), "privkey" )
515+ dat , err := os .ReadFile (keyFile )
516+ if err == nil && len (dat ) > 0 {
517+ llger .Info ("Reading key from" , keyFile )
518+ nc .Privkey = dat
519+ } else {
520+ // generate, write
521+ llger .Info ("Generating private key and saving it locally for later use in" , keyFile )
509522
510- privkey , err := node .GenPrivKey (0 )
511- checkErr (err )
523+ privkey , err := node .GenPrivKey (0 )
524+ checkErr (err )
512525
513- r , err := crypto .MarshalPrivateKey (privkey )
514- checkErr (err )
526+ r , err := crypto .MarshalPrivateKey (privkey )
527+ checkErr (err )
515528
516- err = os .MkdirAll (c .String ("privkey-cache-dir" ), 0600 )
517- checkErr (err )
529+ err = os .MkdirAll (c .String ("privkey-cache-dir" ), 0600 )
530+ checkErr (err )
518531
519- err = os .WriteFile (keyFile , r , 0600 )
520- checkErr (err )
532+ err = os .WriteFile (keyFile , r , 0600 )
533+ checkErr (err )
521534
522- nc .Privkey = r
535+ nc .Privkey = r
536+ }
523537 }
524538 }
525539
0 commit comments