1
// Copyright 2014 Canonical Ltd.
2
// Licensed under the AGPLv3, see LICENCE file for details.
9
"github.com/loggo/loggo"
11
"launchpad.net/juju-core/state"
12
"launchpad.net/juju-core/state/api/params"
13
"launchpad.net/juju-core/state/apiserver/common"
16
var logger = loggo.GetLogger("juju.state.apiserver.usermanager")
18
// UserManager defines the methods on the usermanager API end point.
19
type UserManager interface {
20
AddUser(arg params.EntityPasswords) (params.ErrorResults, error)
21
RemoveUser(arg params.Entities) (params.ErrorResults, error)
24
// UserManagerAPI implements the user manager interface and is the concrete
25
// implementation of the api end point.
26
type UserManagerAPI struct {
28
authorizer common.Authorizer
29
getCanWrite common.GetAuthFunc
32
var _ UserManager = (*UserManagerAPI)(nil)
34
func NewUserManagerAPI(
36
authorizer common.Authorizer,
37
) (*UserManagerAPI, error) {
38
if !authorizer.AuthClient() {
39
return nil, common.ErrPerm
42
// TODO(mattyw) - replace stub with real canWrite function
43
getCanWrite := common.AuthAlways(true)
44
return &UserManagerAPI{
46
authorizer: authorizer,
47
getCanWrite: getCanWrite},
51
func (api *UserManagerAPI) AddUser(args params.EntityPasswords) (params.ErrorResults, error) {
52
result := params.ErrorResults{
53
Results: make([]params.ErrorResult, len(args.Changes)),
55
if len(args.Changes) == 0 {
58
canWrite, err := api.getCanWrite()
60
result.Results[0].Error = common.ServerError(err)
63
for i, arg := range args.Changes {
64
if !canWrite(arg.Tag) {
65
result.Results[0].Error = common.ServerError(common.ErrPerm)
68
_, err := api.state.AddUser(arg.Tag, arg.Password)
70
result.Results[i].Error = common.ServerError(fmt.Errorf("Failed to create user: %s", err))
77
func (api *UserManagerAPI) RemoveUser(args params.Entities) (params.ErrorResults, error) {
78
result := params.ErrorResults{
79
Results: make([]params.ErrorResult, len(args.Entities)),
81
if len(args.Entities) == 0 {
84
canWrite, err := api.getCanWrite()
88
for i, arg := range args.Entities {
89
if !canWrite(arg.Tag) {
90
result.Results[i].Error = common.ServerError(common.ErrPerm)
93
user, err := api.state.User(arg.Tag)
95
result.Results[i].Error = common.ServerError(common.ErrPerm)
98
err = user.Deactivate()
100
result.Results[i].Error = common.ServerError(fmt.Errorf("Failed to remove user: %s", err))