Skip to content
This repository was archived by the owner on Jan 16, 2021. It is now read-only.

Commit e77b4ea

Browse files
committed
Merge pull request #27 from pavanka/fix_bugs
fix minor messaging bugs in configure token
2 parents a497e1f + 26c2145 commit e77b4ea

File tree

4 files changed

+155
-28
lines changed

4 files changed

+155
-28
lines changed

configure_cmd.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ package main
22

33
import (
44
"fmt"
5+
"io"
56

67
"github.com/facebookgo/stackerr"
78
"github.com/spf13/cobra"
89
)
910

1011
type configureCmd struct {
11-
login login
12-
isDefault bool
12+
login login
13+
isDefault bool
14+
tokenReader io.Reader // for testing
1315
}
1416

1517
func (c *configureCmd) accountKey(e *env) error {
@@ -28,14 +30,18 @@ func (c *configureCmd) accountKey(e *env) error {
2830
email = ""
2931
}
3032

31-
creds, _ := (&login{}).getTokenCredentials(e, email)
33+
var l login
34+
if c.tokenReader != nil {
35+
l.tokenReader = c.tokenReader
36+
}
37+
foundEmail, creds, _ := l.getTokenCredentials(e, email)
3238
if creds != nil {
3339
if c.isDefault {
3440
fmt.Fprintln(
3541
e.Err,
3642
"Note: this operation will overwrite the default account key",
3743
)
38-
} else {
44+
} else if foundEmail {
3945
fmt.Fprintf(
4046
e.Err,
4147
`Note: this operation will overwrite the account key:
@@ -52,8 +58,9 @@ for email: %q
5258
if err == nil {
5359
if c.isDefault {
5460
fmt.Fprintln(e.Out, "Successfully stored default account key.")
61+
} else {
62+
fmt.Fprintf(e.Out, "Successfully stored account key for: %q.\n", email)
5563
}
56-
fmt.Fprintf(e.Out, "Successfully stored account key for: %q.\n", email)
5764
}
5865
return stackerr.Wrap(err)
5966
}

configure_cmd_test.go

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ import (
1010
"github.com/facebookgo/ensure"
1111
)
1212

13-
func TestConfigureAccessToken(t *testing.T) {
13+
func TestConfigureAccountKey(t *testing.T) {
1414
t.Parallel()
1515

1616
h := newTokenHarness(t)
1717
defer h.Stop()
1818

1919
c := configureCmd{login: login{tokenReader: strings.NewReader("")}}
20+
2021
h.env.In = ioutil.NopCloser(strings.NewReader("token\n"))
2122
ensure.Nil(t, c.accountKey(h.env))
2223
ensure.DeepEqual(
@@ -26,12 +27,68 @@ func TestConfigureAccessToken(t *testing.T) {
2627
Input your account key or press enter to generate a new one.
2728
Account Key: Successfully stored account key for: "email".
2829
`)
29-
h.env.In = ioutil.NopCloser(strings.NewReader("email\ninvalid\n"))
30+
31+
h.env.In = ioutil.NopCloser(strings.NewReader("invalid\n"))
3032
ensure.Err(t, c.accountKey(h.env), regexp.MustCompile("is not valid"))
3133
ensure.DeepEqual(t,
3234
h.Err.String(),
3335
"Could not store credentials. Please try again.\n\n",
3436
)
37+
38+
h.env.Server = "http://api.parse.com/1/"
39+
c.tokenReader = strings.NewReader(
40+
`machine api.parse.com#email
41+
login default
42+
password token2
43+
`,
44+
)
45+
h.Err.Reset()
46+
h.env.In = ioutil.NopCloser(strings.NewReader("token\n"))
47+
ensure.Nil(t, c.accountKey(h.env))
48+
ensure.DeepEqual(t, h.Err.String(),
49+
`Note: this operation will overwrite the account key:
50+
"*oken"
51+
for email: "email"
52+
`)
53+
54+
h.env.Server = "http://api.parse.com/1/"
55+
c.tokenReader = strings.NewReader(
56+
`machine api.parse.com#email
57+
login default
58+
password token2
59+
`,
60+
)
61+
c.isDefault = true
62+
h.Err.Reset()
63+
h.env.In = ioutil.NopCloser(strings.NewReader("token\n"))
64+
ensure.Nil(t, c.accountKey(h.env))
65+
ensure.DeepEqual(t, h.Err.String(), "")
66+
67+
h.env.Server = "http://api.parse.com/1/"
68+
c.tokenReader = strings.NewReader(
69+
`machine api.parse.com
70+
login default
71+
password token2
72+
`,
73+
)
74+
c.isDefault = true
75+
h.Err.Reset()
76+
h.env.In = ioutil.NopCloser(strings.NewReader("token\n"))
77+
ensure.Nil(t, c.accountKey(h.env))
78+
ensure.DeepEqual(t, h.Err.String(), "Note: this operation will overwrite the default account key\n")
79+
80+
h.env.Server = "http://api.parse.com/1/"
81+
c.tokenReader = strings.NewReader(
82+
`machine api.parse.com
83+
login default
84+
password token2
85+
`,
86+
)
87+
h.Err.Reset()
88+
c.isDefault = false
89+
h.env.In = ioutil.NopCloser(strings.NewReader("token\n"))
90+
ensure.Nil(t, c.accountKey(h.env))
91+
ensure.DeepEqual(t, h.Err.String(), "")
3592
}
3693

3794
func TestParserEmail(t *testing.T) {

login.go

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ to reset your password`)
4242
tokenErrMsgf = `Sorry, the account key: %q you provided is not valid.
4343
Please follow instructions at %q to generate a new one.
4444
`
45-
keyNotFound = regexp.MustCompile("Could not find access key")
45+
keyNotFound = regexp.MustCompile("Could not find account key")
4646
parseNetrc = filepath.Join(".parse", "netrc")
4747
)
4848

@@ -95,49 +95,53 @@ func (l *login) getTokensReader() (io.Reader, error) {
9595
return file, nil
9696
}
9797

98-
func (l *login) getTokenCredentials(e *env, email string) (*credentials, error) {
98+
func (l *login) getTokenCredentials(e *env, email string) (bool, *credentials, error) {
9999
reader, err := l.getTokensReader()
100100
if err != nil {
101-
return nil, stackerr.Wrap(err)
101+
return false, nil, stackerr.Wrap(err)
102102
}
103103
tokens, err := netrc.Parse(reader)
104104
if err != nil {
105-
return nil, stackerr.Wrap(err)
105+
return false, nil, stackerr.Wrap(err)
106106
}
107107
server, err := getHostFromURL(e.Server, email)
108108
if err != nil {
109-
return nil, err
109+
return false, nil, err
110110
}
111111
machine := tokens.FindMachine(server)
112112
if machine != nil {
113-
return &credentials{
114-
token: machine.Password,
115-
}, nil
113+
return true,
114+
&credentials{
115+
token: machine.Password,
116+
}, nil
116117
}
117118

118119
if email == "" {
119-
return nil, stackerr.Newf("Could not find access key for %q", server)
120+
return false, nil, stackerr.Newf("Could not find account key for %q", server)
120121
}
121122

122123
// check for system default account key for the given server
123124
// since we could not find account key for the given account (email)
124125
server, err = getHostFromURL(e.Server, "")
125126
if err != nil {
126-
return nil, err
127+
return false, nil, err
127128
}
128129
machine = tokens.FindMachine(server)
129130
if machine != nil {
130-
return &credentials{
131-
token: machine.Password,
132-
}, nil
131+
return false,
132+
&credentials{
133+
token: machine.Password,
134+
}, nil
133135
}
134-
return nil, stackerr.Newf(
135-
`Could not find access key for email: %q,
136+
return false,
137+
nil,
138+
stackerr.Newf(
139+
`Could not find account key for email: %q,
136140
and default access key not configured for %q
137141
`,
138-
email,
139-
e.Server,
140-
)
142+
email,
143+
e.Server,
144+
)
141145
}
142146

143147
func (l *login) updatedNetrcContent(
@@ -228,7 +232,7 @@ func (l *login) authToken(e *env, token string) (string, error) {
228232
}
229233

230234
func (l *login) authUserWithToken(e *env) (string, error) {
231-
tokenCredentials, err := l.getTokenCredentials(e, e.ParserEmail)
235+
_, tokenCredentials, err := l.getTokenCredentials(e, e.ParserEmail)
232236
if err != nil {
233237
if stackerr.HasUnderlying(err, stackerr.MatcherFunc(accessKeyNotFound)) {
234238
fmt.Fprintln(e.Err, errorString(e, err))

login_test.go

Lines changed: 61 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,13 +67,72 @@ func TestGetTokenCredentials(t *testing.T) {
6767
password token
6868
`,
6969
)
70-
credentials, err := l.getTokenCredentials(h.env, "")
70+
_, credentials, err := l.getTokenCredentials(h.env, "")
7171
ensure.Nil(t, err)
7272
ensure.DeepEqual(t, credentials.token, "token")
7373

74+
l.tokenReader = strings.NewReader(
75+
`machine api.example.com
76+
login default
77+
password token
78+
`,
79+
)
7480
h.env.Server = "http://api.parse.com"
75-
credentials, err = l.getTokenCredentials(h.env, "")
81+
_, credentials, err = l.getTokenCredentials(h.env, "")
7682
ensure.Err(t, err, keyNotFound)
83+
84+
l = &login{}
85+
h.env.Server = "http://api.example.com/1/"
86+
87+
l.tokenReader = strings.NewReader(
88+
`machine api.example.com#email
89+
login default
90+
password token
91+
`,
92+
)
93+
_, credentials, err = l.getTokenCredentials(h.env, "email")
94+
ensure.Nil(t, err)
95+
ensure.DeepEqual(t, credentials.token, "token")
96+
97+
l.tokenReader = strings.NewReader(
98+
`machine api.example.com#email
99+
login default
100+
password token
101+
`,
102+
)
103+
h.env.Server = "http://api.parse.com"
104+
_, credentials, err = l.getTokenCredentials(h.env, "email")
105+
ensure.Err(t, err, keyNotFound)
106+
107+
l = &login{}
108+
h.env.Server = "http://api.example.com/1/"
109+
110+
l.tokenReader = strings.NewReader(
111+
`machine api.example.com#email
112+
login default
113+
password token1
114+
machine api.example.com
115+
login default
116+
password token2
117+
`,
118+
)
119+
_, credentials, err = l.getTokenCredentials(h.env, "email")
120+
ensure.Nil(t, err)
121+
ensure.DeepEqual(t, credentials.token, "token1")
122+
123+
l.tokenReader = strings.NewReader(
124+
`machine api.example.com#email
125+
login default
126+
password token1
127+
machine api.example.com
128+
login default
129+
password token2
130+
`,
131+
)
132+
133+
_, credentials, err = l.getTokenCredentials(h.env, "xmail")
134+
ensure.Nil(t, err)
135+
ensure.DeepEqual(t, credentials.token, "token2")
77136
}
78137

79138
func TestAuthUserWithToken(t *testing.T) {

0 commit comments

Comments
 (0)