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  }