github.com/vmware/govmomi@v0.51.0/cli/sso/user/ls.go (about)

     1  // © Broadcom. All Rights Reserved.
     2  // The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.
     3  // SPDX-License-Identifier: Apache-2.0
     4  
     5  package user
     6  
     7  import (
     8  	"context"
     9  	"flag"
    10  	"fmt"
    11  	"io"
    12  	"text/tabwriter"
    13  
    14  	"github.com/vmware/govmomi/cli"
    15  	"github.com/vmware/govmomi/cli/flags"
    16  	"github.com/vmware/govmomi/cli/sso"
    17  	"github.com/vmware/govmomi/ssoadmin"
    18  	"github.com/vmware/govmomi/ssoadmin/types"
    19  )
    20  
    21  type ls struct {
    22  	*flags.ClientFlag
    23  	*flags.OutputFlag
    24  
    25  	solution bool
    26  	group    bool
    27  	search   string
    28  }
    29  
    30  func init() {
    31  	cli.Register("sso.user.ls", &ls{})
    32  }
    33  
    34  func (cmd *ls) Register(ctx context.Context, f *flag.FlagSet) {
    35  	cmd.ClientFlag, ctx = flags.NewClientFlag(ctx)
    36  	cmd.ClientFlag.Register(ctx, f)
    37  
    38  	cmd.OutputFlag, ctx = flags.NewOutputFlag(ctx)
    39  	cmd.OutputFlag.Register(ctx, f)
    40  
    41  	f.BoolVar(&cmd.solution, "s", false, "List solution users")
    42  	f.BoolVar(&cmd.group, "group", false, "List users in group")
    43  	f.StringVar(&cmd.search, "search", "", "Search users in group")
    44  }
    45  
    46  func (cmd *ls) Description() string {
    47  	return `List SSO users.
    48  
    49  Examples:
    50    govc sso.user.ls -s
    51    govc sso.user.ls -group group-name`
    52  }
    53  
    54  func (cmd *ls) Process(ctx context.Context) error {
    55  	if err := cmd.ClientFlag.Process(ctx); err != nil {
    56  		return err
    57  	}
    58  	return cmd.OutputFlag.Process(ctx)
    59  }
    60  
    61  type userResult []types.AdminUser
    62  
    63  func (r userResult) Dump() any {
    64  	return []types.AdminUser(r)
    65  }
    66  
    67  func (r userResult) Write(w io.Writer) error {
    68  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    69  	for _, info := range r {
    70  		fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Description)
    71  	}
    72  	return tw.Flush()
    73  }
    74  
    75  type solutionResult []types.AdminSolutionUser
    76  
    77  func (r solutionResult) Dump() any {
    78  	return []types.AdminSolutionUser(r)
    79  }
    80  
    81  func (r solutionResult) Write(w io.Writer) error {
    82  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    83  	for _, info := range r {
    84  		fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Details.Description)
    85  	}
    86  	return tw.Flush()
    87  }
    88  
    89  type personResult []types.AdminPersonUser
    90  
    91  func (r personResult) Dump() any {
    92  	return []types.AdminPersonUser(r)
    93  }
    94  
    95  func (r personResult) Write(w io.Writer) error {
    96  	tw := tabwriter.NewWriter(w, 2, 0, 2, ' ', 0)
    97  	for _, info := range r {
    98  		fmt.Fprintf(tw, "%s\t%s\n", info.Id.Name, info.Details.Description)
    99  	}
   100  	return tw.Flush()
   101  }
   102  
   103  func (cmd *ls) Run(ctx context.Context, f *flag.FlagSet) error {
   104  	arg := f.Arg(0)
   105  
   106  	return sso.WithClient(ctx, cmd.ClientFlag, func(c *ssoadmin.Client) error {
   107  		if cmd.solution {
   108  			if f.NArg() != 0 {
   109  				return flag.ErrHelp
   110  			}
   111  			info, err := c.FindSolutionUsers(ctx, arg)
   112  			if err != nil {
   113  				return err
   114  			}
   115  
   116  			return cmd.WriteResult(solutionResult(info))
   117  		}
   118  		if cmd.group {
   119  			if f.NArg() == 0 {
   120  				return flag.ErrHelp
   121  			}
   122  			info, err := c.FindUsersInGroup(ctx, f.Arg(0), cmd.search)
   123  			if err != nil {
   124  				return err
   125  			}
   126  
   127  			return cmd.WriteResult(userResult(info))
   128  		}
   129  		info, err := c.FindPersonUsers(ctx, arg)
   130  		if err != nil {
   131  			return err
   132  		}
   133  
   134  		return cmd.WriteResult(personResult(info))
   135  	})
   136  }