diff --git a/cmd/rpcdaemon/cli/config.go b/cmd/rpcdaemon/cli/config.go index 61f1d8664a3bb1cb7b24ec52db057c499dcff516..28e6d666a1b88adaa11fc4e57ada892083b54d57 100644 --- a/cmd/rpcdaemon/cli/config.go +++ b/cmd/rpcdaemon/cli/config.go @@ -91,7 +91,7 @@ func RootCommand() (*cobra.Command, *httpcfg.HttpCfg) { rootCmd.PersistentFlags().IntVar(&cfg.GRPCPort, "grpc.port", node.DefaultGRPCPort, "GRPC server listening port") rootCmd.PersistentFlags().BoolVar(&cfg.GRPCHealthCheckEnabled, "grpc.healthcheck", false, "Enable GRPC health check") rootCmd.PersistentFlags().StringVar(&cfg.StarknetGRPCAddress, "starknet.grpc.address", "127.0.0.1:6066", "Starknet GRPC address") - rootCmd.PersistentFlags().StringVar(&cfg.JWTSecretPath, "jwt-secret", "", "Token to ensure safe connection between CL and EL") + rootCmd.PersistentFlags().StringVar(&cfg.JWTSecretPath, utils.JWTSecretPath.Name, utils.JWTSecretPath.Value, "Token to ensure safe connection between CL and EL") if err := rootCmd.MarkPersistentFlagFilename("rpc.accessList", "json"); err != nil { panic(err) @@ -563,32 +563,24 @@ func isWebsocket(r *http.Request) bool { // or from the default location. If neither of those are present, it generates // a new secret and stores to the default location. func obtainJWTSecret(cfg httpcfg.HttpCfg) ([]byte, error) { - var fileName string - if len(cfg.JWTSecretPath) > 0 { - // path provided - fileName = cfg.JWTSecretPath - } else { - // no path provided, use default - fileName = JwtDefaultFile - } // try reading from file - log.Info("Reading JWT secret", "path", fileName) - if data, err := os.ReadFile(fileName); err == nil { + log.Info("Reading JWT secret", "path", cfg.JWTSecretPath) + if data, err := os.ReadFile(cfg.JWTSecretPath); err == nil { jwtSecret := common.FromHex(strings.TrimSpace(string(data))) if len(jwtSecret) == 32 { return jwtSecret, nil } - log.Error("Invalid JWT secret", "path", fileName, "length", len(jwtSecret)) + log.Error("Invalid JWT secret", "path", cfg.JWTSecretPath, "length", len(jwtSecret)) return nil, errors.New("invalid JWT secret") } // Need to generate one jwtSecret := make([]byte, 32) rand.Read(jwtSecret) - if err := os.WriteFile(fileName, []byte(hexutil.Encode(jwtSecret)), 0600); err != nil { + if err := os.WriteFile(cfg.JWTSecretPath, []byte(hexutil.Encode(jwtSecret)), 0600); err != nil { return nil, err } - log.Info("Generated JWT secret", "path", fileName) + log.Info("Generated JWT secret", "path", cfg.JWTSecretPath) return jwtSecret, nil } diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go index fced0984a1492e4e670620c5376a6cdfe4d9acfe..662ea391d1af415327067d745496a30fcbbd0791 100644 --- a/cmd/utils/flags.go +++ b/cmd/utils/flags.go @@ -329,6 +329,12 @@ var ( Value: node.DefaultEngineHTTPPort, } + JWTSecretPath = cli.StringFlag{ + Name: "authrpc.jwtsecret", + Usage: "Token to ensure safe connection between CL and EL", + Value: "jwt.hex", + } + HttpCompressionFlag = cli.BoolFlag{ Name: "http.compression", Usage: "Comma separated list of virtual hostnames from which to accept requests (server enforced). Accepts '*' wildcard.", diff --git a/turbo/cli/default_flags.go b/turbo/cli/default_flags.go index 037dc7c24d8115efa213d2eba28904fcd882d572..8ef61e65c092f5e9f6153f352b481f35821944a8 100644 --- a/turbo/cli/default_flags.go +++ b/turbo/cli/default_flags.go @@ -52,6 +52,7 @@ var DefaultFlags = []cli.Flag{ utils.HTTPPortFlag, utils.EngineAddr, utils.EnginePort, + utils.JWTSecretPath, utils.HttpCompressionFlag, utils.HTTPCORSDomainFlag, utils.HTTPVirtualHostsFlag, diff --git a/turbo/cli/flags.go b/turbo/cli/flags.go index 95d728b6dd8b7605376e9e8c802655c3d37ee288..1d3b8e6ceaf318240b701129f1c9fa7af9b4a677 100644 --- a/turbo/cli/flags.go +++ b/turbo/cli/flags.go @@ -298,6 +298,7 @@ func setEmbeddedRpcDaemon(ctx *cli.Context, cfg *node.Config) { HttpPort: ctx.GlobalInt(utils.HTTPPortFlag.Name), EngineHTTPListenAddress: ctx.GlobalString(utils.EngineAddr.Name), EnginePort: ctx.GlobalInt(utils.EnginePort.Name), + JWTSecretPath: ctx.GlobalString(utils.JWTSecretPath.Name), HttpCORSDomain: strings.Split(ctx.GlobalString(utils.HTTPCORSDomainFlag.Name), ","), HttpVirtualHost: strings.Split(ctx.GlobalString(utils.HTTPVirtualHostsFlag.Name), ","), API: strings.Split(ctx.GlobalString(utils.HTTPApiFlag.Name), ","),