@@ -24,6 +24,7 @@ import (
2424)
2525
2626const keyFragmentSeed = "TSS_FRAGMENT_SEED"
27+ const addressBookName = "address_book"
2728
2829type 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
197200func (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
231223func (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+ }
0 commit comments