Skip to content

Commit d36a144

Browse files
committed
revamp cred command and fix bug in cred storage
Signed-off-by: Grant Linville <[email protected]>
1 parent 94e1392 commit d36a144

File tree

2 files changed

+47
-30
lines changed

2 files changed

+47
-30
lines changed

pkg/cli/credential.go

+46-30
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"sort"
77
"strings"
88
"text/tabwriter"
9+
"time"
910

1011
cmd2 "github.com/acorn-io/cmd"
1112
"github.com/gptscript-ai/gptscript/pkg/cache"
@@ -46,6 +47,7 @@ func (c *Credential) Run(_ *cobra.Command, _ []string) error {
4647
}
4748
opts.Cache = cache.Complete(opts.Cache)
4849

50+
// Initialize the credential store and get all the credentials.
4951
store, err := credentials.NewStore(cfg, ctx, opts.Cache.CacheDir)
5052
if err != nil {
5153
return fmt.Errorf("failed to get credentials store: %w", err)
@@ -56,6 +58,10 @@ func (c *Credential) Run(_ *cobra.Command, _ []string) error {
5658
return fmt.Errorf("failed to list credentials: %w", err)
5759
}
5860

61+
w := tabwriter.NewWriter(os.Stdout, 10, 1, 3, ' ', 0)
62+
defer w.Flush()
63+
64+
// Sort credentials and print column names, depending on the options.
5965
if c.AllContexts {
6066
// Sort credentials by context
6167
sort.Slice(creds, func(i, j int) bool {
@@ -65,25 +71,10 @@ func (c *Credential) Run(_ *cobra.Command, _ []string) error {
6571
return creds[i].Context < creds[j].Context
6672
})
6773

68-
w := tabwriter.NewWriter(os.Stdout, 10, 1, 3, ' ', 0)
69-
defer w.Flush()
70-
7174
if c.ShowEnvVars {
72-
_, _ = w.Write([]byte("CONTEXT\tCREDENTIAL\tENVIRONMENT VARIABLES\n"))
73-
74-
for _, cred := range creds {
75-
envVars := make([]string, 0, len(cred.Env))
76-
for envVar := range cred.Env {
77-
envVars = append(envVars, envVar)
78-
}
79-
sort.Strings(envVars)
80-
_, _ = fmt.Fprintf(w, "%s\t%s\t%s\n", cred.Context, cred.ToolName, strings.Join(envVars, ", "))
81-
}
75+
_, _ = w.Write([]byte("CONTEXT\tCREDENTIAL\tEXPIRES IN\tENV\n"))
8276
} else {
83-
_, _ = w.Write([]byte("CONTEXT\tCREDENTIAL\n"))
84-
for _, cred := range creds {
85-
_, _ = fmt.Fprintf(w, "%s\t%s\n", cred.Context, cred.ToolName)
86-
}
77+
_, _ = w.Write([]byte("CONTEXT\tCREDENTIAL\tEXPIRES IN\n"))
8778
}
8879
} else {
8980
// Sort credentials by tool name
@@ -92,24 +83,49 @@ func (c *Credential) Run(_ *cobra.Command, _ []string) error {
9283
})
9384

9485
if c.ShowEnvVars {
95-
w := tabwriter.NewWriter(os.Stdout, 10, 1, 3, ' ', 0)
96-
defer w.Flush()
97-
_, _ = w.Write([]byte("CREDENTIAL\tENVIRONMENT VARIABLES\n"))
98-
99-
for _, cred := range creds {
100-
envVars := make([]string, 0, len(cred.Env))
101-
for envVar := range cred.Env {
102-
envVars = append(envVars, envVar)
103-
}
104-
sort.Strings(envVars)
105-
_, _ = fmt.Fprintf(w, "%s\t%s\n", cred.ToolName, strings.Join(envVars, ", "))
86+
_, _ = w.Write([]byte("CREDENTIAL\tEXPIRES IN\tENV\n"))
87+
} else {
88+
_, _ = w.Write([]byte("CREDENTIAL\tEXPIRES IN\n"))
89+
}
90+
}
91+
92+
for _, cred := range creds {
93+
expires := "never"
94+
if cred.ExpiresAt != nil {
95+
if !cred.IsExpired() {
96+
expires = cred.ExpiresAt.Sub(time.Now()).Truncate(time.Second).String()
97+
} else {
98+
expires = "expired"
10699
}
100+
}
101+
102+
var fields []any
103+
if c.AllContexts {
104+
fields = []any{cred.Context, cred.ToolName, expires}
107105
} else {
108-
for _, cred := range creds {
109-
fmt.Println(cred.ToolName)
106+
fields = []any{cred.ToolName, expires}
107+
}
108+
109+
if c.ShowEnvVars {
110+
envVars := make([]string, 0, len(cred.Env))
111+
for envVar := range cred.Env {
112+
envVars = append(envVars, envVar)
110113
}
114+
sort.Strings(envVars)
115+
fields = append(fields, strings.Join(envVars, ", "))
111116
}
117+
118+
printFields(w, fields)
112119
}
113120

114121
return nil
115122
}
123+
124+
func printFields(w *tabwriter.Writer, fields []any) {
125+
if len(fields) == 0 {
126+
return
127+
}
128+
129+
fmtStr := strings.Repeat("%s\t", len(fields)-1) + "%s\n"
130+
_, _ = fmt.Fprintf(w, fmtStr, fields...)
131+
}

pkg/runner/runner.go

+1
Original file line numberDiff line numberDiff line change
@@ -915,6 +915,7 @@ func (r *Runner) handleCredentials(callCtx engine.Context, monitor Monitor, env
915915
return nil, fmt.Errorf("failed to unmarshal credential tool %s response: %w", credToolName, err)
916916
}
917917
c.ToolName = credName
918+
c.Type = credentials.CredentialTypeTool
918919

919920
isEmpty := true
920921
for _, v := range c.Env {

0 commit comments

Comments
 (0)