forked from go-chef/chef
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathuserkey.go
More file actions
165 lines (145 loc) · 5.82 KB
/
userkey.go
File metadata and controls
165 lines (145 loc) · 5.82 KB
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//
// Test the go-chef/chef chef server api /users/USERNAME/keys endpoints against a live chef server
//
package testapi
import (
"fmt"
"github.com/go-chef/chef"
"os"
"strings"
)
// userkey exercise the chef server api
func Userkey() {
client := Client()
// Create a new private key when adding the user
usr1 := chef.User{UserName: "usr1",
Email: "user1@domain.io",
FirstName: "user1",
LastName: "fullname",
DisplayName: "User1 Fullname",
Password: "Logn12ComplexPwd#",
CreateKey: true,
}
// Supply a public key
usr2 := chef.User{UserName: "usr2",
Email: "user2@domain.io",
FirstName: "user2",
LastName: "lastname",
DisplayName: "User2 Lastname",
Password: "Logn12ComplexPwd#",
PublicKey: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoYyN0AIhUh7Fw1+gQtR+ \n0/HY3625IUlVheoUeUz3WnsTrUGSSS4fHvxUiCJlNni1sQvcJ0xC9Bw3iMz7YVFO\nWz5SeKmajqKEnNywN8/NByZhhlLdBxBX/UN04/7aHZMoZxrrjXGLcyjvXN3uxyCO\nyPY989pa68LJ9jXWyyfKjCYdztSFcRuwF7tWgqnlsc8pve/UaWamNOTXQnyrQ6Dp\ndn+1jiNbEJIdxiza7DJMH/9/i/mLIDEFCLRPQ3RqW4T8QrSbkyzPO/iwaHl9U196\n06Ajv1RNnfyHnBXIM+I5mxJRyJCyDFo/MACc5AgO6M0a7sJ/sdX+WccgcHEVbPAl\n1wIDAQAB \n-----END PUBLIC KEY-----\n\n",
}
// Neither PublicKey nor CreateKey specified
usr3 := chef.User{UserName: "usr3",
Email: "user3@domain.io",
FirstName: "user3",
LastName: "lastname",
DisplayName: "User3 Lastname",
Password: "Logn12ComplexPwd#",
}
_ = createUser_key(client, usr1)
fmt.Printf("Add usr1\n")
_ = createUser_key(client, usr2)
fmt.Printf("Add usr2\n")
_ = createUser_key(client, usr3)
fmt.Printf("Add usr3\n")
// User Keys
userkeys := listUserKeys(client, "usr1")
fmt.Printf("List initial user usr1 keys %+v\n", userkeys)
userkeys = listUserKeys(client, "usr2")
fmt.Printf("List initial user usr2 keys %+v\n", userkeys)
userkeys = listUserKeys(client, "usr3")
fmt.Printf("List initial user usr3 keys %+v\n", userkeys)
// Add a key to a user
keyadd := chef.AccessKey{
Name: "newkey",
PublicKey: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoYyN0AIhUh7Fw1+gQtR+ \n0/HY3625IUlVheoUeUz3WnsTrUGSSS4fHvxUiCJlNni1sQvcJ0xC9Bw3iMz7YVFO\nWz5SeKmajqKEnNywN8/NByZhhlLdBxBX/UN04/7aHZMoZxrrjXGLcyjvXN3uxyCO\nyPY989pa68LJ9jXWyyfKjCYdztSFcRuwF7tWgqnlsc8pve/UaWamNOTXQnyrQ6Dp\ndn+1jiNbEJIdxiza7DJMH/9/i/mLIDEFCLRPQ3RqW4T8QrSbkyzPO/iwaHl9U196\n06Ajv1RNnfyHnBXIM+I5mxJRyJCyDFo/MACc5AgO6M0a7sJ/sdX+WccgcHEVbPAl\n1wIDAQAB \n-----END PUBLIC KEY-----\n\n",
ExpirationDate: "infinity",
}
keyout, err := addUserKey(client, "usr1", keyadd)
fmt.Printf("Add usr1 key %+v\n", keyout)
// List the user keys after adding
userkeys = listUserKeys(client, "usr1")
fmt.Printf("List after add usr1 keys %+v\n", userkeys)
// Add a defaultkey to user usr3
keyadd.Name = "default"
keyout, err = addUserKey(client, "usr3", keyadd)
fmt.Printf("Add usr3 key %+v\n", keyout)
// List the user keys after adding
userkeys = listUserKeys(client, "usr3")
fmt.Printf("List after add usr3 keys %+v\n", userkeys)
// Get key detail
keydetail, err := client.Users.GetKey("usr1", "default")
if err != nil {
fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err)
}
keyfold := strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1)
fmt.Printf("Key detail usr1 default %+v\n", keyfold)
// update a key
keyadd.Name = "default"
keyupdate, err := client.Users.UpdateKey("usr1", "default", keyadd)
if err != nil {
fmt.Fprintf(os.Stderr, "Error updating usr1 default key%+v\n", err)
}
keyfold = strings.Replace(fmt.Sprintf("%+v", keyupdate), "\n", "", -1)
fmt.Printf("Key update output usr1 default %+v\n", keyfold)
// Get key detail after update
keydetail, err = client.Users.GetKey("usr1", "default")
if err != nil {
fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err)
}
keyfold = strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1)
fmt.Printf("Updated key detail usr1 default %+v\n", keyfold)
// delete the key
keydel, err := client.Users.DeleteKey("usr1", "default")
if err != nil {
fmt.Fprintf(os.Stderr, "Error deleting key %+v\n", err)
}
keyfold = strings.Replace(fmt.Sprintf("%+v", keydel), "\n", "", -1)
fmt.Printf("List delete result usr1 keys %+v\n", keyfold)
// list the key after delete - expect 404
keydetail, err = client.Users.GetKey("usr1", "default")
if err != nil {
fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err)
}
fmt.Printf("Deleted key detail usr1 default %+v\n", keydetail)
// Delete the users
err = deleteUser_key(client, "usr1")
fmt.Printf("Delete usr1 %+v\n", err)
err = deleteUser_key(client, "usr2")
fmt.Printf("Delete usr2 %+v\n", err)
err = deleteUser_key(client, "usr3")
fmt.Printf("Delete usr3 %+v\n", err)
}
// listUserKeys uses the chef server api to show the keys for a user
func listUserKeys(client *chef.Client, name string) (userkeys []chef.KeyItem) {
userkeys, err := client.Users.ListKeys(name)
if err != nil {
fmt.Fprintf(os.Stderr, "Issue showing keys for user %s: %+v\n", name, err)
}
return userkeys
}
// addUserKey uses the chef server api to add a key to user
func addUserKey(client *chef.Client, name string, keyadd chef.AccessKey) (userkey chef.KeyItem, err error) {
userkey, err = client.Users.AddKey(name, keyadd)
if err != nil {
fmt.Fprintln(os.Stderr, "Issue deleting org:", err)
}
return
}
// createUser_key uses the chef server api to create a single user
func createUser_key(client *chef.Client, user chef.User) chef.UserResult {
usrResult, err := client.Users.Create(user)
if err != nil {
fmt.Fprintln(os.Stderr, "Issue creating user:", err)
}
return usrResult
}
// deleteUser_key uses the chef server api to delete a single user
func deleteUser_key(client *chef.Client, name string) (err error) {
err = client.Users.Delete(name)
if err != nil {
fmt.Fprintln(os.Stderr, "Issue deleting org:", err)
}
return
}