diff --git a/pkg/cmd/auth/status/status.go b/pkg/cmd/auth/status/status.go index 78b4b074e..442b84afb 100644 --- a/pkg/cmd/auth/status/status.go +++ b/pkg/cmd/auth/status/status.go @@ -19,7 +19,8 @@ type StatusOptions struct { IO *iostreams.IOStreams Config func() (config.Config, error) - Hostname string + Hostname string + ShowToken bool } func NewCmdStatus(f *cmdutil.Factory, runF func(*StatusOptions) error) *cobra.Command { @@ -48,6 +49,7 @@ func NewCmdStatus(f *cmdutil.Factory, runF func(*StatusOptions) error) *cobra.Co } cmd.Flags().StringVarP(&opts.Hostname, "hostname", "h", "", "Check a specific hostname's auth status") + cmd.Flags().BoolVarP(&opts.ShowToken, "show-token", "t", false, "Display the auth token") return cmd } @@ -84,7 +86,7 @@ func statusRun(opts *StatusOptions) error { continue } - _, tokenSource, _ := cfg.GetWithSource(hostname, "oauth_token") + token, tokenSource, _ := cfg.GetWithSource(hostname, "oauth_token") tokenIsWriteable := cfg.CheckWriteable(hostname, "oauth_token") == nil statusInfo[hostname] = []string{} @@ -124,6 +126,11 @@ func statusRun(opts *StatusOptions) error { addMsg("%s Git operations for %s configured to use %s protocol.", utils.GreenCheck(), hostname, utils.Bold(proto)) } + tokenDisplay := "*******************" + if opts.ShowToken { + tokenDisplay = token + } + addMsg("%s Token: %s", utils.GreenCheck(), tokenDisplay) } addMsg("") diff --git a/pkg/cmd/auth/status/status_test.go b/pkg/cmd/auth/status/status_test.go index 9aabf4fef..0de14d388 100644 --- a/pkg/cmd/auth/status/status_test.go +++ b/pkg/cmd/auth/status/status_test.go @@ -34,6 +34,13 @@ func Test_NewCmdStatus(t *testing.T) { Hostname: "ellie.williams", }, }, + { + name: "show token", + cli: "--show-token", + wants: StatusOptions{ + ShowToken: true, + }, + }, } for _, tt := range tests { @@ -74,23 +81,6 @@ func Test_statusRun(t *testing.T) { wantErr *regexp.Regexp wantErrOut *regexp.Regexp }{ - { - name: "hostname set", - opts: &StatusOptions{ - Hostname: "joel.miller", - }, - cfg: func(c config.Config) { - _ = c.Set("joel.miller", "oauth_token", "abc123") - _ = c.Set("github.com", "oauth_token", "abc123") - }, - httpStubs: func(reg *httpmock.Registry) { - reg.Register(httpmock.REST("GET", "api/v3/"), httpmock.ScopesResponder("repo,read:org,")) - reg.Register( - httpmock.GraphQL(`query UserCurrent\b`), - httpmock.StringResponse(`{"data":{"viewer":{"login":"tess"}}}`)) - }, - wantErrOut: regexp.MustCompile(`Logged in to joel.miller as.*tess`), - }, { name: "hostname set", opts: &StatusOptions{ @@ -161,6 +151,46 @@ func Test_statusRun(t *testing.T) { }, wantErrOut: regexp.MustCompile(`(?s)Logged in to github.com as.*tess.*Logged in to joel.miller as.*tess`), }, + { + name: "hide token", + opts: &StatusOptions{}, + cfg: func(c config.Config) { + _ = c.Set("joel.miller", "oauth_token", "abc123") + _ = c.Set("github.com", "oauth_token", "xyz456") + }, + httpStubs: func(reg *httpmock.Registry) { + reg.Register(httpmock.REST("GET", "api/v3/"), httpmock.ScopesResponder("repo,read:org,")) + reg.Register(httpmock.REST("GET", ""), httpmock.ScopesResponder("repo,read:org,")) + reg.Register( + httpmock.GraphQL(`query UserCurrent\b`), + httpmock.StringResponse(`{"data":{"viewer":{"login":"tess"}}}`)) + reg.Register( + httpmock.GraphQL(`query UserCurrent\b`), + httpmock.StringResponse(`{"data":{"viewer":{"login":"tess"}}}`)) + }, + wantErrOut: regexp.MustCompile(`(?s)Token: \*{19}.*Token: \*{19}`), + }, + { + name: "show token", + opts: &StatusOptions{ + ShowToken: true, + }, + cfg: func(c config.Config) { + _ = c.Set("joel.miller", "oauth_token", "abc123") + _ = c.Set("github.com", "oauth_token", "xyz456") + }, + httpStubs: func(reg *httpmock.Registry) { + reg.Register(httpmock.REST("GET", "api/v3/"), httpmock.ScopesResponder("repo,read:org,")) + reg.Register(httpmock.REST("GET", ""), httpmock.ScopesResponder("repo,read:org,")) + reg.Register( + httpmock.GraphQL(`query UserCurrent\b`), + httpmock.StringResponse(`{"data":{"viewer":{"login":"tess"}}}`)) + reg.Register( + httpmock.GraphQL(`query UserCurrent\b`), + httpmock.StringResponse(`{"data":{"viewer":{"login":"tess"}}}`)) + }, + wantErrOut: regexp.MustCompile(`(?s)Token: xyz456.*Token: abc123`), + }, } for _, tt := range tests {