master
go 72 lines 2.01 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package vault
4
5 import (
6 "context"
7 "fmt"
8 "strings"
9
10 "github.com/netdata/netdata/go/plugins/plugin/agent/secrets/secretstore"
11 "github.com/netdata/netdata/go/plugins/plugin/agent/secrets/secretstore/internal/httpx"
12 )
13
14 func (s *store) init(_ context.Context) error {
15 switch {
16 case s.Config.Timeout.Duration() < 0:
17 return fmt.Errorf("timeout cannot be negative")
18 case s.Config.Timeout.Duration() == 0:
19 s.Config.Timeout = defaultTimeout
20 }
21 s.runtime = &runtime{
22 httpClient: httpx.VaultClient(s.Config.Timeout.Duration()),
23 httpClientInsecure: httpx.VaultInsecureClient(s.Config.Timeout.Duration()),
24 }
25
26 published := &publishedStore{runtime: s.runtime}
27
28 switch strings.TrimSpace(s.Config.Mode) {
29 case "token":
30 if s.Config.ModeToken == nil {
31 return fmt.Errorf("mode_token is required when mode is 'token'")
32 }
33 token := strings.TrimSpace(s.Config.ModeToken.Token)
34 if token == "" {
35 return fmt.Errorf("mode_token.token is required")
36 }
37 s.Config.Mode = "token"
38 s.Config.ModeToken.Token = token
39 s.Config.ModeTokenFile = nil
40 published.mode = s.Config.Mode
41 published.tokenValue = token
42 case "token_file":
43 if s.Config.ModeTokenFile == nil {
44 return fmt.Errorf("mode_token_file is required when mode is 'token_file'")
45 }
46 path := strings.TrimSpace(s.Config.ModeTokenFile.Path)
47 if path == "" {
48 return fmt.Errorf("mode_token_file.path is required")
49 }
50 s.Config.Mode = "token_file"
51 s.Config.ModeTokenFile.Path = path
52 s.Config.ModeToken = nil
53 published.mode = s.Config.Mode
54 published.tokenFilePath = path
55 default:
56 return fmt.Errorf("mode '%s' is invalid for kind '%s'", s.Config.Mode, secretstore.KindVault)
57 }
58
59 addr := strings.TrimSpace(s.Config.Addr)
60 if addr == "" {
61 return fmt.Errorf("addr is required")
62 }
63 s.Config.Addr = addr
64 published.addr = addr
65
66 s.Config.Namespace = strings.TrimSpace(s.Config.Namespace)
67 published.namespaceValue = s.Config.Namespace
68 published.tlsSkipVerify = s.Config.TLSSkipVerify
69
70 s.published = published
71 return nil
72 }