Skip to content

Commit c2b8cbf

Browse files
committed
Do not clobber address_book.seed file
1 parent 89fee4b commit c2b8cbf

File tree

2 files changed

+44
-26
lines changed

2 files changed

+44
-26
lines changed

storage/localstate_mgr.go

Lines changed: 43 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
)
2525

2626
const keyFragmentSeed = "TSS_FRAGMENT_SEED"
27+
const addressBookName = "address_book"
2728

2829
type LocalPartySaveData interface {
2930
}
@@ -173,7 +174,7 @@ func (fsm *FileStateMgr) SaveAddressBook(address map[peer.ID][]maddr.Multiaddr)
173174
if len(fsm.folder) < 1 {
174175
return errors.New("base file path is invalid")
175176
}
176-
filePathName := filepath.Join(fsm.folder, "address_book.seed")
177+
filePathName := filepath.Join(fsm.folder, addressBookName)
177178
var buf bytes.Buffer
178179

179180
for peer, addrs := range address {
@@ -191,41 +192,32 @@ func (fsm *FileStateMgr) SaveAddressBook(address map[peer.ID][]maddr.Multiaddr)
191192
}
192193
fsm.writeLock.Lock()
193194
defer fsm.writeLock.Unlock()
194-
return ioutil.WriteFile(filePathName, buf.Bytes(), 0o600)
195+
return os.WriteFile(filePathName, buf.Bytes(), 0o600)
195196
}
196197

198+
// RetrieveP2PAddresses loads addresses from both the seed address book
199+
// and state address book
197200
func (fsm *FileStateMgr) RetrieveP2PAddresses() ([]maddr.Multiaddr, error) {
198201
if len(fsm.folder) < 1 {
199202
return nil, errors.New("base file path is invalid")
200203
}
201-
filePathName := filepath.Join(fsm.folder, "address_book.seed")
202-
filePathName = filepath.Clean(filePathName)
203204

204-
_, err := os.Stat(filePathName)
205-
if err != nil {
206-
return nil, err
207-
}
208205
fsm.writeLock.RLock()
209-
input, err := ioutil.ReadFile(filePathName)
210-
if err != nil {
211-
fsm.writeLock.RUnlock()
206+
defer fsm.writeLock.RUnlock()
207+
208+
seedPath := filepath.Join(fsm.folder, "address_book.seed")
209+
seedAddresses, err := loadAddressBook(seedPath)
210+
if err != nil && !errors.Is(err, os.ErrNotExist) {
212211
return nil, err
213212
}
214-
fsm.writeLock.RUnlock()
215-
data := strings.Split(string(input), "\n")
216-
var peerAddresses []maddr.Multiaddr
217-
for _, el := range data {
218-
// we skip the empty entry
219-
if len(el) == 0 {
220-
continue
221-
}
222-
addr, err := maddr.NewMultiaddr(el)
223-
if err != nil {
224-
return nil, fmt.Errorf("invalid address in address book %w", err)
225-
}
226-
peerAddresses = append(peerAddresses, addr)
213+
214+
savePath := filepath.Join(fsm.folder, addressBookName)
215+
savedAddresses, err := loadAddressBook(savePath)
216+
if err != nil && !errors.Is(err, os.ErrNotExist) {
217+
return seedAddresses, err
227218
}
228-
return peerAddresses, nil
219+
220+
return append(seedAddresses, savedAddresses...), nil
229221
}
230222

231223
func (fsm *FileStateMgr) encryptFragment(plainText []byte) ([]byte, error) {
@@ -287,3 +279,29 @@ func getFragmentSeed(password string) ([]byte, error) {
287279
seed := h.Sum(nil)
288280
return seed, nil
289281
}
282+
283+
func loadAddressBook(path string) ([]maddr.Multiaddr, error) {
284+
path = filepath.Clean(path)
285+
_, err := os.Stat(path)
286+
if err != nil {
287+
return nil, err
288+
}
289+
input, err := os.ReadFile(path)
290+
if err != nil {
291+
return nil, err
292+
}
293+
data := strings.Split(string(input), "\n")
294+
var peerAddresses []maddr.Multiaddr
295+
for _, el := range data {
296+
// we skip the empty entry
297+
if len(el) == 0 {
298+
continue
299+
}
300+
addr, err := maddr.NewMultiaddr(el)
301+
if err != nil {
302+
return nil, fmt.Errorf("invalid address in address book: %w", err)
303+
}
304+
peerAddresses = append(peerAddresses, addr)
305+
}
306+
return peerAddresses, nil
307+
}

storage/localstate_mgr_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func (s *FileStateMgrTestSuite) TestSaveAddressBook(c *C) {
9595
c.Assert(err, IsNil)
9696
c.Assert(fsm, NotNil)
9797
c.Assert(fsm.SaveAddressBook(testAddresses), IsNil)
98-
filePathName := filepath.Join(f, "address_book.seed")
98+
filePathName := filepath.Join(f, addressBookName)
9999
_, err = os.Stat(filePathName)
100100
c.Assert(err, IsNil)
101101
item, err := fsm.RetrieveP2PAddresses()

0 commit comments

Comments
 (0)