swarm: multiple --ens-api flags
Allow multiple --ens-api flags to be specified with value format [tld:][contract-addr@]url. Backward compatibility with only one --ens-api flag and --ens-addr flag is preserved and conflict cases are handled: - multiple --ens-api with --ens-addr returns an error - single --ens-api with contract address and --ens-addr with different contract address returns an error Previously implemented --ens-endpoint is removed. Its functionality is replaced with multiple --ens-api flags.
This commit is contained in:
parent
057af8c5c8
commit
7898e0d585
@ -97,14 +97,9 @@ var (
|
|||||||
Name: "sync",
|
Name: "sync",
|
||||||
Usage: "Swarm Syncing enabled (default true)",
|
Usage: "Swarm Syncing enabled (default true)",
|
||||||
}
|
}
|
||||||
EnsEndpointsFlag = cli.StringSliceFlag{
|
EnsAPIFlag = cli.StringSliceFlag{
|
||||||
Name: "ens-endpoint",
|
|
||||||
Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url",
|
|
||||||
}
|
|
||||||
EnsAPIFlag = cli.StringFlag{
|
|
||||||
Name: "ens-api",
|
Name: "ens-api",
|
||||||
Usage: "URL of the Ethereum API provider to use for ENS record lookups",
|
Usage: "ENS API endpoint for a TLD and with contract address, can be repeated, format [tld:][contract-addr@]url",
|
||||||
Value: node.DefaultIPCEndpoint("geth"),
|
|
||||||
}
|
}
|
||||||
EnsAddrFlag = cli.StringFlag{
|
EnsAddrFlag = cli.StringFlag{
|
||||||
Name: "ens-addr",
|
Name: "ens-addr",
|
||||||
@ -323,7 +318,6 @@ DEPRECATED: use 'swarm db clean'.
|
|||||||
utils.PasswordFileFlag,
|
utils.PasswordFileFlag,
|
||||||
// bzzd-specific flags
|
// bzzd-specific flags
|
||||||
CorsStringFlag,
|
CorsStringFlag,
|
||||||
EnsEndpointsFlag,
|
|
||||||
EnsAPIFlag,
|
EnsAPIFlag,
|
||||||
EnsAddrFlag,
|
EnsAddrFlag,
|
||||||
SwarmConfigPathFlag,
|
SwarmConfigPathFlag,
|
||||||
@ -445,8 +439,7 @@ func registerBzzService(ctx *cli.Context, stack *node.Node) {
|
|||||||
utils.Fatalf("SWAP is enabled but --swap-api is not set")
|
utils.Fatalf("SWAP is enabled but --swap-api is not set")
|
||||||
}
|
}
|
||||||
|
|
||||||
ensEndpoints := ctx.GlobalStringSlice(EnsEndpointsFlag.Name)
|
ensAPIs := ctx.GlobalStringSlice(EnsAPIFlag.Name)
|
||||||
ensapi := ctx.GlobalString(EnsAPIFlag.Name)
|
|
||||||
ensAddr := ctx.GlobalString(EnsAddrFlag.Name)
|
ensAddr := ctx.GlobalString(EnsAddrFlag.Name)
|
||||||
|
|
||||||
cors := ctx.GlobalString(CorsStringFlag.Name)
|
cors := ctx.GlobalString(CorsStringFlag.Name)
|
||||||
@ -462,21 +455,40 @@ func registerBzzService(ctx *cli.Context, stack *node.Node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ensClientConfigs := []swarm.ENSClientConfig{}
|
ensClientConfigs := []swarm.ENSClientConfig{}
|
||||||
if ensapi != "" {
|
switch len(ensAPIs) {
|
||||||
|
case 0:
|
||||||
ensClientConfigs = append(ensClientConfigs, swarm.ENSClientConfig{
|
ensClientConfigs = append(ensClientConfigs, swarm.ENSClientConfig{
|
||||||
Endpoint: ensapi,
|
Endpoint: node.DefaultIPCEndpoint("geth"),
|
||||||
ContractAddress: ensAddr,
|
ContractAddress: ensAddr,
|
||||||
})
|
})
|
||||||
|
case 1:
|
||||||
|
// Check if only one --ens-api is specified in order to use --ens-addr value
|
||||||
|
// to preserve the backward compatibility with single --ens-api flag.
|
||||||
|
// Multiple
|
||||||
|
c := parseFlagEnsAPI(ensAPIs[0])
|
||||||
|
if ensAddr != "" {
|
||||||
|
// If contract address is specified in both cases, check for conflict.
|
||||||
|
if c.ContractAddress != "" && ensAddr != c.ContractAddress {
|
||||||
|
utils.Fatalf("--ens-addr flag in conflict with --ens-api flag contract address")
|
||||||
}
|
}
|
||||||
if ensEndpoints != nil {
|
c.ContractAddress = ensAddr
|
||||||
for _, s := range ensEndpoints {
|
}
|
||||||
|
ensClientConfigs = append(ensClientConfigs, c)
|
||||||
|
default:
|
||||||
|
// Backward compatibility with single --ens-api flag and --ens-addr is preserved.
|
||||||
|
// Check for case where multiple --ens-api flags are set with --ens-addr where
|
||||||
|
// the specified contract address is not clear to which api belongs.
|
||||||
|
if ensAddr != "" {
|
||||||
|
utils.Fatalf("--ens-addr flag can not be used with multiple --ens-api flags")
|
||||||
|
}
|
||||||
|
for _, s := range ensAPIs {
|
||||||
if s != "" {
|
if s != "" {
|
||||||
ensClientConfigs = append(ensClientConfigs, parseFlagEnsEndpoint(s))
|
ensClientConfigs = append(ensClientConfigs, parseFlagEnsAPI(s))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(ensClientConfigs) == 0 {
|
if len(ensClientConfigs) == 0 {
|
||||||
log.Warn("No ENS, please specify non-empty --ens-api or --ens-endpoint to use domain name resolution")
|
log.Warn("No ENS, please specify non-empty --ens-api to use domain name resolution")
|
||||||
}
|
}
|
||||||
|
|
||||||
return swarm.NewSwarm(ctx, swapClient, ensClientConfigs, bzzconfig, swapEnabled, syncEnabled, cors)
|
return swarm.NewSwarm(ctx, swapClient, ensClientConfigs, bzzconfig, swapEnabled, syncEnabled, cors)
|
||||||
@ -486,7 +498,7 @@ func registerBzzService(ctx *cli.Context, stack *node.Node) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseFlagEnsEndpoint(s string) swarm.ENSClientConfig {
|
func parseFlagEnsAPI(s string) swarm.ENSClientConfig {
|
||||||
isAllLetterString := func(s string) bool {
|
isAllLetterString := func(s string) bool {
|
||||||
for _, r := range s {
|
for _, r := range s {
|
||||||
if !unicode.IsLetter(r) {
|
if !unicode.IsLetter(r) {
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"github.com/ethereum/go-ethereum/swarm"
|
"github.com/ethereum/go-ethereum/swarm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestParseFlagEnsEndpoint(t *testing.T) {
|
func TestParseFlagEnsAPI(t *testing.T) {
|
||||||
for _, x := range []struct {
|
for _, x := range []struct {
|
||||||
description string
|
description string
|
||||||
value string
|
value string
|
||||||
@ -126,7 +126,7 @@ func TestParseFlagEnsEndpoint(t *testing.T) {
|
|||||||
},
|
},
|
||||||
} {
|
} {
|
||||||
t.Run(x.description, func(t *testing.T) {
|
t.Run(x.description, func(t *testing.T) {
|
||||||
config := parseFlagEnsEndpoint(x.value)
|
config := parseFlagEnsAPI(x.value)
|
||||||
if config.Endpoint != x.config.Endpoint {
|
if config.Endpoint != x.config.Endpoint {
|
||||||
t.Errorf("expected Endpoint %q, got %q", x.config.Endpoint, config.Endpoint)
|
t.Errorf("expected Endpoint %q, got %q", x.config.Endpoint, config.Endpoint)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user