forked from vultr/govultr
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathssh_key.go
140 lines (102 loc) · 2.82 KB
/
ssh_key.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
package govultr
import (
"context"
"net/http"
"net/url"
)
// SSHKeyService is the interface to interact with the SSH Key endpoints on the Vultr API
// Link: https://www.vultr.com/api/#sshkey
type SSHKeyService interface {
Create(ctx context.Context, name, sshKey string) (*SSHKey, error)
Delete(ctx context.Context, sshKeyID string) error
GetList(ctx context.Context) ([]SSHKey, error)
Update(ctx context.Context, sshKey *SSHKey) error
}
// SSHKeyServiceHandler handles interaction with the SSH Key methods for the Vultr API
type SSHKeyServiceHandler struct {
client *Client
}
// SSHKey represents an SSH Key on Vultr
type SSHKey struct {
SSHKeyID string `json:"SSHKEYID"`
Name string `json:"name"`
Key string `json:"ssh_key"`
DateCreated string `json:"date_created"`
}
// Create will add the specified SSH Key to your Vultr account
func (s *SSHKeyServiceHandler) Create(ctx context.Context, name, sshKey string) (*SSHKey, error) {
uri := "/v1/sshkey/create"
values := url.Values{
"name": {name},
"ssh_key": {sshKey},
}
req, err := s.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return nil, err
}
key := new(SSHKey)
err = s.client.DoWithContext(ctx, req, key)
if err != nil {
return nil, err
}
key.Name = name
key.Key = sshKey
return key, nil
}
// Delete will delete the specified SHH Key from your Vultr account
func (s *SSHKeyServiceHandler) Delete(ctx context.Context, sshKeyID string) error {
uri := "/v1/sshkey/destroy"
values := url.Values{
"SSHKEYID": {sshKeyID},
}
req, err := s.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return err
}
err = s.client.DoWithContext(ctx, req, nil)
if err != nil {
return err
}
return nil
}
// GetList will list all the SSH Keys associated with your Vultr account
func (s *SSHKeyServiceHandler) GetList(ctx context.Context) ([]SSHKey, error) {
uri := "/v1/sshkey/list"
req, err := s.client.NewRequest(ctx, http.MethodGet, uri, nil)
if err != nil {
return nil, err
}
sshKeysMap := make(map[string]SSHKey)
err = s.client.DoWithContext(ctx, req, &sshKeysMap)
if err != nil {
return nil, err
}
var sshKeys []SSHKey
for _, key := range sshKeysMap {
sshKeys = append(sshKeys, key)
}
return sshKeys, nil
}
// Update will update the given SSH Key. Empty strings will be ignored.
func (s *SSHKeyServiceHandler) Update(ctx context.Context, sshKey *SSHKey) error {
uri := "/v1/sshkey/update"
values := url.Values{
"SSHKEYID": {sshKey.SSHKeyID},
}
// Optional
if sshKey.Name != "" {
values.Add("name", sshKey.Name)
}
if sshKey.Key != "" {
values.Add("ssh_key", sshKey.Key)
}
req, err := s.client.NewRequest(ctx, http.MethodPost, uri, values)
if err != nil {
return err
}
err = s.client.DoWithContext(ctx, req, nil)
if err != nil {
return err
}
return nil
}