fix: credential ID starts from 1 to avoid ID=0 issue
- InitCredentialStore nextID defaults to 1 - Auto-migrate existing ID=0 credentials on load - Add public Save() method for migration persistence
This commit is contained in:
@@ -79,6 +79,22 @@ func InitCredentialStore(cfg *Config) {
|
|||||||
log.Printf("No existing credential store: %v, starting fresh", err)
|
log.Printf("No existing credential store: %v, starting fresh", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check if load triggered ID migration and persist
|
||||||
|
CredStore.mu.RLock()
|
||||||
|
needsSave := false
|
||||||
|
for _, c := range CredStore.data {
|
||||||
|
if c.ID == 0 {
|
||||||
|
needsSave = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
CredStore.mu.RUnlock()
|
||||||
|
if needsSave {
|
||||||
|
if err := CredStore.Save(); err != nil {
|
||||||
|
log.Printf("Failed to persist credential migration: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
log.Println("Credential store initialized successfully")
|
log.Println("Credential store initialized successfully")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,8 +114,13 @@ func (s *CredentialStore) Load() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
s.data = make(map[uint]*Credential)
|
s.data = make(map[uint]*Credential)
|
||||||
s.nextID = 0
|
s.nextID = 1
|
||||||
for _, c := range creds {
|
for _, c := range creds {
|
||||||
|
// Auto-migrate legacy ID=0 entries
|
||||||
|
if c.ID == 0 {
|
||||||
|
c.ID = s.nextID
|
||||||
|
s.nextID++
|
||||||
|
}
|
||||||
s.data[c.ID] = c
|
s.data[c.ID] = c
|
||||||
if c.ID >= s.nextID {
|
if c.ID >= s.nextID {
|
||||||
s.nextID = c.ID + 1
|
s.nextID = c.ID + 1
|
||||||
@@ -120,6 +141,13 @@ func (s *CredentialStore) save() error {
|
|||||||
return os.WriteFile(s.path, data, 0600)
|
return os.WriteFile(s.path, data, 0600)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Save persists credential data to file (public, acquires write lock)
|
||||||
|
func (s *CredentialStore) Save() error {
|
||||||
|
s.mu.Lock()
|
||||||
|
defer s.mu.Unlock()
|
||||||
|
return s.save()
|
||||||
|
}
|
||||||
|
|
||||||
// GetAll returns all credentials
|
// GetAll returns all credentials
|
||||||
func (s *CredentialStore) GetAll() []*Credential {
|
func (s *CredentialStore) GetAll() []*Credential {
|
||||||
s.mu.RLock()
|
s.mu.RLock()
|
||||||
|
|||||||
Reference in New Issue
Block a user