cmd/puppeth: use dumb textual IP filtering
This commit is contained in:
parent
3680cd5926
commit
b45cc0c9e8
@ -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 {
|
|||||||
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
|
|||||||
|
|
||||||
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() {
|
|||||||
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.Println()
|
||||||
fmt.Println("Which IP addresses should be blacklisted?")
|
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 {
|
for {
|
||||||
if ip := w.readIPAddress(); ip != nil {
|
if ip := w.readIPAddress(); ip != "" {
|
||||||
infos.banned = append(infos.banned, ip.String())
|
infos.banned = append(infos.banned, ip)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
fmt.Println()
|
||||||
|
fmt.Println("Which IP addresses should not be blacklisted?")
|
||||||
|
for {
|
||||||
|
if ip := w.readIPAddress(); ip != "" {
|
||||||
|
for i, addr := range infos.banned {
|
||||||
|
if ip == addr {
|
||||||
|
infos.banned = append(infos.banned[:i], infos.banned[i+1:]...)
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
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))
|
||||||
|
Loading…
Reference in New Issue
Block a user