github.com/go-chef/chef@v0.30.1/testapi/userkey.go (about) 1 // Test the go-chef/chef chef server api /users/USERNAME/keys endpoints against a live chef server 2 package testapi 3 4 import ( 5 "fmt" 6 "github.com/go-chef/chef" 7 "os" 8 "strings" 9 ) 10 11 // userkey exercise the chef server api 12 func Userkey() { 13 client := Client(nil) 14 15 // Create a new private key when adding the user 16 usr1 := chef.User{UserName: "usr1", 17 Email: "user1@domain.io", 18 FirstName: "user1", 19 LastName: "fullname", 20 DisplayName: "User1 Fullname", 21 Password: "Logn12ComplexPwd#", 22 CreateKey: true, 23 } 24 25 // Supply a public key 26 usr2 := chef.User{UserName: "usr2", 27 Email: "user2@domain.io", 28 FirstName: "user2", 29 LastName: "lastname", 30 DisplayName: "User2 Lastname", 31 Password: "Logn12ComplexPwd#", 32 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", 33 } 34 35 // Neither PublicKey nor CreateKey specified 36 usr3 := chef.User{UserName: "usr3", 37 Email: "user3@domain.io", 38 FirstName: "user3", 39 LastName: "lastname", 40 DisplayName: "User3 Lastname", 41 Password: "Logn12ComplexPwd#", 42 } 43 44 _ = createUser_key(client, usr1) 45 fmt.Printf("Add usr1\n") 46 _ = createUser_key(client, usr2) 47 fmt.Printf("Add usr2\n") 48 _ = createUser_key(client, usr3) 49 fmt.Printf("Add usr3\n") 50 51 // User Keys 52 userkeys := listUserKeys(client, "usr1") 53 fmt.Printf("List initial user usr1 keys %+v\n", userkeys) 54 55 userkeys = listUserKeys(client, "usr2") 56 fmt.Printf("List initial user usr2 keys %+v\n", userkeys) 57 58 userkeys = listUserKeys(client, "usr3") 59 fmt.Printf("List initial user usr3 keys %+v\n", userkeys) 60 61 // Add a key to a user 62 keyadd := chef.AccessKey{ 63 Name: "newkey", 64 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", 65 ExpirationDate: "infinity", 66 } 67 keyout, err := addUserKey(client, "usr1", keyadd) 68 fmt.Printf("Add usr1 key %+v\n", keyout) 69 // List the user keys after adding 70 userkeys = listUserKeys(client, "usr1") 71 fmt.Printf("List after add usr1 keys %+v\n", userkeys) 72 73 // Add a defaultkey to user usr3 74 keyadd.Name = "default" 75 keyout, err = addUserKey(client, "usr3", keyadd) 76 fmt.Printf("Add usr3 key %+v\n", keyout) 77 // List the user keys after adding 78 userkeys = listUserKeys(client, "usr3") 79 fmt.Printf("List after add usr3 keys %+v\n", userkeys) 80 81 // Get key detail 82 keydetail, err := client.Users.GetKey("usr1", "default") 83 if err != nil { 84 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 85 } 86 keyfold := strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1) 87 fmt.Printf("Key detail usr1 default %+v\n", keyfold) 88 89 // update a key 90 keyadd.Name = "default" 91 keyupdate, err := client.Users.UpdateKey("usr1", "default", keyadd) 92 if err != nil { 93 fmt.Fprintf(os.Stderr, "Error updating usr1 default key%+v\n", err) 94 } 95 keyfold = strings.Replace(fmt.Sprintf("%+v", keyupdate), "\n", "", -1) 96 fmt.Printf("Key update output usr1 default %+v\n", keyfold) 97 // Get key detail after update 98 keydetail, err = client.Users.GetKey("usr1", "default") 99 if err != nil { 100 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 101 } 102 keyfold = strings.Replace(fmt.Sprintf("%+v", keydetail), "\n", "", -1) 103 fmt.Printf("Updated key detail usr1 default %+v\n", keyfold) 104 105 // delete the key 106 keydel, err := client.Users.DeleteKey("usr1", "default") 107 if err != nil { 108 fmt.Fprintf(os.Stderr, "Error deleting key %+v\n", err) 109 } 110 keyfold = strings.Replace(fmt.Sprintf("%+v", keydel), "\n", "", -1) 111 fmt.Printf("List delete result usr1 keys %+v\n", keyfold) 112 // list the key after delete - expect 404 113 keydetail, err = client.Users.GetKey("usr1", "default") 114 if err != nil { 115 fmt.Fprintf(os.Stderr, "Error displaying key detail %+v\n", err) 116 } 117 fmt.Printf("Deleted key detail usr1 default %+v\n", keydetail) 118 119 // Delete the users 120 err = deleteUser_key(client, "usr1") 121 fmt.Printf("Delete usr1 %+v\n", err) 122 err = deleteUser_key(client, "usr2") 123 fmt.Printf("Delete usr2 %+v\n", err) 124 err = deleteUser_key(client, "usr3") 125 fmt.Printf("Delete usr3 %+v\n", err) 126 127 } 128 129 // listUserKeys uses the chef server api to show the keys for a user 130 func listUserKeys(client *chef.Client, name string) (userkeys []chef.KeyItem) { 131 userkeys, err := client.Users.ListKeys(name) 132 if err != nil { 133 fmt.Fprintf(os.Stderr, "Issue showing keys for user %s: %+v\n", name, err) 134 } 135 return userkeys 136 } 137 138 // addUserKey uses the chef server api to add a key to user 139 func addUserKey(client *chef.Client, name string, keyadd chef.AccessKey) (userkey chef.KeyItem, err error) { 140 userkey, err = client.Users.AddKey(name, keyadd) 141 if err != nil { 142 fmt.Fprintln(os.Stderr, "Issue deleting org:", err) 143 } 144 return 145 } 146 147 // createUser_key uses the chef server api to create a single user 148 func createUser_key(client *chef.Client, user chef.User) chef.UserResult { 149 usrResult, err := client.Users.Create(user) 150 if err != nil { 151 fmt.Fprintln(os.Stderr, "Issue creating user:", err) 152 } 153 return usrResult 154 } 155 156 // deleteUser_key uses the chef server api to delete a single user 157 func deleteUser_key(client *chef.Client, name string) (err error) { 158 err = client.Users.Delete(name) 159 if err != nil { 160 fmt.Fprintln(os.Stderr, "Issue deleting org:", err) 161 } 162 return 163 }