cmd/puppeth: use dumb textual IP filtering

上级 3680cd59
...@@ -302,8 +302,10 @@ func (w *wizard) readJSON() string { ...@@ -302,8 +302,10 @@ func (w *wizard) readJSON() string {
} }
// readIPAddress reads a single line from stdin, trimming if from spaces and // readIPAddress reads a single line from stdin, trimming if from spaces and
// converts it to a network IP address. // returning it if it's convertible to an IP address. The reason for keeping
func (w *wizard) readIPAddress() net.IP { // the user input format instead of returning a Go net.IP is to match with
// weird formats used by ethstats, which compares IPs textually, not by value.
func (w *wizard) readIPAddress() string {
for { for {
// Read the IP address from the user // Read the IP address from the user
fmt.Printf("> ") fmt.Printf("> ")
...@@ -312,14 +314,13 @@ func (w *wizard) readIPAddress() net.IP { ...@@ -312,14 +314,13 @@ func (w *wizard) readIPAddress() net.IP {
log.Crit("Failed to read user input", "err", err) log.Crit("Failed to read user input", "err", err)
} }
if text = strings.TrimSpace(text); text == "" { if text = strings.TrimSpace(text); text == "" {
return nil return ""
} }
// Make sure it looks ok and return it if so // Make sure it looks ok and return it if so
ip := net.ParseIP(text) if ip := net.ParseIP(text); ip == nil {
if ip == nil {
log.Error("Invalid IP address, please retry") log.Error("Invalid IP address, please retry")
continue continue
} }
return ip return text
} }
} }
...@@ -18,6 +18,7 @@ package main ...@@ -18,6 +18,7 @@ package main
import ( import (
"fmt" "fmt"
"sort"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
) )
...@@ -64,17 +65,37 @@ func (w *wizard) deployEthstats() { ...@@ -64,17 +65,37 @@ func (w *wizard) deployEthstats() {
fmt.Println() fmt.Println()
fmt.Printf("Keep existing IP %v blacklist (y/n)? (default = yes)\n", infos.banned) fmt.Printf("Keep existing IP %v blacklist (y/n)? (default = yes)\n", infos.banned)
if w.readDefaultString("y") != "y" { if w.readDefaultString("y") != "y" {
infos.banned = nil // The user might want to clear the entire list, although generally probably not
fmt.Println()
fmt.Printf("Clear out blacklist and start over (y/n)? (default = no)\n")
if w.readDefaultString("n") != "n" {
infos.banned = nil
}
// Offer the user to explicitly add/remove certain IP addresses
fmt.Println()
fmt.Println("Which additional IP addresses should be blacklisted?")
for {
if ip := w.readIPAddress(); ip != "" {
infos.banned = append(infos.banned, ip)
continue
}
break
}
fmt.Println() fmt.Println()
fmt.Println("Which IP addresses should be blacklisted?") fmt.Println("Which IP addresses should not be blacklisted?")
for { for {
if ip := w.readIPAddress(); ip != nil { if ip := w.readIPAddress(); ip != "" {
infos.banned = append(infos.banned, ip.String()) for i, addr := range infos.banned {
if ip == addr {
infos.banned = append(infos.banned[:i], infos.banned[i+1:]...)
break
}
}
continue continue
} }
break break
} }
sort.Strings(infos.banned)
} }
// Try to deploy the ethstats server on the host // Try to deploy the ethstats server on the host
trusted := make([]string, 0, len(w.servers)) trusted := make([]string, 0, len(w.servers))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册