Skip to content

Commit

Permalink
fix: handle credential refresh and record not found errors
Browse files Browse the repository at this point in the history
Signed-off-by: Grant Linville <[email protected]>
  • Loading branch information
g-linville committed Sep 23, 2024
1 parent f218fb6 commit 442feb3
Showing 1 changed file with 21 additions and 0 deletions.
21 changes: 21 additions & 0 deletions pkg/sqlite/sqlite.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package sqlite

import (
"context"
"errors"
"fmt"
"log"
"os"
Expand Down Expand Up @@ -99,6 +100,20 @@ func (s Sqlite) Add(creds *credentials.Credentials) error {
return fmt.Errorf("failed to encrypt credential: %w", err)
}

// First, we need to check if a credential with this serverURL already exists.
// If it does, delete it first.
// This would normally happen during a credential refresh.
var existing GptscriptCredential
if err := s.db.Where("server_url = ?", cred.ServerURL).First(&existing).Error; err != nil {
if !errors.Is(err, gorm.ErrRecordNotFound) {
return fmt.Errorf("failed to get existing credential: %w", err)
}
} else {
if err := s.db.Delete(&existing).Error; err != nil {
return fmt.Errorf("failed to delete existing credential: %w", err)
}
}

if err := s.db.Create(&cred).Error; err != nil {
return fmt.Errorf("failed to create credential: %w", err)
}
Expand All @@ -124,6 +139,9 @@ func (s Sqlite) Get(serverURL string) (string, string, error) {
err error
)
if err = s.db.Where("server_url = ?", serverURL).First(&cred).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return "", "", nil
}
return "", "", fmt.Errorf("failed to get credential: %w", err)
}

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

Expand Down

0 comments on commit 442feb3

Please sign in to comment.