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  }