Files
UNITRONIX 898fcf7b88 feat(org): encrypted peer credential vault for shared address book
Store unattended presets AES-256-GCM in org_peer_credentials (main DB),
admin Set/Clear in Organizations Address Book, runtime inject into
GET /api/ab and Web Remote connect-password auto-fill. Secrets never
persist in shared AB JSON.

Refs #367

Thanks: INSOLVE (Honorary); Marco Jakobs (@jacotec); MyNameisStitch (@MyNameisStitch); Redspin (@playerumpknow)
2026-08-10 22:18:39 +02:00

34 lines
692 B
Go

package api
import (
"encoding/json"
)
// stripSecretsFromOrgAddressBook removes password/hash fields before persisting
// org shared AB JSON so secrets stay only in org_peer_credentials (#367).
func stripSecretsFromOrgAddressBook(data string) string {
ab := parseAddressBookMap(data)
peers := toPeerSlice(ab["peers"])
changed := false
for i, p := range peers {
if _, ok := p["password"]; ok {
delete(p, "password")
changed = true
}
if _, ok := p["hash"]; ok {
delete(p, "hash")
changed = true
}
peers[i] = p
}
if !changed {
return data
}
ab["peers"] = peersToAny(peers)
out, err := json.Marshal(ab)
if err != nil {
return data
}
return string(out)
}