104 lines
1.9 KiB
Go
104 lines
1.9 KiB
Go
package internal
|
|
|
|
import (
|
|
`context`
|
|
`sync`
|
|
|
|
`github.com/hashicorp/vault-client-go`
|
|
`r00t2.io/gosecret`
|
|
`r00t2.io/goutils/multierr`
|
|
)
|
|
|
|
func New(vaultTok, vaultAddr, vaultMnt, collNm string) (c *Client, err error) {
|
|
|
|
c = &Client{
|
|
// lastIdx: 0,
|
|
vtok: vaultTok,
|
|
vaddr: vaultAddr,
|
|
scollNm: collNm,
|
|
vmnt: vaultMnt,
|
|
errsDone: make(chan bool, 1),
|
|
errChan: make(chan error),
|
|
// vc: nil,
|
|
wg: sync.WaitGroup{},
|
|
ctx: context.Background(),
|
|
// ssvc: nil,
|
|
// scoll: nil,
|
|
mErr: multierr.NewMultiError(nil),
|
|
// inSS: nil,
|
|
// inVault: nil,
|
|
}
|
|
|
|
if c.vc, err = vault.New(vault.WithAddress(c.vaddr)); err != nil {
|
|
return
|
|
}
|
|
if err = c.vc.SetToken(c.vtok); err != nil {
|
|
return
|
|
}
|
|
|
|
if c.ssvc, err = gosecret.NewService(); err != nil {
|
|
return
|
|
}
|
|
if c.scoll, err = c.ssvc.GetCollection(collNm); err != nil {
|
|
return
|
|
}
|
|
|
|
go c.readErrs()
|
|
|
|
c.wg.Add(2)
|
|
go c.getSS()
|
|
go c.getVault()
|
|
|
|
c.wg.Wait()
|
|
|
|
if !c.mErr.IsEmpty() {
|
|
err = c.mErr
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func normalizeVaultNm(nm string) (normalized string) {
|
|
|
|
var c rune
|
|
var idx int
|
|
var last rune
|
|
var repl rune = '_'
|
|
var reduced []rune = make([]rune, 0)
|
|
var norm []rune = make([]rune, 0, len(nm))
|
|
|
|
for _, c = range nm {
|
|
// If it's "safe" chars, it's fine
|
|
if (c == '-' || c == '.') || // 0x2d, 0x2e
|
|
(c >= '0' && c <= '9') || // 0x30 to 0x39
|
|
(c == '@') || // 0x40
|
|
(c >= 'A' && c <= 'Z') || // 0x41 to 0x5a
|
|
(c == '_') || // 0x5f
|
|
(c >= 'a' && c <= 'z') { // 0x61 to 0x7a
|
|
norm = append(norm, c)
|
|
continue
|
|
}
|
|
// Otherwise normalize it to a safe char
|
|
norm = append(norm, repl)
|
|
}
|
|
|
|
// And remove repeating sequential replacers.
|
|
for idx, c = range norm[:] {
|
|
if idx == 0 {
|
|
last = c
|
|
reduced = append(reduced, c)
|
|
continue
|
|
}
|
|
if c == last && last == repl {
|
|
continue
|
|
}
|
|
reduced = append(reduced, c)
|
|
last = c
|
|
}
|
|
|
|
normalized = string(reduced)
|
|
|
|
return
|
|
}
|