lnd+server: Allow configurable Node Alias and Color

This commit sets the Node's Alias and Color to the values set in config.
This commit is contained in:
Benjamin Congdon 2017-12-15 17:06:20 -06:00
parent a40ee8fe8a
commit 92ac81b3b0
No known key found for this signature in database
GPG Key ID: 148FEE4C2C805D4A
2 changed files with 67 additions and 10 deletions

View File

@ -220,14 +220,19 @@ func newServer(listenAddrs []string, chanDB *channeldb.DB, cc *chainControl,
chanGraph := chanDB.ChannelGraph()
defaultColor := color.RGBA{ // #3399FF
R: 51,
G: 153,
B: 255,
// Parse node color from configuration.
color, err := parseHexColor(cfg.Color)
if err != nil {
srvrLog.Errorf("unable to parse color: %v\n", err)
return nil, err
}
// TODO(roasbeef): make alias configurable
alias, err := lnwire.NewNodeAlias(hex.EncodeToString(serializedPubKey[:10]))
// If no alias is provided, default to first 10 characters of public key
alias := cfg.Alias
if alias == "" {
alias = hex.EncodeToString(serializedPubKey[:10])
}
nodeAlias, err := lnwire.NewNodeAlias(alias)
if err != nil {
return nil, err
}
@ -236,9 +241,9 @@ func newServer(listenAddrs []string, chanDB *channeldb.DB, cc *chainControl,
LastUpdate: time.Now(),
Addresses: selfAddrs,
PubKey: privKey.PubKey(),
Alias: alias.String(),
Alias: nodeAlias.String(),
Features: s.globalFeatures,
Color: defaultColor,
Color: color,
}
// If our information has changed since our last boot, then we'll
@ -250,9 +255,9 @@ func newServer(listenAddrs []string, chanDB *channeldb.DB, cc *chainControl,
Timestamp: uint32(selfNode.LastUpdate.Unix()),
Addresses: selfNode.Addresses,
NodeID: selfNode.PubKey,
Alias: alias,
Alias: nodeAlias,
Features: selfNode.Features.RawFeatureVector,
RGBColor: defaultColor,
RGBColor: color,
}
selfNode.AuthSig, err = discovery.SignAnnouncement(s.nodeSigner,
s.identityPriv.PubKey(), nodeAnn,
@ -1703,3 +1708,21 @@ func (s *server) Peers() []*peer {
return peers
}
// parseHexColor takes a hex string representation of a color in the
// form "#RRGGBB", parses the hex color values, and returns a color.RGBA
// struct of the same color.
func parseHexColor(colorStr string) (color.RGBA, error) {
if len(colorStr) != 7 || colorStr[0] != '#' {
return color.RGBA{}, errors.New("Color must be in format #RRGGBB")
}
// Decode the hex color string to bytes.
// The resulting byte array is in the form [R, G, B].
colorBytes, err := hex.DecodeString(colorStr[1:])
if err != nil {
return color.RGBA{}, err
}
return color.RGBA{R: colorBytes[0], G: colorBytes[1], B: colorBytes[2]}, nil
}

34
server_test.go Normal file
View File

@ -0,0 +1,34 @@
package main
import "testing"
func TestParseHexColor(t *testing.T) {
empty := ""
color, err := parseHexColor(empty)
if err == nil {
t.Fatalf("Empty color string should return error, but did not")
}
tooLong := "#1234567"
color, err = parseHexColor(tooLong)
if err == nil {
t.Fatalf("Invalid color string %s should return error, but did not",
tooLong)
}
invalidFormat := "$123456"
color, err = parseHexColor(invalidFormat)
if err == nil {
t.Fatalf("Invalid color string %s should return error, but did not",
invalidFormat)
}
valid := "#C0FfeE"
color, err = parseHexColor(valid)
if err != nil {
t.Fatalf("Color %s valid to parse: %s", valid, err)
}
if color.R != 0xc0 || color.G != 0xff || color.B != 0xee {
t.Fatalf("Color %s incorrectly parsed as %v", valid, color)
}
}