From e67f16a621e289101f74bdaba46e4c05bbfe5af0 Mon Sep 17 00:00:00 2001 From: Qiao Han Date: Wed, 11 Sep 2024 13:38:44 +0800 Subject: [PATCH] feat: support delete all credentials on windows --- go.mod | 2 +- internal/utils/credentials/store_windows.go | 25 +++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 internal/utils/credentials/store_windows.go diff --git a/go.mod b/go.mod index fe4ede743..09427deeb 100644 --- a/go.mod +++ b/go.mod @@ -12,6 +12,7 @@ require ( github.com/charmbracelet/glamour v0.7.0 github.com/charmbracelet/lipgloss v0.12.1 github.com/containers/common v0.59.2 + github.com/danieljoos/wincred v1.2.1 github.com/deepmap/oapi-codegen/v2 v2.2.0 github.com/docker/cli v26.1.5+incompatible github.com/docker/docker v26.1.5+incompatible @@ -114,7 +115,6 @@ require ( github.com/curioswitch/go-reassign v0.2.0 // indirect github.com/cyphar/filepath-securejoin v0.2.5 // indirect github.com/daixiang0/gci v0.13.4 // indirect - github.com/danieljoos/wincred v1.2.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/denis-tingaikin/go-header v0.5.0 // indirect github.com/distribution/reference v0.6.0 // indirect diff --git a/internal/utils/credentials/store_windows.go b/internal/utils/credentials/store_windows.go new file mode 100644 index 000000000..420223dc2 --- /dev/null +++ b/internal/utils/credentials/store_windows.go @@ -0,0 +1,25 @@ +//go:build windows + +package credentials + +import ( + "github.com/danieljoos/wincred" + "github.com/go-errors/errors" +) + +func DeleteAll() error { + if err := assertKeyringSupported(); err != nil { + return err + } + creds, err := wincred.FilteredList(namespace + ":") + if err != nil { + return errors.Errorf("failed to list credentials: %w", err) + } + for _, c := range creds { + gc := wincred.GenericCredential{Credential: *c} + if err := gc.Delete(); err != nil { + return errors.Errorf("failed to delete all credentials: %w", err) + } + } + return nil +}