From 679c90b873f78b10a97a85ddd29b91bded9b0dd1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C3=A9ter=20Szil=C3=A1gyi?= <peterke@gmail.com>
Date: Wed, 29 Apr 2015 18:50:52 +0300
Subject: [PATCH] cmd/geth, cmd/utils, eth: internalize trusted node config
 file

---
 cmd/geth/main.go   |  1 -
 cmd/utils/flags.go |  6 ------
 eth/backend.go     | 43 ++++++++++++++++++++-----------------------
 3 files changed, 20 insertions(+), 30 deletions(-)

diff --git a/cmd/geth/main.go b/cmd/geth/main.go
index d9d1c1b15..036ee2d0c 100644
--- a/cmd/geth/main.go
+++ b/cmd/geth/main.go
@@ -233,7 +233,6 @@ JavaScript API. See https://github.com/ethereum/go-ethereum/wiki/Javascipt-Conso
 		utils.UnlockedAccountFlag,
 		utils.PasswordFileFlag,
 		utils.BootNodesFlag,
-		utils.TrustedNodesFlag,
 		utils.DataDirFlag,
 		utils.BlockchainVersionFlag,
 		utils.JSpathFlag,
diff --git a/cmd/utils/flags.go b/cmd/utils/flags.go
index f52bfc21f..62b49cddc 100644
--- a/cmd/utils/flags.go
+++ b/cmd/utils/flags.go
@@ -207,11 +207,6 @@ var (
 		Usage: "Space-separated enode URLs for p2p discovery bootstrap",
 		Value: "",
 	}
-	TrustedNodesFlag = cli.StringFlag{
-		Name:  "trustednodes",
-		Usage: "List of trusted nodes (either an enode list or path to a json file of enodes)",
-		Value: "",
-	}
 	NodeKeyFileFlag = cli.StringFlag{
 		Name:  "nodekey",
 		Usage: "P2P node key file",
@@ -298,7 +293,6 @@ func MakeEthConfig(clientID, version string, ctx *cli.Context) *eth.Config {
 		Shh:                ctx.GlobalBool(WhisperEnabledFlag.Name),
 		Dial:               true,
 		BootNodes:          ctx.GlobalString(BootNodesFlag.Name),
-		TrustedNodes:       ctx.GlobalString(TrustedNodesFlag.Name),
 	}
 }
 
diff --git a/eth/backend.go b/eth/backend.go
index f8d57c985..c69e4a27a 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -7,6 +7,7 @@ import (
 	"io/ioutil"
 	"os"
 	"path"
+	"path/filepath"
 	"strings"
 	"time"
 
@@ -39,6 +40,9 @@ var (
 		// ETH/DEV cpp-ethereum (poc-9.ethdev.com)
 		discover.MustParseNode("enode://487611428e6c99a11a9795a6abe7b529e81315ca6aad66e2a2fc76e3adf263faba0d35466c2f8f68d561dbefa8878d4df5f1f2ddb1fbeab7f42ffb8cd328bd4a@5.1.83.226:30303"),
 	}
+
+	// Path within <datadir> to search for the trusted node list
+	trustedNodes = "trusted-nodes.json"
 )
 
 type Config struct {
@@ -62,10 +66,6 @@ type Config struct {
 	// Space-separated list of discovery node URLs
 	BootNodes string
 
-	// Either a space-separated list of discovery node URLs, or a path to a json
-	// file containing such a list.
-	TrustedNodes string
-
 	// This key is used to identify the node on the network.
 	// If nil, an ephemeral key is used.
 	NodeKey *ecdsa.PrivateKey
@@ -105,30 +105,27 @@ func (cfg *Config) parseBootNodes() []*discover.Node {
 // parseTrustedNodes parses a list of discovery node URLs either given literally,
 // or loaded from a .json file.
 func (cfg *Config) parseTrustedNodes() []*discover.Node {
-	// Short circuit if no trusted nodes were given
-	if cfg.TrustedNodes == "" {
+	// Short circuit if no trusted node config is present
+	path := filepath.Join(cfg.DataDir, trustedNodes)
+	if _, err := os.Stat(path); err != nil {
+		fmt.Println("nodes", nil)
 		return nil
 	}
-	// Try to interpret the trusted node config as a .json file
-	if _, err := os.Stat(cfg.TrustedNodes); err == nil {
-		// Load the file from disk
-		blob, err := ioutil.ReadFile(cfg.TrustedNodes)
-		if err != nil {
-			glog.V(logger.Error).Infof("Failed to access trusted nodes: %v", err)
-			return nil
-		}
-		// Interpret the json contents
-		list := []string{}
-		if err := json.Unmarshal(blob, &list); err != nil {
-			glog.V(logger.Error).Infof("Failed to load trusted nodes: %v", err)
-			return nil
-		}
-		// Swap out the configuration for the actual nodes
-		cfg.TrustedNodes = strings.Join(list, " ")
+	// Load the trusted nodes from the config file
+	blob, err := ioutil.ReadFile(path)
+	if err != nil {
+		glog.V(logger.Error).Infof("Failed to access trusted nodes: %v", err)
+		return nil
+	}
+	nodelist := []string{}
+	if err := json.Unmarshal(blob, &nodelist); err != nil {
+		glog.V(logger.Error).Infof("Failed to load trusted nodes: %v", err)
+		return nil
 	}
+	fmt.Println("nodes", nodelist)
 	// Interpret the list as a discovery node array
 	var nodes []*discover.Node
-	for _, url := range strings.Split(cfg.TrustedNodes, " ") {
+	for _, url := range nodelist {
 		if url == "" {
 			continue
 		}
-- 
2.18.1