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