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/madmin-go"
24	"github.com/minio/mc/pkg/probe"
25	"github.com/minio/pkg/console"
26)
27
28var adminUserSvcAcctDisableCmd = cli.Command{
29	Name:         "disable",
30	Usage:        "Disable a services account",
31	Action:       mainAdminUserSvcAcctDisable,
32	OnUsageError: onUsageError,
33	Before:       setGlobalsFromContext,
34	Flags:        globalFlags,
35	CustomHelpTemplate: `NAME:
36  {{.HelpName}} - {{.Usage}}
37
38USAGE:
39  {{.HelpName}} ALIAS SERVICE-ACCOUNT
40
41FLAGS:
42  {{range .VisibleFlags}}{{.}}
43  {{end}}
44EXAMPLES:
45  1. Disable the service account 'J123C4ZXEQN8RK6ND35I' in MinIO server.
46     {{.Prompt}} {{.HelpName}} myminio/ J123C4ZXEQN8RK6ND35I
47`,
48}
49
50// checkAdminUserSvcAcctDisableSyntax - validate all the passed arguments
51func checkAdminUserSvcAcctDisableSyntax(ctx *cli.Context) {
52	if len(ctx.Args()) != 2 {
53		fatalIf(errInvalidArgument().Trace(ctx.Args().Tail()...),
54			"Incorrect number of arguments for user svcacct disable command.")
55	}
56}
57
58// mainAdminUserSvcAcctDisable is the handle for "mc admin user svcacct disable" command.
59func mainAdminUserSvcAcctDisable(ctx *cli.Context) error {
60	checkAdminUserSvcAcctDisableSyntax(ctx)
61
62	console.SetColor("SVCMessage", color.New(color.FgGreen))
63
64	// Get the alias parameter from cli
65	args := ctx.Args()
66	aliasedURL := args.Get(0)
67	svcAccount := args.Get(1)
68
69	// Create a new MinIO Admin Client
70	client, err := newAdminClient(aliasedURL)
71	fatalIf(err, "Unable to initialize admin connection.")
72
73	opts := madmin.UpdateServiceAccountReq{
74		NewStatus: "off",
75	}
76
77	e := client.UpdateServiceAccount(globalContext, svcAccount, opts)
78	fatalIf(probe.NewError(e).Trace(args...), "Unable to get disable the specified service account")
79
80	printMsg(svcAcctMessage{
81		op:        "disable",
82		AccessKey: svcAccount,
83	})
84
85	return nil
86}
87