51 lines
1.0 KiB
Go
51 lines
1.0 KiB
Go
//go:build (dragonfly && cgo) || (freebsd && cgo) || linux || netbsd || openbsd
|
|
|
|
package config
|
|
|
|
import (
|
|
"strings"
|
|
|
|
ss "github.com/zalando/go-keyring/secret_service"
|
|
)
|
|
|
|
func legacyKeyringCredentialValue(key string) (string, bool) {
|
|
key = strings.TrimSpace(key)
|
|
if key == "" {
|
|
return "", false
|
|
}
|
|
|
|
svc, err := ss.NewSecretService()
|
|
if err != nil {
|
|
return "", false
|
|
}
|
|
defer svc.Conn.Close()
|
|
|
|
collection := svc.GetLoginCollection()
|
|
search := map[string]string{
|
|
"username": key,
|
|
"service": credentialsKeyringService,
|
|
}
|
|
if err := svc.Unlock(collection.Path()); err != nil {
|
|
return "", false
|
|
}
|
|
results, err := svc.SearchItems(collection, search)
|
|
if err != nil || len(results) == 0 {
|
|
return "", false
|
|
}
|
|
|
|
session, err := svc.OpenSession()
|
|
if err != nil {
|
|
return "", false
|
|
}
|
|
defer svc.Close(session)
|
|
|
|
if err := svc.Unlock(results[0]); err != nil {
|
|
return "", false
|
|
}
|
|
secret, err := svc.GetSecret(results[0], session.Path())
|
|
if err != nil || secret == nil || len(secret.Value) == 0 {
|
|
return "", false
|
|
}
|
|
return string(secret.Value), true
|
|
}
|