package main import ( "context" "encoding/json" "flag" "fmt" "io" "log" "net/http" "os" "time" "github.com/google/subcommands" "github.com/gosuri/uitable" ) type whoamiCmd struct { json bool } func (whoamiCmd) Name() string { return "whoami" } func (whoamiCmd) Synopsis() string { return "show information about currently logged in user" } func (whoamiCmd) Usage() string { return `wasmc whoami [options] $ wasmc whoami $ wasmc whoami -json Returns information about the currently logged in user. Flags: ` } func (w *whoamiCmd) SetFlags(fs *flag.FlagSet) { fs.BoolVar(&w.json, "json", false, "if set, dump information in json") } func (w *whoamiCmd) Execute(ctx context.Context, fs *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { req, err := http.NewRequest(http.MethodGet, *apiServer+"/api/whoami", nil) if err != nil { panic(err) } withAPI(req) resp, err := http.DefaultClient.Do(req) if err != nil { log.Printf("error fetching data: %v", err) return subcommands.ExitFailure } defer resp.Body.Close() if w.json { io.Copy(os.Stdout, resp.Body) return subcommands.ExitSuccess } type apiResp struct { ID int `json:"ID"` CreatedAt time.Time `json:"CreatedAt"` UpdatedAt time.Time `json:"UpdatedAt"` Username string `json:"Username"` Email string `json:"Email"` IsAdmin bool `json:"IsAdmin"` CanCreateHandlers bool `json:"CanCreateHandlers"` } var result apiResp err = json.NewDecoder(resp.Body).Decode(&result) if err != nil { panic(err) } table := uitable.New() table.AddRow("Username", result.Username) table.AddRow("Email", result.Email) table.AddRow("Is Admin", fmt.Sprint(result.IsAdmin)) table.AddRow("Can Create Handlers", fmt.Sprint(result.CanCreateHandlers)) fmt.Println(table.String()) return subcommands.ExitSuccess }