Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UX improvements #103

Merged
merged 2 commits into from
Jan 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions cli/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,11 @@ func (a accountSet) WriteTable(w io.Writer, withHeaders bool) {

// Config stores all information related to the user
type Config struct {
Accounts *accountSet `json:"accounts"`
TTL uint `json:"ttl"`
TimeRemaining uint `json:"time_remaining"`
Tokens *TokenSet `json:"tokens"`
Accounts *accountSet `json:"accounts"`
TTL uint `json:"ttl"`
TimeRemaining uint `json:"time_remaining"`
Tokens *TokenSet `json:"tokens"`
LastUsedAccount *string `json:"last_used_account"`
}

func (c Config) GetOAuthToken() (*TokenSet, bool) {
Expand Down
2 changes: 1 addition & 1 deletion cli/consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ var (

const (
// DefaultTTL for requested credentials in hours
DefaultTTL uint = 1
DefaultTTL uint = 8
// DefaultTimeRemaining for new key requests in minutes
DefaultTimeRemaining uint = 5
LinuxAmd64BinaryName string = "keyconjurer-linux-amd64"
Expand Down
22 changes: 16 additions & 6 deletions cli/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ var getCmd = &cobra.Command{
Long: `Retrieves temporary cloud API credentials for the specified account. It sends a push request to the first Duo device it finds associated with your account.

A role must be specified when using this command through the --role flag. You may list the roles you can assume through the roles command.`,
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
config := ConfigFromCommand(cmd)
ctx := cmd.Context()
Expand Down Expand Up @@ -101,10 +100,20 @@ A role must be specified when using this command through the --role flag. You ma
ttl = 8
}

var accountID string
if len(args) > 0 {
accountID = args[0]
} else if config.LastUsedAccount != nil {
// No account specified. Can we use the most recent one?
accountID = *config.LastUsedAccount
} else {
return cmd.Usage()
}

bypassCache, _ := cmd.Flags().GetBool(FlagBypassCache)
account, ok := resolveApplicationInfo(config, bypassCache, args[0])
account, ok := resolveApplicationInfo(config, bypassCache, accountID)
if !ok {
cmd.PrintErrf("%q is not a known account name in your account cache. Your cache can be refreshed by entering executing `keyconjurer accounts`. If the value provided is an Okta application ID, you may provide %s as an option to this command and try again.", args[0], FlagBypassCache)
cmd.PrintErrf("%q is not a known account name in your account cache. Your cache can be refreshed by entering executing `keyconjurer accounts`. If the value provided is an Okta application ID, you may provide %s as an option to this command and try again.", accountID, FlagBypassCache)
return nil
}

Expand All @@ -128,7 +137,7 @@ A role must be specified when using this command through the --role flag. You ma
}

if credentials.ValidUntil(account, time.Duration(timeRemaining)*time.Minute) {
return echoCredentials(args[0], args[0], credentials, outputType, shellType, awsCliPath, tencentCliPath)
return echoCredentials(accountID, accountID, credentials, outputType, shellType, awsCliPath, tencentCliPath)
}

oauthCfg, err := DiscoverOAuth2Config(cmd.Context(), oidcDomain, clientID)
Expand Down Expand Up @@ -158,7 +167,7 @@ A role must be specified when using this command through the --role flag. You ma

pair, ok := FindRoleInSAML(roleName, samlResponse)
if !ok {
cmd.PrintErrf("you do not have access to the role %s on application %s\n", roleName, args[0])
cmd.PrintErrf("you do not have access to the role %s on application %s\n", roleName, accountID)
return nil
}

Expand Down Expand Up @@ -197,8 +206,9 @@ A role must be specified when using this command through the --role flag. You ma
if account != nil {
account.MostRecentRole = roleName
}
config.LastUsedAccount = &accountID

return echoCredentials(args[0], args[0], credentials, outputType, shellType, awsCliPath, tencentCliPath)
return echoCredentials(accountID, accountID, credentials, outputType, shellType, awsCliPath, tencentCliPath)
}}

func echoCredentials(id, name string, credentials CloudCredentials, outputType, shellType, awsCliPath, tencentCliPath string) error {
Expand Down