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  }