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:
2026-07-24 19:13:26 +08:00
parent 285df5a12f
commit 471fe76384
+29 -1
View File
@@ -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()