()
| 288 | } |
| 289 | |
| 290 | func (r *RootCmd) viewToken() *serpent.Command { |
| 291 | formatter := cliui.NewOutputFormatter( |
| 292 | cliui.TableFormat([]tokenListRow{}, []string{"id", "name", "scopes", "allow list", "last used", "expires at", "created at", "owner"}), |
| 293 | cliui.JSONFormat(), |
| 294 | ) |
| 295 | |
| 296 | cmd := &serpent.Command{ |
| 297 | Use: "view <name|id>", |
| 298 | Short: "Display detailed information about a token", |
| 299 | Middleware: serpent.Chain( |
| 300 | serpent.RequireNArgs(1), |
| 301 | ), |
| 302 | Handler: func(inv *serpent.Invocation) error { |
| 303 | client, err := r.InitClient(inv) |
| 304 | if err != nil { |
| 305 | return err |
| 306 | } |
| 307 | |
| 308 | tokenName := inv.Args[0] |
| 309 | token, err := client.APIKeyByName(inv.Context(), codersdk.Me, tokenName) |
| 310 | if err != nil { |
| 311 | maybeID := strings.Split(tokenName, "-")[0] |
| 312 | token, err = client.APIKeyByID(inv.Context(), codersdk.Me, maybeID) |
| 313 | if err != nil { |
| 314 | return xerrors.Errorf("fetch api key by name or id: %w", err) |
| 315 | } |
| 316 | } |
| 317 | |
| 318 | row := tokenListRowFromKey(*token, "") |
| 319 | out, err := formatter.Format(inv.Context(), []tokenListRow{row}) |
| 320 | if err != nil { |
| 321 | return err |
| 322 | } |
| 323 | _, err = fmt.Fprintln(inv.Stdout, out) |
| 324 | return err |
| 325 | }, |
| 326 | } |
| 327 | |
| 328 | formatter.AttachOptions(&cmd.Options) |
| 329 | return cmd |
| 330 | } |
| 331 | |
| 332 | func (r *RootCmd) removeToken() *serpent.Command { |
| 333 | var deleteToken bool |
no test coverage detected