feat_: Add WS settings to the node config (#5346)
* feat_: add ability to enable http and ws connections from the client app * feat_: add websocket option for api config * fix_: use new api options in statusd * chore_: add test for `overrideApiConfig`
This commit is contained in:
parent
8480429cbb
commit
1ba4b86c7e
|
@ -0,0 +1,45 @@
|
|||
package api
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/status-im/status-go/params"
|
||||
"github.com/status-im/status-go/protocol/requests"
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestOverrideApiConfig(t *testing.T) {
|
||||
newNodeConfig := ¶ms.NodeConfig{
|
||||
APIModules: "test, eth, wakuv2",
|
||||
ConnectorConfig: params.ConnectorConfig{Enabled: true},
|
||||
HTTPEnabled: true,
|
||||
HTTPHost: "0.0.0.0",
|
||||
HTTPPort: 8545,
|
||||
WSEnabled: false,
|
||||
WSHost: "127.0.0.1",
|
||||
WSPort: 8586,
|
||||
}
|
||||
|
||||
apiConfig := &requests.APIConfig{
|
||||
APIModules: "connector",
|
||||
ConnectorEnabled: false,
|
||||
HTTPEnabled: false,
|
||||
HTTPHost: "127.0.0.1",
|
||||
HTTPPort: 8080,
|
||||
WSEnabled: true,
|
||||
WSHost: "192.168.0.1",
|
||||
WSPort: 7777,
|
||||
}
|
||||
|
||||
overrideApiConfig(newNodeConfig, apiConfig)
|
||||
|
||||
require.Equal(t, apiConfig.APIModules, newNodeConfig.APIModules)
|
||||
require.Equal(t, apiConfig.ConnectorEnabled, newNodeConfig.ConnectorConfig.Enabled)
|
||||
require.Equal(t, apiConfig.HTTPEnabled, newNodeConfig.HTTPEnabled)
|
||||
require.Equal(t, apiConfig.HTTPHost, newNodeConfig.HTTPHost)
|
||||
require.Equal(t, apiConfig.HTTPPort, newNodeConfig.HTTPPort)
|
||||
require.Equal(t, apiConfig.WSEnabled, newNodeConfig.WSEnabled)
|
||||
require.Equal(t, apiConfig.WSHost, newNodeConfig.WSHost)
|
||||
require.Equal(t, apiConfig.WSPort, newNodeConfig.WSPort)
|
||||
}
|
|
@ -215,6 +215,19 @@ func buildWalletConfig(request *requests.WalletSecretsConfig) params.WalletConfi
|
|||
return walletConfig
|
||||
}
|
||||
|
||||
func overrideApiConfig(nodeConfig *params.NodeConfig, config *requests.APIConfig) {
|
||||
nodeConfig.APIModules = config.APIModules
|
||||
nodeConfig.ConnectorConfig.Enabled = config.ConnectorEnabled
|
||||
|
||||
nodeConfig.HTTPEnabled = config.HTTPEnabled
|
||||
nodeConfig.HTTPHost = config.HTTPHost
|
||||
nodeConfig.HTTPPort = config.HTTPPort
|
||||
|
||||
nodeConfig.WSEnabled = config.WSEnabled
|
||||
nodeConfig.WSHost = config.WSHost
|
||||
nodeConfig.WSPort = config.WSPort
|
||||
}
|
||||
|
||||
func defaultNodeConfig(installationID string, request *requests.CreateAccount, opts ...params.Option) (*params.NodeConfig, error) {
|
||||
// Set mainnet
|
||||
nodeConfig := ¶ms.NodeConfig{}
|
||||
|
@ -339,10 +352,7 @@ func defaultNodeConfig(installationID string, request *requests.CreateAccount, o
|
|||
}
|
||||
|
||||
if request.APIConfig != nil {
|
||||
nodeConfig.HTTPEnabled = true
|
||||
nodeConfig.HTTPHost = request.APIConfig.HTTPHost
|
||||
nodeConfig.HTTPPort = request.APIConfig.HTTPPort
|
||||
nodeConfig.APIModules = request.APIConfig.APIModules
|
||||
overrideApiConfig(nodeConfig, request.APIConfig)
|
||||
}
|
||||
|
||||
for _, opt := range opts {
|
||||
|
|
|
@ -601,6 +601,10 @@ func (b *GethStatusBackend) loginAccount(request *requests.Login) error {
|
|||
|
||||
b.overrideNetworks(b.config, request)
|
||||
|
||||
if request.APIConfig != nil {
|
||||
overrideApiConfig(b.config, request.APIConfig)
|
||||
}
|
||||
|
||||
err = b.setupLogSettings()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to setup log settings")
|
||||
|
|
|
@ -154,6 +154,9 @@ func randomNodeConfig() *params.NodeConfig {
|
|||
HTTPPort: randomInt(math.MaxInt64),
|
||||
HTTPVirtualHosts: randomStringSlice(),
|
||||
HTTPCors: randomStringSlice(),
|
||||
WSEnabled: false, // NOTE: leaving ws field idle since we are moving away from the storing the whole config
|
||||
WSHost: "",
|
||||
WSPort: 0,
|
||||
IPCEnabled: randomBool(),
|
||||
IPCFile: randomString(),
|
||||
LogEnabled: randomBool(),
|
||||
|
|
|
@ -139,6 +139,7 @@ func createAccountAndLogin(b *api.GethStatusBackend, name, rootDataDir, password
|
|||
LogFilePath: "log",
|
||||
APIConfig: &requests.APIConfig{
|
||||
APIModules: apiModules,
|
||||
HTTPEnabled: true,
|
||||
HTTPHost: "127.0.0.1",
|
||||
HTTPPort: port,
|
||||
},
|
||||
|
|
|
@ -211,8 +211,13 @@ func main() {
|
|||
CustomizationColor: "0x000000",
|
||||
BackupDisabledDataDir: config.DataDir,
|
||||
APIConfig: &requests.APIConfig{
|
||||
ConnectorEnabled: config.ClusterConfig.Enabled,
|
||||
HTTPEnabled: config.HTTPEnabled,
|
||||
HTTPHost: config.HTTPHost,
|
||||
HTTPPort: config.HTTPPort,
|
||||
WSEnabled: config.WSEnabled,
|
||||
WSHost: config.WSHost,
|
||||
WSPort: config.WSPort,
|
||||
APIModules: config.APIModules,
|
||||
},
|
||||
NetworkID: &config.NetworkID,
|
||||
|
|
|
@ -94,7 +94,6 @@ func newGethNodeConfig(config *params.NodeConfig) (*node.Config, error) {
|
|||
MaxPeers: maxPeers,
|
||||
MaxPendingPeers: maxPendingPeers,
|
||||
},
|
||||
HTTPModules: config.FormatAPIModules(),
|
||||
}
|
||||
|
||||
if config.IPCEnabled {
|
||||
|
@ -107,12 +106,19 @@ func newGethNodeConfig(config *params.NodeConfig) (*node.Config, error) {
|
|||
}
|
||||
|
||||
if config.HTTPEnabled {
|
||||
nc.HTTPModules = config.FormatAPIModules()
|
||||
nc.HTTPHost = config.HTTPHost
|
||||
nc.HTTPPort = config.HTTPPort
|
||||
nc.HTTPVirtualHosts = config.HTTPVirtualHosts
|
||||
nc.HTTPCors = config.HTTPCors
|
||||
}
|
||||
|
||||
if config.WSEnabled {
|
||||
nc.WSModules = config.FormatAPIModules()
|
||||
nc.WSHost = config.WSHost
|
||||
nc.WSPort = config.WSPort
|
||||
}
|
||||
|
||||
if config.ClusterConfig.Enabled {
|
||||
nc.P2P.BootstrapNodesV5 = parseNodesV5(config.ClusterConfig.BootNodes)
|
||||
nc.P2P.StaticNodes = parseNodes(config.ClusterConfig.StaticNodes)
|
||||
|
|
|
@ -375,6 +375,15 @@ type NodeConfig struct {
|
|||
// HTTPPort is the TCP port number on which to start the Geth's HTTP RPC server.
|
||||
HTTPPort int
|
||||
|
||||
// WSEnabled specifies whether the Websocket RPC server is to be enabled by default.
|
||||
WSEnabled bool
|
||||
|
||||
// WSHost is the host interface on which to start Geth's Websocket RPC server.
|
||||
WSHost string
|
||||
|
||||
// WSPort is the TCP port number on which to start the Geth's Websocket RPC server.
|
||||
WSPort int
|
||||
|
||||
// HTTPVirtualHosts is the list of virtual hostnames which are allowed on incoming requests.
|
||||
// This is by default {'localhost'}. Using this prevents attacks like
|
||||
// DNS rebinding, which bypasses SOP by simply masquerading as being within the same
|
||||
|
|
|
@ -22,8 +22,13 @@ type ImageCropRectangle struct {
|
|||
|
||||
type APIConfig struct {
|
||||
APIModules string `json:"apiModules"`
|
||||
ConnectorEnabled bool `json:"connectorEnabled"`
|
||||
HTTPEnabled bool `json:"httpEnabled"`
|
||||
HTTPHost string `json:"httpHost"`
|
||||
HTTPPort int `json:"httpPort"`
|
||||
WSEnabled bool `json:"wsEnabled"`
|
||||
WSHost string `json:"wsHost"`
|
||||
WSPort int `json:"wsPort"`
|
||||
}
|
||||
|
||||
type CreateAccount struct {
|
||||
|
|
|
@ -34,6 +34,8 @@ type Login struct {
|
|||
Mnemonic string `json:"mnemonic"`
|
||||
|
||||
WalletSecretsConfig
|
||||
|
||||
APIConfig *APIConfig `json:"apiConfig"`
|
||||
}
|
||||
|
||||
func (c *Login) Validate() error {
|
||||
|
|
Loading…
Reference in New Issue