18790: Merge branch 'main' into 18790-log-client
[arvados.git] / cmd / arvados-client / sudo.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: Apache-2.0
4
5 package main
6
7 import (
8         "flag"
9         "fmt"
10         "io"
11         "os"
12
13         "git.arvados.org/arvados.git/lib/cmd"
14         "git.arvados.org/arvados.git/lib/config"
15         "git.arvados.org/arvados.git/sdk/go/ctxlog"
16 )
17
18 // sudoCommand runs another command using API connection info and
19 // SystemRootToken from the system config file instead of the caller's
20 // environment vars.
21 type sudoCommand struct{}
22
23 func (sudoCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
24         ldr := config.NewLoader(stdin, ctxlog.New(stderr, "text", "info"))
25         flags := flag.NewFlagSet(prog, flag.ContinueOnError)
26         ldr.SetupFlags(flags)
27         if ok, code := cmd.ParseFlags(flags, prog, args, "subcommand ...", stderr); !ok {
28                 return code
29         }
30         cfg, err := ldr.Load()
31         if err != nil {
32                 fmt.Fprintln(stderr, err)
33                 return 1
34         }
35         cluster, err := cfg.GetCluster("")
36         if err != nil {
37                 fmt.Fprintln(stderr, err)
38                 return 1
39         }
40         os.Setenv("ARVADOS_API_HOST", cluster.Services.Controller.ExternalURL.Host)
41         os.Setenv("ARVADOS_API_TOKEN", cluster.SystemRootToken)
42         if cluster.TLS.Insecure {
43                 os.Setenv("ARVADOS_API_HOST_INSECURE", "1")
44         } else {
45                 os.Unsetenv("ARVADOS_API_HOST_INSECURE")
46         }
47         return handler.RunCommand(prog, flags.Args(), stdin, stdout, stderr)
48 }