github.com/altoros/juju-vmware@v0.0.0-20150312064031-f19ae857ccca/cmd/juju/user/disenable.go (about) 1 // Copyright 2014 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package user 5 6 import ( 7 "github.com/juju/cmd" 8 "github.com/juju/errors" 9 "github.com/juju/juju/cmd/juju/block" 10 ) 11 12 const disableUserDoc = ` 13 Disabling a user stops that user from being able to log in. The user still 14 exists and can be reenabled using the "juju enable" command. If the user is 15 already disabled, this command succeeds silently. 16 17 Examples: 18 juju user disable foobar 19 20 See Also: 21 juju enable 22 ` 23 24 const enableUserDoc = ` 25 Enabling a user that is disabled allows that user to log in again. The user 26 still exists and can be reenabled using the "juju enable" command. If the 27 user is already enabled, this command succeeds silently. 28 29 Examples: 30 juju user enable foobar 31 32 See Also: 33 juju disable 34 ` 35 36 // DisenableUserBase common code for enable/disable user commands 37 type DisenableUserBase struct { 38 UserCommandBase 39 user string 40 } 41 42 // DisableCommand disables users. 43 type DisableCommand struct { 44 DisenableUserBase 45 } 46 47 // EnableCommand enables users. 48 type EnableCommand struct { 49 DisenableUserBase 50 } 51 52 // Info implements Command.Info. 53 func (c *DisableCommand) Info() *cmd.Info { 54 return &cmd.Info{ 55 Name: "disable", 56 Args: "<username>", 57 Purpose: "disable a user to stop the user logging in", 58 Doc: disableUserDoc, 59 } 60 } 61 62 // Info implements Command.Info. 63 func (c *EnableCommand) Info() *cmd.Info { 64 return &cmd.Info{ 65 Name: "enable", 66 Args: "<username>", 67 Purpose: "reenables a disabled user to allow the user to log in", 68 Doc: enableUserDoc, 69 } 70 } 71 72 // Init implements Command.Init. 73 func (c *DisenableUserBase) Init(args []string) error { 74 if len(args) == 0 { 75 return errors.New("no username supplied") 76 } 77 c.user = args[0] 78 return cmd.CheckEmpty(args[1:]) 79 } 80 81 // DisenableUserAPI defines the API methods that the disable and enable 82 // commands use. 83 type DisenableUserAPI interface { 84 EnableUser(username string) error 85 DisableUser(username string) error 86 Close() error 87 } 88 89 func (c *DisenableUserBase) getDisableUserAPI() (DisenableUserAPI, error) { 90 return c.NewUserManagerClient() 91 } 92 93 var getDisableUserAPI = (*DisenableUserBase).getDisableUserAPI 94 95 // Info implements Command.Run. 96 func (c *DisableCommand) Run(ctx *cmd.Context) error { 97 client, err := getDisableUserAPI(&c.DisenableUserBase) 98 if err != nil { 99 return err 100 } 101 defer client.Close() 102 err = client.DisableUser(c.user) 103 if err != nil { 104 return block.ProcessBlockedError(err, block.BlockChange) 105 } 106 ctx.Infof("User %q disabled", c.user) 107 return nil 108 } 109 110 // Info implements Command.Run. 111 func (c *EnableCommand) Run(ctx *cmd.Context) error { 112 client, err := getDisableUserAPI(&c.DisenableUserBase) 113 if err != nil { 114 return err 115 } 116 defer client.Close() 117 err = client.EnableUser(c.user) 118 if err != nil { 119 return block.ProcessBlockedError(err, block.BlockChange) 120 } 121 ctx.Infof("User %q enabled", c.user) 122 return nil 123 }