1// Copyright (c) 2015-2021 MinIO, Inc.
2//
3// This file is part of MinIO Object Storage stack
4//
5// This program is free software: you can redistribute it and/or modify
6// it under the terms of the GNU Affero General Public License as published by
7// the Free Software Foundation, either version 3 of the License, or
8// (at your option) any later version.
9//
10// This program is distributed in the hope that it will be useful
11// but WITHOUT ANY WARRANTY; without even the implied warranty of
12// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13// GNU Affero General Public License for more details.
14//
15// You should have received a copy of the GNU Affero General Public License
16// along with this program.  If not, see <http://www.gnu.org/licenses/>.
17
18package cmd
19
20import (
21	"github.com/fatih/color"
22	"github.com/minio/cli"
23	"github.com/minio/mc/pkg/probe"
24	"github.com/minio/pkg/console"
25)
26
27var adminGroupInfoCmd = cli.Command{
28	Name:         "info",
29	Usage:        "display group info",
30	Action:       mainAdminGroupInfo,
31	OnUsageError: onUsageError,
32	Before:       setGlobalsFromContext,
33	Flags:        globalFlags,
34	CustomHelpTemplate: `NAME:
35  {{.HelpName}} - {{.Usage}}
36
37USAGE:
38  {{.HelpName}} TARGET GROUPNAME
39
40FLAGS:
41  {{range .VisibleFlags}}{{.}}
42  {{end}}
43EXAMPLES:
44  1. Get info on group 'allcents'.
45     {{.Prompt}} {{.HelpName}} myminio allcents
46`,
47}
48
49// checkAdminGroupInfoSyntax - validate all the passed arguments
50func checkAdminGroupInfoSyntax(ctx *cli.Context) {
51	if len(ctx.Args()) != 2 {
52		cli.ShowCommandHelpAndExit(ctx, "info", 1) // last argument is exit code
53	}
54}
55
56// mainAdminGroupInfo is the handle for "mc admin group info" command.
57func mainAdminGroupInfo(ctx *cli.Context) error {
58	checkAdminGroupInfoSyntax(ctx)
59
60	console.SetColor("GroupMessage", color.New(color.FgGreen))
61
62	// Get the alias parameter from cli
63	args := ctx.Args()
64	aliasedURL := args.Get(0)
65
66	// Create a new MinIO Admin Client
67	client, err := newAdminClient(aliasedURL)
68	fatalIf(err, "Unable to initialize admin connection.")
69
70	group := args.Get(1)
71	gd, err1 := client.GetGroupDescription(globalContext, group)
72	fatalIf(probe.NewError(err1).Trace(args...), "Could not get group info")
73
74	printMsg(groupMessage{
75		op:          "info",
76		GroupName:   group,
77		GroupStatus: gd.Status,
78		GroupPolicy: gd.Policy,
79		Members:     gd.Members,
80	})
81
82	return nil
83}
84