add support for api-key auth
This commit is contained in:
parent
0c639d6877
commit
cba1111f29
2
go.mod
2
go.mod
|
|
@ -13,7 +13,7 @@ require (
|
||||||
github.com/prometheus/common v0.61.0
|
github.com/prometheus/common v0.61.0
|
||||||
github.com/spf13/pflag v1.0.6-0.20201009195203-85dd5c8bc61c
|
github.com/spf13/pflag v1.0.6-0.20201009195203-85dd5c8bc61c
|
||||||
github.com/stretchr/testify v1.10.0
|
github.com/stretchr/testify v1.10.0
|
||||||
github.com/unpoller/unifi/v5 v5.0.7
|
github.com/unpoller/unifi/v5 v5.1.0
|
||||||
golang.org/x/crypto v0.31.0
|
golang.org/x/crypto v0.31.0
|
||||||
golang.org/x/net v0.33.0
|
golang.org/x/net v0.33.0
|
||||||
golang.org/x/term v0.28.0
|
golang.org/x/term v0.28.0
|
||||||
|
|
|
||||||
4
go.sum
4
go.sum
|
|
@ -75,8 +75,8 @@ github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO
|
||||||
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
|
||||||
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
|
||||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||||
github.com/unpoller/unifi/v5 v5.0.7 h1:Dj5HY2Nhdic4Ygvh2YYW6QKIZjXCSo9IBzVDKaj86Zg=
|
github.com/unpoller/unifi/v5 v5.1.0 h1:ubX/dugKUXvUlxDupoyPcnevck34dTFDFm3M2n4T75o=
|
||||||
github.com/unpoller/unifi/v5 v5.0.7/go.mod h1:G45KRuSH9PFrIUFmDTzWEEM/E/e7GuyXp36AVOfhm7I=
|
github.com/unpoller/unifi/v5 v5.1.0/go.mod h1:G45KRuSH9PFrIUFmDTzWEEM/E/e7GuyXp36AVOfhm7I=
|
||||||
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
|
|
|
||||||
|
|
@ -47,6 +47,7 @@ type Controller struct {
|
||||||
CertPaths []string `json:"ssl_cert_paths" toml:"ssl_cert_paths" xml:"ssl_cert_path" yaml:"ssl_cert_paths"`
|
CertPaths []string `json:"ssl_cert_paths" toml:"ssl_cert_paths" xml:"ssl_cert_path" yaml:"ssl_cert_paths"`
|
||||||
User string `json:"user" toml:"user" xml:"user" yaml:"user"`
|
User string `json:"user" toml:"user" xml:"user" yaml:"user"`
|
||||||
Pass string `json:"pass" toml:"pass" xml:"pass" yaml:"pass"`
|
Pass string `json:"pass" toml:"pass" xml:"pass" yaml:"pass"`
|
||||||
|
APIKey string `json:"api_key" toml:"api_key" xml:"api_key" yaml:"api_key"`
|
||||||
URL string `json:"url" toml:"url" xml:"url" yaml:"url"`
|
URL string `json:"url" toml:"url" xml:"url" yaml:"url"`
|
||||||
Sites []string `json:"sites" toml:"sites" xml:"site" yaml:"sites"`
|
Sites []string `json:"sites" toml:"sites" xml:"site" yaml:"sites"`
|
||||||
Unifi *unifi.Unifi `json:"-" toml:"-" xml:"-" yaml:"-"`
|
Unifi *unifi.Unifi `json:"-" toml:"-" xml:"-" yaml:"-"`
|
||||||
|
|
@ -124,6 +125,7 @@ func (u *InputUnifi) getUnifi(c *Controller) error {
|
||||||
c.Unifi, err = unifi.NewUnifi(&unifi.Config{
|
c.Unifi, err = unifi.NewUnifi(&unifi.Config{
|
||||||
User: c.User,
|
User: c.User,
|
||||||
Pass: c.Pass,
|
Pass: c.Pass,
|
||||||
|
APIKey: c.APIKey,
|
||||||
URL: c.URL,
|
URL: c.URL,
|
||||||
SSLCert: certs,
|
SSLCert: certs,
|
||||||
VerifySSL: *c.VerifySSL,
|
VerifySSL: *c.VerifySSL,
|
||||||
|
|
@ -255,12 +257,22 @@ func (u *InputUnifi) setDefaults(c *Controller) { //nolint:cyclop
|
||||||
c.Pass = u.getPassFromFile(strings.TrimPrefix(c.Pass, "file://"))
|
c.Pass = u.getPassFromFile(strings.TrimPrefix(c.Pass, "file://"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Pass == "" {
|
if strings.HasPrefix(c.APIKey, "file://") {
|
||||||
c.Pass = defaultPass
|
c.APIKey = u.getPassFromFile(strings.TrimPrefix(c.APIKey, "file://"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.User == "" {
|
if c.APIKey == "" {
|
||||||
c.User = defaultUser
|
if c.Pass == "" {
|
||||||
|
c.Pass = defaultPass
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.User == "" {
|
||||||
|
c.User = defaultUser
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// clear out user/pass combo, only use API-key
|
||||||
|
c.User = ""
|
||||||
|
c.Pass = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(c.Sites) == 0 {
|
if len(c.Sites) == 0 {
|
||||||
|
|
@ -324,12 +336,22 @@ func (u *InputUnifi) setControllerDefaults(c *Controller) *Controller { //nolint
|
||||||
c.Pass = u.getPassFromFile(strings.TrimPrefix(c.Pass, "file://"))
|
c.Pass = u.getPassFromFile(strings.TrimPrefix(c.Pass, "file://"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.Pass == "" {
|
if strings.HasPrefix(c.APIKey, "file://") {
|
||||||
c.Pass = u.Default.Pass
|
c.APIKey = u.getPassFromFile(strings.TrimPrefix(c.APIKey, "file://"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.User == "" {
|
if c.APIKey == "" {
|
||||||
c.User = u.Default.User
|
if c.Pass == "" {
|
||||||
|
c.Pass = defaultPass
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.User == "" {
|
||||||
|
c.User = defaultUser
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// clear out user/pass combo, only use API-key
|
||||||
|
c.User = ""
|
||||||
|
c.Pass = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(c.Sites) == 0 {
|
if len(c.Sites) == 0 {
|
||||||
|
|
|
||||||
|
|
@ -124,7 +124,7 @@ func (u *InputUnifi) logController(c *Controller) {
|
||||||
u.Logf(" => Version: %s (%s)", c.Unifi.ServerVersion, c.Unifi.UUID)
|
u.Logf(" => Version: %s (%s)", c.Unifi.ServerVersion, c.Unifi.UUID)
|
||||||
}
|
}
|
||||||
|
|
||||||
u.Logf(" => Username: %s (has password: %v)", c.User, c.Pass != "")
|
u.Logf(" => Username: %s (has password: %v) (has api-key: %v)", c.User, c.Pass != "", c.APIKey != "")
|
||||||
u.Logf(" => Hash PII %v / Drop PII %v / Poll Sites: %s", *c.HashPII, *c.DropPII, strings.Join(c.Sites, ", "))
|
u.Logf(" => Hash PII %v / Drop PII %v / Poll Sites: %s", *c.HashPII, *c.DropPII, strings.Join(c.Sites, ", "))
|
||||||
u.Logf(" => Save Sites %v / Save DPI %v (metrics)", *c.SaveSites, *c.SaveDPI)
|
u.Logf(" => Save Sites %v / Save DPI %v (metrics)", *c.SaveSites, *c.SaveDPI)
|
||||||
u.Logf(" => Save Events %v / Save IDs %v (logs)", *c.SaveEvents, *c.SaveIDs)
|
u.Logf(" => Save Events %v / Save IDs %v (logs)", *c.SaveEvents, *c.SaveIDs)
|
||||||
|
|
|
||||||
|
|
@ -51,6 +51,7 @@ func formatControllers(controllers []*Controller) []*Controller {
|
||||||
SaveSites: c.SaveSites,
|
SaveSites: c.SaveSites,
|
||||||
User: c.User,
|
User: c.User,
|
||||||
Pass: strconv.FormatBool(c.Pass != ""),
|
Pass: strconv.FormatBool(c.Pass != ""),
|
||||||
|
APIKey: strconv.FormatBool(c.APIKey != ""),
|
||||||
URL: c.URL,
|
URL: c.URL,
|
||||||
Sites: c.Sites,
|
Sites: c.Sites,
|
||||||
ID: id,
|
ID: id,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue