good morning!!!!

Skip to content
Snippets Groups Projects
Unverified Commit a903912b authored by Felix Lange's avatar Felix Lange Committed by GitHub
Browse files

rpc: check module availability at startup (#20597)

parent 44c365c3
No related branches found
No related tags found
No related merge requests found
...@@ -99,8 +99,8 @@ func defaultNodeConfig() node.Config { ...@@ -99,8 +99,8 @@ func defaultNodeConfig() node.Config {
cfg := node.DefaultConfig cfg := node.DefaultConfig
cfg.Name = clientIdentifier cfg.Name = clientIdentifier
cfg.Version = params.VersionWithCommit(gitCommit, gitDate) cfg.Version = params.VersionWithCommit(gitCommit, gitDate)
cfg.HTTPModules = append(cfg.HTTPModules, "eth", "shh") cfg.HTTPModules = append(cfg.HTTPModules, "eth")
cfg.WSModules = append(cfg.WSModules, "eth", "shh") cfg.WSModules = append(cfg.WSModules, "eth")
cfg.IPCPath = "geth.ipc" cfg.IPCPath = "geth.ipc"
return cfg return cfg
} }
......
...@@ -17,13 +17,39 @@ ...@@ -17,13 +17,39 @@
package rpc package rpc
import ( import (
"fmt"
"net" "net"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
) )
// StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules // checkModuleAvailability check that all names given in modules are actually
// available API services.
func checkModuleAvailability(modules []string, apis []API) error {
available := make(map[string]struct{})
var availableNames string
for i, api := range apis {
if _, ok := available[api.Namespace]; !ok {
available[api.Namespace] = struct{}{}
if i > 0 {
availableNames += ", "
}
availableNames += api.Namespace
}
}
for _, name := range modules {
if _, ok := available[name]; !ok {
return fmt.Errorf("invalid API %q in whitelist (available: %s)", name, availableNames)
}
}
return nil
}
// StartHTTPEndpoint starts the HTTP RPC endpoint, configured with cors/vhosts/modules.
func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string, timeouts HTTPTimeouts) (net.Listener, *Server, error) { func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []string, vhosts []string, timeouts HTTPTimeouts) (net.Listener, *Server, error) {
if err := checkModuleAvailability(modules, apis); err != nil {
return nil, nil, err
}
// Generate the whitelist based on the allowed modules // Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool) whitelist := make(map[string]bool)
for _, module := range modules { for _, module := range modules {
...@@ -51,9 +77,11 @@ func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []str ...@@ -51,9 +77,11 @@ func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []str
return listener, handler, err return listener, handler, err
} }
// StartWSEndpoint starts a websocket endpoint // StartWSEndpoint starts a websocket endpoint.
func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) { func StartWSEndpoint(endpoint string, apis []API, modules []string, wsOrigins []string, exposeAll bool) (net.Listener, *Server, error) {
if err := checkModuleAvailability(modules, apis); err != nil {
return nil, nil, err
}
// Generate the whitelist based on the allowed modules // Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool) whitelist := make(map[string]bool)
for _, module := range modules { for _, module := range modules {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment