Skip to content

Commit 74ee35a

Browse files
committed
DOESNT WORK: fix broken ctrl-c during doAuth()
Trying a few trick to see if I can get CTRL-C to work after using go-prompt and before the program exits. Whatever go-prompt is doing to the terminal doesn't seem to be resetting correctly? Refs: #91
1 parent cc0e36a commit 74ee35a

File tree

6 files changed

+52
-24
lines changed

6 files changed

+52
-24
lines changed

cmd/console_cmd.go

+9-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"strconv"
2929

3030
"github.com/c-bata/go-prompt"
31+
log "github.com/sirupsen/logrus"
3132
"github.com/synfinatic/aws-sso-cli/sso"
3233
"github.com/synfinatic/aws-sso-cli/storage"
3334
"github.com/synfinatic/aws-sso-cli/utils"
@@ -106,7 +107,7 @@ func (cc *ConsoleCmd) Run(ctx *RunContext) error {
106107
}
107108
sso.Refresh(ctx.Settings)
108109

109-
c := NewTagsCompleter(ctx, sso, openConsole)
110+
c := NewTagsCompleter(ctx, sso)
110111
opts := ctx.Settings.DefaultOptions(c.ExitChecker)
111112
opts = append(opts, ctx.Settings.GetColorOptions()...)
112113

@@ -117,7 +118,13 @@ func (cc *ConsoleCmd) Run(ctx *RunContext) error {
117118
)
118119

119120
p.Run()
120-
return nil
121+
aId, rName, err := utils.ParseRoleARN(c.Arn)
122+
if err != nil {
123+
log.Fatalf("Unable to parse ARN %s: %s", c.Arn, err.Error())
124+
}
125+
region := ctx.Settings.GetDefaultRegion(aId, rName)
126+
awsSSO := doAuth(ctx)
127+
return openConsole(ctx, awsSSO, aId, rName, region)
121128
}
122129

123130
// opens the AWS console or just prints the URL

cmd/exec_cmd.go

+11-2
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ func (cc *ExecCmd) Run(ctx *RunContext) error {
9090
sso.Refresh(ctx.Settings)
9191
fmt.Printf("Please use `exit` or `Ctrl-D` to quit.\n")
9292

93-
c := NewTagsCompleter(ctx, sso, execCmd)
93+
c := NewTagsCompleter(ctx, sso)
9494
opts := ctx.Settings.DefaultOptions(c.ExitChecker)
9595
opts = append(opts, ctx.Settings.GetColorOptions()...)
9696

@@ -100,7 +100,16 @@ func (cc *ExecCmd) Run(ctx *RunContext) error {
100100
opts...,
101101
)
102102
p.Run()
103-
return nil
103+
104+
restoreTermState()
105+
log.Errorf("outside of go-prompt")
106+
aId, rName, err := utils.ParseRoleARN(c.Arn)
107+
if err != nil {
108+
log.Fatalf("Unable to parse ARN %s: %s", c.Arn, err.Error())
109+
}
110+
region := ctx.Settings.GetDefaultRegion(aId, rName)
111+
awsSSO := doAuth(ctx)
112+
return execCmd(ctx, awsSSO, aId, rName, region)
104113
}
105114

106115
const (

cmd/main.go

+20
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,33 @@ package main
2020

2121
import (
2222
"fmt"
23+
"os"
2324

2425
"github.com/alecthomas/kong"
26+
"golang.org/x/term"
2527
// "github.com/davecgh/go-spew/spew"
2628
log "github.com/sirupsen/logrus"
2729
"github.com/synfinatic/aws-sso-cli/sso"
2830
"github.com/synfinatic/aws-sso-cli/storage"
2931
"github.com/synfinatic/aws-sso-cli/utils"
3032
)
3133

34+
var termState *term.State
35+
36+
func saveTermState() {
37+
oldState, err := term.GetState(int(os.Stdin.Fd()))
38+
if err != nil {
39+
return
40+
}
41+
termState = oldState
42+
}
43+
44+
func restoreTermState() {
45+
if termState != nil {
46+
term.Restore(int(os.Stdin.Fd()), termState)
47+
}
48+
}
49+
3250
// These variables are defined in the Makefile
3351
var Version = "unknown"
3452
var Buildinfos = "unknown"
@@ -104,6 +122,8 @@ func main() {
104122
ctx, override := parseArgs(&cli)
105123
var err error
106124

125+
saveTermState()
126+
107127
run_ctx := RunContext{
108128
Kctx: ctx,
109129
Cli: &cli,

cmd/select.go

+3-15
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
// "github.com/davecgh/go-spew/spew"
2929
log "github.com/sirupsen/logrus"
3030
"github.com/synfinatic/aws-sso-cli/sso"
31-
"github.com/synfinatic/aws-sso-cli/utils"
3231
)
3332

3433
type CompleterExec = func(*RunContext, *sso.AWSSSO, int64, string, string) error
@@ -39,10 +38,10 @@ type TagsCompleter struct {
3938
roleTags *sso.RoleTags
4039
allTags *sso.TagsList
4140
suggest []prompt.Suggest
42-
exec CompleterExec
41+
Arn string
4342
}
4443

45-
func NewTagsCompleter(ctx *RunContext, s *sso.SSOConfig, exec CompleterExec) *TagsCompleter {
44+
func NewTagsCompleter(ctx *RunContext, s *sso.SSOConfig) *TagsCompleter {
4645
set := ctx.Settings
4746
roleTags := set.Cache.Roles.GetRoleTagsSelect()
4847
allTags := set.Cache.Roles.GetAllTagsSelect()
@@ -53,7 +52,6 @@ func NewTagsCompleter(ctx *RunContext, s *sso.SSOConfig, exec CompleterExec) *Ta
5352
roleTags: roleTags,
5453
allTags: allTags,
5554
suggest: completeTags(roleTags, allTags, set.AccountPrimaryTag, []string{}),
56-
exec: exec,
5755
}
5856
}
5957

@@ -102,17 +100,7 @@ func (tc *TagsCompleter) Executor(args string) {
102100
roleArn = ssoRoles[0]
103101
}
104102

105-
aId, rName, err := utils.ParseRoleARN(roleArn)
106-
if err != nil {
107-
log.Fatalf("Unable to parse %s: %s", roleArn, err.Error())
108-
}
109-
region := tc.ctx.Settings.GetDefaultRegion(aId, rName)
110-
awsSSO := doAuth(tc.ctx)
111-
err = tc.exec(tc.ctx, awsSSO, aId, rName, region)
112-
if err != nil {
113-
log.Fatalf("Unable to exec: %s", err.Error())
114-
}
115-
return
103+
tc.Arn = roleArn
116104
}
117105

118106
// completeExitChecker impliments prompt.ExitChecker

go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ require (
1010
github.com/alecthomas/kong v0.2.15
1111
github.com/atotto/clipboard v0.1.4
1212
github.com/aws/aws-sdk-go v1.38.40
13-
github.com/c-bata/go-prompt v0.2.5 // 0.2.6 is broken
13+
github.com/c-bata/go-prompt v0.2.6 // 0.2.6 is broken
1414
github.com/davecgh/go-spew v1.1.1
1515
github.com/goccy/go-yaml v1.9.4
1616
github.com/knadh/koanf v0.16.0
@@ -22,4 +22,5 @@ require (
2222

2323
// see: https://github.com/sirupsen/logrus/issues/1275
2424
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 // indirect
25+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
2526
)

go.sum

+7-4
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn
1313
github.com/aws/aws-sdk-go v1.38.40 h1:VVqBFV24tGgXR11tFXPjmR+0ItbnUepbuQjdmhgu3U0=
1414
github.com/aws/aws-sdk-go v1.38.40/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
1515
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
16-
github.com/c-bata/go-prompt v0.2.5 h1:3zg6PecEywxNn0xiqcXHD96fkbxghD+gdB2tbsYfl+Y=
17-
github.com/c-bata/go-prompt v0.2.5/go.mod h1:vFnjEGDIIA/Lib7giyE4E9c50Lvl8j0S+7FVlAwDAVw=
16+
github.com/c-bata/go-prompt v0.2.6 h1:POP+nrHE+DfLYx370bedwNhsqmpCUynWPxuHi0C5vZI=
17+
github.com/c-bata/go-prompt v0.2.6/go.mod h1:/LMAke8wD2FsNu9EXNdHxNLbd9MedkPnCdfpU9wwHfY=
1818
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
1919
github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU=
2020
github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U=
@@ -127,8 +127,8 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi
127127
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
128128
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
129129
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
130-
github.com/pkg/term v1.1.0 h1:xIAAdCMh3QIAy+5FrE8Ad8XoDhEU4ufwbaSozViP9kk=
131-
github.com/pkg/term v1.1.0/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
130+
github.com/pkg/term v1.2.0-beta.2 h1:L3y/h2jkuBVFdWiJvNfYfKmzcCnILw7mJWm2JQuMppw=
131+
github.com/pkg/term v1.2.0-beta.2/go.mod h1:E25nymQcrSllhX42Ok8MRm1+hyBdHY0dCeiKZ9jpNGw=
132132
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
133133
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
134134
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
@@ -191,8 +191,11 @@ golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7w
191191
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
192192
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
193193
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
194+
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
194195
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2 h1:c8PlLMqBbOHoqtjteWm5/kbe6rNY2pbRfbIMVnepueo=
195196
golang.org/x/sys v0.0.0-20210817190340-bfb29a6856f2/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
197+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
198+
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
196199
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
197200
golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
198201
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=

0 commit comments

Comments
 (0)