@@ -2,6 +2,7 @@ package sqlite
2
2
3
3
import (
4
4
"context"
5
+ "errors"
5
6
"fmt"
6
7
"log"
7
8
"os"
@@ -99,6 +100,20 @@ func (s Sqlite) Add(creds *credentials.Credentials) error {
99
100
return fmt .Errorf ("failed to encrypt credential: %w" , err )
100
101
}
101
102
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
+
102
117
if err := s .db .Create (& cred ).Error ; err != nil {
103
118
return fmt .Errorf ("failed to create credential: %w" , err )
104
119
}
@@ -124,6 +139,9 @@ func (s Sqlite) Get(serverURL string) (string, string, error) {
124
139
err error
125
140
)
126
141
if err = s .db .Where ("server_url = ?" , serverURL ).First (& cred ).Error ; err != nil {
142
+ if errors .Is (err , gorm .ErrRecordNotFound ) {
143
+ return "" , "" , nil
144
+ }
127
145
return "" , "" , fmt .Errorf ("failed to get credential: %w" , err )
128
146
}
129
147
@@ -141,6 +159,9 @@ func (s Sqlite) List() (map[string]string, error) {
141
159
err error
142
160
)
143
161
if err = s .db .Find (& creds ).Error ; err != nil {
162
+ if errors .Is (err , gorm .ErrRecordNotFound ) {
163
+ return nil , nil
164
+ }
144
165
return nil , fmt .Errorf ("failed to list credentials: %w" , err )
145
166
}
146
167
0 commit comments