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