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