Skip to content
This repository was archived by the owner on Nov 5, 2024. It is now read-only.

Commit 442feb3

Browse files
committed
fix: handle credential refresh and record not found errors
Signed-off-by: Grant Linville <[email protected]>
1 parent f218fb6 commit 442feb3

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

pkg/sqlite/sqlite.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package sqlite
22

33
import (
44
"context"
5+
"errors"
56
"fmt"
67
"log"
78
"os"
@@ -99,6 +100,20 @@ func (s Sqlite) Add(creds *credentials.Credentials) error {
99100
return fmt.Errorf("failed to encrypt credential: %w", err)
100101
}
101102

103+
// First, we need to check if a credential with this serverURL already exists.
104+
// If it does, delete it first.
105+
// This would normally happen during a credential refresh.
106+
var existing GptscriptCredential
107+
if err := s.db.Where("server_url = ?", cred.ServerURL).First(&existing).Error; err != nil {
108+
if !errors.Is(err, gorm.ErrRecordNotFound) {
109+
return fmt.Errorf("failed to get existing credential: %w", err)
110+
}
111+
} else {
112+
if err := s.db.Delete(&existing).Error; err != nil {
113+
return fmt.Errorf("failed to delete existing credential: %w", err)
114+
}
115+
}
116+
102117
if err := s.db.Create(&cred).Error; err != nil {
103118
return fmt.Errorf("failed to create credential: %w", err)
104119
}
@@ -124,6 +139,9 @@ func (s Sqlite) Get(serverURL string) (string, string, error) {
124139
err error
125140
)
126141
if err = s.db.Where("server_url = ?", serverURL).First(&cred).Error; err != nil {
142+
if errors.Is(err, gorm.ErrRecordNotFound) {
143+
return "", "", nil
144+
}
127145
return "", "", fmt.Errorf("failed to get credential: %w", err)
128146
}
129147

@@ -141,6 +159,9 @@ func (s Sqlite) List() (map[string]string, error) {
141159
err error
142160
)
143161
if err = s.db.Find(&creds).Error; err != nil {
162+
if errors.Is(err, gorm.ErrRecordNotFound) {
163+
return nil, nil
164+
}
144165
return nil, fmt.Errorf("failed to list credentials: %w", err)
145166
}
146167

0 commit comments

Comments
 (0)