Skip to content

Commit

Permalink
rpc: check module availability at startup (ethereum#20597)
Browse files Browse the repository at this point in the history
  • Loading branch information
gzliudan committed Nov 8, 2024
1 parent 32c7a78 commit a2625e4
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 4 deletions.
4 changes: 2 additions & 2 deletions cmd/XDC/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,8 +120,8 @@ func defaultNodeConfig() node.Config {
cfg := node.DefaultConfig
cfg.Name = clientIdentifier
cfg.Version = params.VersionWithCommit(gitCommit)
cfg.HTTPModules = append(cfg.HTTPModules, "eth", "shh")
cfg.WSModules = append(cfg.WSModules, "eth", "shh")
cfg.HTTPModules = append(cfg.HTTPModules, "eth")
cfg.WSModules = append(cfg.WSModules, "eth")
cfg.IPCPath = "XDC.ipc"
return cfg
}
Expand Down
33 changes: 31 additions & 2 deletions rpc/endpoints.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,40 @@
package rpc

import (
"fmt"
"net"
"strings"

"github.com/XinFinOrg/XDPoSChain/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) {
if err := checkModuleAvailability(modules, apis); err != nil {
return nil, nil, err
}
// Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool)
for _, module := range modules {
Expand Down Expand Up @@ -52,8 +78,11 @@ func StartHTTPEndpoint(endpoint string, apis []API, modules []string, cors []str
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) {
if err := checkModuleAvailability(modules, apis); err != nil {
return nil, nil, err
}
// Generate the whitelist based on the allowed modules
whitelist := make(map[string]bool)
for _, module := range modules {
Expand Down

0 comments on commit a2625e4

Please sign in to comment.