Skip to content

Commit f64d6b1

Browse files
authored
Merge pull request #321 from thaJeztah/fix_pass_errors
pass: return correct error, and ignore empty stores on list
2 parents 73b9e5d + 1bb9aa3 commit f64d6b1

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

pass/pass.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ func (p Pass) Get(serverURL string) (string, string, error) {
158158
}
159159

160160
if len(usernames) < 1 {
161-
return "", "", fmt.Errorf("no usernames for %s", serverURL)
161+
return "", "", credentials.NewErrCredentialsNotFound()
162162
}
163163

164164
actual := strings.TrimSuffix(usernames[0].Name(), ".gpg")
@@ -191,7 +191,7 @@ func (p Pass) List() (map[string]string, error) {
191191
}
192192

193193
if len(usernames) < 1 {
194-
return nil, fmt.Errorf("no usernames for %s", serverURL)
194+
continue
195195
}
196196

197197
resp[string(serverURL)] = strings.TrimSuffix(usernames[0].Name(), ".gpg")

pass/pass_test.go

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
package pass
44

55
import (
6+
"encoding/base64"
7+
"os"
8+
"path"
69
"strings"
710
"testing"
811

@@ -116,6 +119,75 @@ func TestPassHelperList(t *testing.T) {
116119
}
117120
}
118121

122+
// TestPassHelperWithEmptyServer verifies that empty directories (servers
123+
// without credentials) are ignored, but still returns credentials for other
124+
// servers.
125+
func TestPassHelperWithEmptyServer(t *testing.T) {
126+
helper := Pass{}
127+
if err := helper.checkInitialized(); err != nil {
128+
t.Error(err)
129+
}
130+
131+
creds := []*credentials.Credentials{
132+
{
133+
ServerURL: "https://myreqistry.example.com:2375/v1",
134+
Username: "foo",
135+
Secret: "isthebestmeshuggahalbum",
136+
},
137+
{
138+
ServerURL: "https://index.example.com/v1//access-token",
139+
},
140+
}
141+
142+
t.Cleanup(func() {
143+
for _, cred := range creds {
144+
_ = helper.Delete(cred.ServerURL)
145+
}
146+
})
147+
148+
for _, cred := range creds {
149+
if cred.Username != "" {
150+
if err := helper.Add(cred); err != nil {
151+
t.Error(err)
152+
}
153+
} else {
154+
// No credentials; create an empty directory for this server.
155+
serverURL := base64.URLEncoding.EncodeToString([]byte(cred.ServerURL))
156+
p := path.Join(getPassDir(), PASS_FOLDER, serverURL)
157+
if err := os.Mkdir(p, 0o755); err != nil {
158+
t.Error(err)
159+
}
160+
}
161+
}
162+
163+
credsList, err := helper.List()
164+
if err != nil {
165+
t.Error(err)
166+
}
167+
if len(credsList) == 0 {
168+
t.Error("expected credentials to be returned, but got none")
169+
}
170+
for _, cred := range creds {
171+
if cred.Username != "" {
172+
userName, secret, err := helper.Get(cred.ServerURL)
173+
if err != nil {
174+
t.Error(err)
175+
}
176+
if userName != cred.Username {
177+
t.Errorf("expected username %q, actual: %q", cred.Username, userName)
178+
}
179+
if secret != cred.Secret {
180+
t.Errorf("expected secret %q, actual: %q", cred.Secret, secret)
181+
}
182+
} else {
183+
_, _, err := helper.Get(cred.ServerURL)
184+
if !credentials.IsErrCredentialsNotFound(err) {
185+
t.Errorf("expected credentials not found, actual: %v", err)
186+
}
187+
}
188+
}
189+
}
190+
119191
func TestMissingCred(t *testing.T) {
120192
helper := Pass{}
121193
if _, _, err := helper.Get("garbage"); !credentials.IsErrCredentialsNotFound(err) {

0 commit comments

Comments
 (0)