1
2
3
4
5
6 package github
7
8 import (
9 "context"
10 "fmt"
11 "time"
12 )
13
14
15
16
17 type GPGKey struct {
18 ID *int64 `json:"id,omitempty"`
19 PrimaryKeyID *int64 `json:"primary_key_id,omitempty"`
20 KeyID *string `json:"key_id,omitempty"`
21 RawKey *string `json:"raw_key,omitempty"`
22 PublicKey *string `json:"public_key,omitempty"`
23 Emails []*GPGEmail `json:"emails,omitempty"`
24 Subkeys []*GPGKey `json:"subkeys,omitempty"`
25 CanSign *bool `json:"can_sign,omitempty"`
26 CanEncryptComms *bool `json:"can_encrypt_comms,omitempty"`
27 CanEncryptStorage *bool `json:"can_encrypt_storage,omitempty"`
28 CanCertify *bool `json:"can_certify,omitempty"`
29 CreatedAt *time.Time `json:"created_at,omitempty"`
30 ExpiresAt *time.Time `json:"expires_at,omitempty"`
31 }
32
33
34 func (k GPGKey) String() string {
35 return Stringify(k)
36 }
37
38
39 type GPGEmail struct {
40 Email *string `json:"email,omitempty"`
41 Verified *bool `json:"verified,omitempty"`
42 }
43
44
45
46
47
48
49
50 func (s *UsersService) ListGPGKeys(ctx context.Context, user string, opts *ListOptions) ([]*GPGKey, *Response, error) {
51 var u string
52 if user != "" {
53 u = fmt.Sprintf("users/%v/gpg_keys", user)
54 } else {
55 u = "user/gpg_keys"
56 }
57 u, err := addOptions(u, opts)
58 if err != nil {
59 return nil, nil, err
60 }
61
62 req, err := s.client.NewRequest("GET", u, nil)
63 if err != nil {
64 return nil, nil, err
65 }
66
67 var keys []*GPGKey
68 resp, err := s.client.Do(ctx, req, &keys)
69 if err != nil {
70 return nil, resp, err
71 }
72
73 return keys, resp, nil
74 }
75
76
77
78
79
80 func (s *UsersService) GetGPGKey(ctx context.Context, id int64) (*GPGKey, *Response, error) {
81 u := fmt.Sprintf("user/gpg_keys/%v", id)
82 req, err := s.client.NewRequest("GET", u, nil)
83 if err != nil {
84 return nil, nil, err
85 }
86
87 key := &GPGKey{}
88 resp, err := s.client.Do(ctx, req, key)
89 if err != nil {
90 return nil, resp, err
91 }
92
93 return key, resp, nil
94 }
95
96
97
98
99
100 func (s *UsersService) CreateGPGKey(ctx context.Context, armoredPublicKey string) (*GPGKey, *Response, error) {
101 gpgKey := &struct {
102 ArmoredPublicKey string `json:"armored_public_key"`
103 }{ArmoredPublicKey: armoredPublicKey}
104 req, err := s.client.NewRequest("POST", "user/gpg_keys", gpgKey)
105 if err != nil {
106 return nil, nil, err
107 }
108
109 key := &GPGKey{}
110 resp, err := s.client.Do(ctx, req, key)
111 if err != nil {
112 return nil, resp, err
113 }
114
115 return key, resp, nil
116 }
117
118
119
120
121
122 func (s *UsersService) DeleteGPGKey(ctx context.Context, id int64) (*Response, error) {
123 u := fmt.Sprintf("user/gpg_keys/%v", id)
124 req, err := s.client.NewRequest("DELETE", u, nil)
125 if err != nil {
126 return nil, err
127 }
128
129 return s.client.Do(ctx, req, nil)
130 }
131
View as plain text