github.com/jenspinney/cli@v6.42.1-0.20190207184520-7450c600020e+incompatible/api/uaa/user.go (about)

     1  package uaa
     2  
     3  import (
     4  	"bytes"
     5  	"encoding/json"
     6  	"net/http"
     7  
     8  	"code.cloudfoundry.org/cli/api/uaa/internal"
     9  )
    10  
    11  // User represents an UAA user account.
    12  type User struct {
    13  	ID string
    14  }
    15  
    16  // newUserRequestBody represents the body of the request.
    17  type newUserRequestBody struct {
    18  	Username string   `json:"userName"`
    19  	Password string   `json:"password"`
    20  	Origin   string   `json:"origin"`
    21  	Name     userName `json:"name"`
    22  	Emails   []email  `json:"emails"`
    23  }
    24  
    25  type userName struct {
    26  	FamilyName string `json:"familyName"`
    27  	GivenName  string `json:"givenName"`
    28  }
    29  
    30  type email struct {
    31  	Value   string `json:"value"`
    32  	Primary bool   `json:"primary"`
    33  }
    34  
    35  // newUserResponse represents the HTTP JSON response.
    36  type newUserResponse struct {
    37  	ID string `json:"id"`
    38  }
    39  
    40  // CreateUser creates a new UAA user account with the provided password.
    41  func (client *Client) CreateUser(user string, password string, origin string) (User, error) {
    42  	userRequest := newUserRequestBody{
    43  		Username: user,
    44  		Password: password,
    45  		Origin:   origin,
    46  		Name: userName{
    47  			FamilyName: user,
    48  			GivenName:  user,
    49  		},
    50  		Emails: []email{
    51  			{
    52  				Value:   user,
    53  				Primary: true,
    54  			},
    55  		},
    56  	}
    57  
    58  	bodyBytes, err := json.Marshal(userRequest)
    59  	if err != nil {
    60  		return User{}, err
    61  	}
    62  
    63  	request, err := client.newRequest(requestOptions{
    64  		RequestName: internal.PostUserRequest,
    65  		Header: http.Header{
    66  			"Content-Type": {"application/json"},
    67  		},
    68  		Body: bytes.NewBuffer(bodyBytes),
    69  	})
    70  	if err != nil {
    71  		return User{}, err
    72  	}
    73  
    74  	var userResponse newUserResponse
    75  	response := Response{
    76  		Result: &userResponse,
    77  	}
    78  
    79  	err = client.connection.Make(request, &response)
    80  	if err != nil {
    81  		return User{}, err
    82  	}
    83  
    84  	return User{ID: userResponse.ID}, nil
    85  }