github.com/ungtb10d/cli/v2@v2.0.0-20221110210412-98537dd9d6a1/pkg/cmd/ssh-key/list/http.go (about) 1 package list 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "io" 7 "net/http" 8 "time" 9 10 "github.com/ungtb10d/cli/v2/api" 11 "github.com/ungtb10d/cli/v2/internal/ghinstance" 12 ) 13 14 type sshKey struct { 15 ID int 16 Key string 17 Title string 18 CreatedAt time.Time `json:"created_at"` 19 } 20 21 func userKeys(httpClient *http.Client, host, userHandle string) ([]sshKey, error) { 22 resource := "user/keys" 23 if userHandle != "" { 24 resource = fmt.Sprintf("users/%s/keys", userHandle) 25 } 26 url := fmt.Sprintf("%s%s?per_page=%d", ghinstance.RESTPrefix(host), resource, 100) 27 req, err := http.NewRequest("GET", url, nil) 28 if err != nil { 29 return nil, err 30 } 31 32 resp, err := httpClient.Do(req) 33 if err != nil { 34 return nil, err 35 } 36 defer resp.Body.Close() 37 38 if resp.StatusCode > 299 { 39 return nil, api.HandleHTTPError(resp) 40 } 41 42 b, err := io.ReadAll(resp.Body) 43 if err != nil { 44 return nil, err 45 } 46 47 var keys []sshKey 48 err = json.Unmarshal(b, &keys) 49 if err != nil { 50 return nil, err 51 } 52 53 return keys, nil 54 }