Add NodeInfoPrivacy option for not including defaults, and also check for null/"null" instead of "hide"

This commit is contained in:
Neil Alexander 2018-12-21 09:56:34 +00:00
parent 60549cfa09
commit 586deed0f9
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
4 changed files with 17 additions and 10 deletions

View file

@ -96,29 +96,34 @@ func (m *nodeinfo) getNodeInfo() nodeinfoPayload {
}
// Set the current node's nodeinfo
func (m *nodeinfo) setNodeInfo(given interface{}) error {
func (m *nodeinfo) setNodeInfo(given interface{}, privacy bool) error {
m.myNodeInfoMutex.Lock()
defer m.myNodeInfoMutex.Unlock()
newnodeinfo := map[string]interface{}{
defaults := map[string]interface{}{
"buildname": GetBuildName(),
"buildversion": GetBuildVersion(),
"buildplatform": runtime.GOOS,
"buildarch": runtime.GOARCH,
}
newnodeinfo := make(map[string]interface{})
if !privacy {
for k, v := range defaults {
newnodeinfo[k] = v
}
}
if nodeinfomap, ok := given.(map[string]interface{}); ok {
for key, value := range nodeinfomap {
if _, ok := newnodeinfo[key]; ok {
if value == "hide" {
if _, ok := defaults[key]; ok {
if strvalue, strok := value.(string); strok && strvalue == "null" || value == nil {
delete(newnodeinfo, key)
}
continue
}
if value != "hide" {
newnodeinfo[key] = value
}
newnodeinfo[key] = value
}
}
if newjson, err := json.Marshal(newnodeinfo); err == nil {
m.core.log.Println(string(newjson))
if len(newjson) > 16384 {
return errors.New("NodeInfo exceeds max length of 16384 bytes")
}