Skip to content

Commit f09e79d

Browse files
authored
Merge pull request #278 from thaJeztah/osxkeychain_typed_error
osxkeychain: Delete(): return typed errors
2 parents 9ff5b61 + b21b69c commit f09e79d

File tree

2 files changed

+27
-18
lines changed

2 files changed

+27
-18
lines changed

osxkeychain/osxkeychain_darwin.go

Lines changed: 20 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ type Osxkeychain struct{}
3434

3535
// Add adds new credentials to the keychain.
3636
func (h Osxkeychain) Add(creds *credentials.Credentials) error {
37-
h.Delete(creds.ServerURL)
37+
_ = h.Delete(creds.ServerURL) // ignore errors as existing credential may not exist.
3838

3939
s, err := splitServer(creds.ServerURL)
4040
if err != nil {
@@ -66,10 +66,16 @@ func (h Osxkeychain) Delete(serverURL string) error {
6666
}
6767
defer freeServer(s)
6868

69-
errMsg := C.keychain_delete(s)
70-
if errMsg != nil {
69+
if errMsg := C.keychain_delete(s); errMsg != nil {
7170
defer C.free(unsafe.Pointer(errMsg))
72-
return errors.New(C.GoString(errMsg))
71+
switch goMsg := C.GoString(errMsg); goMsg {
72+
case errCredentialsNotFound:
73+
return credentials.NewErrCredentialsNotFound()
74+
case errInteractionNotAllowed:
75+
return ErrInteractionNotAllowed
76+
default:
77+
return errors.New(goMsg)
78+
}
7379
}
7480

7581
return nil
@@ -93,15 +99,14 @@ func (h Osxkeychain) Get(serverURL string) (string, string, error) {
9399
errMsg := C.keychain_get(s, &usernameLen, &username, &secretLen, &secret)
94100
if errMsg != nil {
95101
defer C.free(unsafe.Pointer(errMsg))
96-
goMsg := C.GoString(errMsg)
97-
if goMsg == errCredentialsNotFound {
102+
switch goMsg := C.GoString(errMsg); goMsg {
103+
case errCredentialsNotFound:
98104
return "", "", credentials.NewErrCredentialsNotFound()
99-
}
100-
if goMsg == errInteractionNotAllowed {
105+
case errInteractionNotAllowed:
101106
return "", "", ErrInteractionNotAllowed
107+
default:
108+
return "", "", errors.New(goMsg)
102109
}
103-
104-
return "", "", errors.New(goMsg)
105110
}
106111

107112
user := C.GoStringN(username, C.int(usernameLen))
@@ -124,15 +129,14 @@ func (h Osxkeychain) List() (map[string]string, error) {
124129
defer C.freeListData(&acctsC, listLenC)
125130
if errMsg != nil {
126131
defer C.free(unsafe.Pointer(errMsg))
127-
goMsg := C.GoString(errMsg)
128-
if goMsg == errCredentialsNotFound {
132+
switch goMsg := C.GoString(errMsg); goMsg {
133+
case errCredentialsNotFound:
129134
return make(map[string]string), nil
130-
}
131-
if goMsg == errInteractionNotAllowed {
135+
case errInteractionNotAllowed:
132136
return nil, ErrInteractionNotAllowed
137+
default:
138+
return nil, errors.New(goMsg)
133139
}
134-
135-
return nil, errors.New(goMsg)
136140
}
137141

138142
var listLen int

osxkeychain/osxkeychain_darwin_test.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,14 @@ func TestOSXKeychainHelperStoreRetrieve(t *testing.T) {
205205
}
206206

207207
func TestMissingCredentials(t *testing.T) {
208+
const nonExistingCred = "https://adsfasdf.invalid/asdfsdddd"
208209
helper := Osxkeychain{}
209-
_, _, err := helper.Get("https://adsfasdf.wrewerwer.com/asdfsdddd")
210+
_, _, err := helper.Get(nonExistingCred)
210211
if !credentials.IsErrCredentialsNotFound(err) {
211-
t.Fatalf("expected ErrCredentialsNotFound, got %v", err)
212+
t.Errorf("expected ErrCredentialsNotFound, got %v", err)
213+
}
214+
err = helper.Delete(nonExistingCred)
215+
if !credentials.IsErrCredentialsNotFound(err) {
216+
t.Errorf("expected ErrCredentialsNotFound, got %v", err)
212217
}
213218
}

0 commit comments

Comments
 (0)