~juju-qa/ubuntu/xenial/juju/xenial-2.0-beta3

« back to all changes in this revision

Viewing changes to src/github.com/juju/juju/api/usermanager/client.go

  • Committer: Martin Packman
  • Date: 2016-03-30 19:31:08 UTC
  • mfrom: (1.1.41)
  • Revision ID: martin.packman@canonical.com-20160330193108-h9iz3ak334uk0z5r
Merge new upstream source 2.0~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
        "fmt"
8
8
        "strings"
9
9
 
 
10
        "gopkg.in/macaroon.v1"
 
11
 
10
12
        "github.com/juju/errors"
11
13
        "github.com/juju/loggo"
12
14
        "github.com/juju/names"
13
15
 
14
16
        "github.com/juju/juju/api/base"
 
17
        "github.com/juju/juju/api/modelmanager"
15
18
        "github.com/juju/juju/apiserver/params"
16
19
)
17
20
 
33
36
 
34
37
// AddUser creates a new local user in the controller, sharing with that user any specified models.
35
38
func (c *Client) AddUser(
36
 
        username, displayName, password string, modelUUIDs ...string,
 
39
        username, displayName, password, access string, modelUUIDs ...string,
37
40
) (_ names.UserTag, secretKey []byte, _ error) {
38
41
        if !names.IsValidUser(username) {
39
42
                return names.UserTag{}, nil, fmt.Errorf("invalid user name %q", username)
42
45
        for i, uuid := range modelUUIDs {
43
46
                modelTags[i] = names.NewModelTag(uuid).String()
44
47
        }
 
48
 
 
49
        var accessPermission params.ModelAccessPermission
 
50
        var err error
 
51
        if len(modelTags) > 0 {
 
52
                accessPermission, err = modelmanager.ParseModelAccess(access)
 
53
                if err != nil {
 
54
                        return names.UserTag{}, nil, errors.Trace(err)
 
55
                }
 
56
        }
 
57
 
45
58
        userArgs := params.AddUsers{
46
59
                Users: []params.AddUser{{
47
60
                        Username:        username,
48
61
                        DisplayName:     displayName,
49
62
                        Password:        password,
50
 
                        SharedModelTags: modelTags}},
 
63
                        SharedModelTags: modelTags,
 
64
                        ModelAccess:     accessPermission}},
51
65
        }
52
66
        var results params.AddUserResults
53
 
        err := c.facade.FacadeCall("AddUser", userArgs, &results)
 
67
        err = c.facade.FacadeCall("AddUser", userArgs, &results)
54
68
        if err != nil {
55
69
                return names.UserTag{}, nil, errors.Trace(err)
56
70
        }
175
189
        }
176
190
        return results.OneError()
177
191
}
 
192
 
 
193
// CreateLocalLoginMacaroon creates a local login macaroon for the
 
194
// authenticated user.
 
195
func (c *Client) CreateLocalLoginMacaroon(tag names.UserTag) (*macaroon.Macaroon, error) {
 
196
        args := params.Entities{Entities: []params.Entity{{tag.String()}}}
 
197
        var results params.MacaroonResults
 
198
        if err := c.facade.FacadeCall("CreateLocalLoginMacaroon", args, &results); err != nil {
 
199
                return nil, errors.Trace(err)
 
200
        }
 
201
        if n := len(results.Results); n != 1 {
 
202
                logger.Errorf("expected 1 result, got %#v", results)
 
203
                return nil, errors.Errorf("expected 1 result, got %d", n)
 
204
        }
 
205
        result := results.Results[0]
 
206
        if result.Error != nil {
 
207
                return nil, errors.Trace(result.Error)
 
208
        }
 
209
        return result.Result, nil
 
210
}