github.com/mattyw/juju@v0.0.0-20140610034352-732aecd63861/state/api/usermanager/client.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package usermanager
     5  
     6  import (
     7  	"fmt"
     8  
     9  	"github.com/juju/names"
    10  
    11  	"github.com/juju/juju/state/api"
    12  	"github.com/juju/juju/state/api/params"
    13  )
    14  
    15  // TODO(mattyw) 2014-03-07 bug #1288750
    16  // Need a SetPassword method.
    17  type Client struct {
    18  	st *api.State
    19  }
    20  
    21  func (c *Client) call(method string, params, result interface{}) error {
    22  	return c.st.Call("UserManager", "", method, params, result)
    23  }
    24  
    25  func NewClient(st *api.State) *Client {
    26  	return &Client{st}
    27  }
    28  
    29  func (c *Client) Close() error {
    30  	return c.st.Close()
    31  }
    32  
    33  func (c *Client) AddUser(username, displayName, password string) error {
    34  	if !names.IsUser(username) {
    35  		return fmt.Errorf("invalid user name %q", username)
    36  	}
    37  	userArgs := params.ModifyUsers{
    38  		Changes: []params.ModifyUser{{Username: username, DisplayName: displayName, Password: password}},
    39  	}
    40  	results := new(params.ErrorResults)
    41  	err := c.call("AddUser", userArgs, results)
    42  	if err != nil {
    43  		return err
    44  	}
    45  	return results.OneError()
    46  }
    47  
    48  func (c *Client) RemoveUser(tag string) error {
    49  	u := params.Entity{Tag: tag}
    50  	p := params.Entities{Entities: []params.Entity{u}}
    51  	results := new(params.ErrorResults)
    52  	err := c.call("RemoveUser", p, results)
    53  	if err != nil {
    54  		return err
    55  	}
    56  	return results.OneError()
    57  }