node: Fix url verification bug where <ip>:<port> is not supported (#3719)

* node: update url verification logic to support ip:port format

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: add test case for ip:port

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: change neon rpc scheme from websocket to HTTP

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: update comment to be more accurate

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: remove neon from devmode

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: ignore internal xlabs testing file

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: add ws:// prefix to Sui

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: add ws:// and wss:// prefixes to Sui schemes

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

* node: update testnet yaml naming

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>

---------

Signed-off-by: bingyuyap <bingyu.yap.21@gmail.com>
This commit is contained in:
Bing Yu 2024-01-19 03:14:59 +08:00 committed by GitHub
parent c7756f88c4
commit 3d16cca785
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 13 additions and 12 deletions

4
.gitignore vendored
View File

@ -31,4 +31,6 @@ devnet-consts.json
/ethereum/cache/
sui.log.*
sui/examples/wrapped_coin
*.prof
*.prof
# Only used for internal testing
*.testnet.yaml

View File

@ -188,7 +188,7 @@ def build_node_yaml():
"--suiMoveEventType",
"0x7f6cebb8a489654d7a759483bd653c4be3e5ccfef17a8b5fd3ba98bd072fabc3::publish_message::WormholeMessage",
"--suiWS",
"sui:9000",
"ws://sui:9000",
]
if evm2:

View File

@ -99,8 +99,6 @@ spec:
- ws://eth-devnet:8545
- --optimismRPC
- ws://eth-devnet:8545
- --neonRPC
- ws://eth-devnet:8545
- --baseRPC
- ws://eth-devnet:8545
- --scrollRPC

View File

@ -283,7 +283,7 @@ func init() {
moonbeamRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "moonbeamRPC", "Moonbeam RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"})
moonbeamContract = NodeCmd.Flags().String("moonbeamContract", "", "Moonbeam contract address")
neonRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "neonRPC", "Neon RPC URL", "ws://eth-devnet:8545", []string{"ws", "wss"})
neonRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "neonRPC", "Neon RPC URL", "http://eth-devnet:8545", []string{"http", "https"})
neonContract = NodeCmd.Flags().String("neonContract", "", "Neon contract address")
terraWS = node.RegisterFlagWithValidationOrFail(NodeCmd, "terraWS", "Path to terrad root for websocket connection", "ws://terra-terrad:26657/websocket", []string{"ws", "wss"})
@ -336,7 +336,7 @@ func init() {
aptosHandle = NodeCmd.Flags().String("aptosHandle", "", "aptos handle")
suiRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "suiRPC", "Sui RPC URL", "http://sui:9000", []string{"http", "https"})
suiWS = node.RegisterFlagWithValidationOrFail(NodeCmd, "suiWS", "Sui WS URL", "sui:9000", []string{""})
suiWS = node.RegisterFlagWithValidationOrFail(NodeCmd, "suiWS", "Sui WS URL", "ws://sui:9000", []string{"ws", "wss"})
suiMoveEventType = NodeCmd.Flags().String("suiMoveEventType", "", "Sui move event type for publish_message")
solanaRPC = node.RegisterFlagWithValidationOrFail(NodeCmd, "solanaRPC", "Solana RPC URL (required)", "http://solana-devnet:8899", []string{"http", "https"})
@ -521,7 +521,6 @@ func runNode(cmd *cobra.Command, args []string) {
*klaytnContract = unsafeDevModeEvmContractAddress(*klaytnContract)
*celoContract = unsafeDevModeEvmContractAddress(*celoContract)
*moonbeamContract = unsafeDevModeEvmContractAddress(*moonbeamContract)
*neonContract = unsafeDevModeEvmContractAddress(*neonContract)
*arbitrumContract = unsafeDevModeEvmContractAddress(*arbitrumContract)
*optimismContract = unsafeDevModeEvmContractAddress(*optimismContract)
*baseContract = unsafeDevModeEvmContractAddress(*baseContract)

View File

@ -21,17 +21,18 @@ func hasKnownSchemePrefix(urlStr string) bool {
}
func validateURL(urlStr string, validSchemes []string) bool {
parsedURL, err := url.Parse(urlStr)
if err != nil {
return false
}
// If no scheme is required, validate host:port format
if len(validSchemes) == 1 && validSchemes[0] == "" {
host, port, err := net.SplitHostPort(urlStr)
return err == nil && host != "" && port != "" && !hasKnownSchemePrefix(urlStr)
}
// url.Parse() has to come later because it will fail if the scheme is empty
parsedURL, err := url.Parse(urlStr)
if err != nil {
return false
}
for _, scheme := range validSchemes {
if parsedURL.Scheme == scheme {
return true

View File

@ -25,6 +25,7 @@ func TestValidateURL(t *testing.T) {
{[]string{""}, "example.com:8080", true},
{[]string{""}, "http://invalid-scheme:8080", false},
{[]string{""}, "ws://invalid-scheme:8080", false},
{[]string{""}, "170.0.0.1:8080", true},
}
for _, test := range tests {