trim whitespace of client and device names
This commit is contained in:
parent
69a11fc51e
commit
12eccf511b
|
|
@ -1,11 +1,9 @@
|
||||||
language: go
|
language: go
|
||||||
go:
|
go:
|
||||||
- 1.13.x
|
- 1.14.x
|
||||||
before_install:
|
before_install:
|
||||||
# download super-linter: golangci-lint
|
# download super-linter: golangci-lint
|
||||||
- curl -sL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin latest
|
- curl -sL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin latest
|
||||||
install:
|
|
||||||
- go mod download
|
|
||||||
script:
|
script:
|
||||||
- golangci-lint run --enable-all -e G402 -D gochecknoglobals
|
- golangci-lint run --enable-all
|
||||||
- go test ./...
|
- go test ./...
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@ package unifi
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetClients returns a response full of clients' data from the UniFi Controller.
|
// GetClients returns a response full of clients' data from the UniFi Controller.
|
||||||
|
|
@ -26,8 +27,8 @@ func (u *Unifi) GetClients(sites Sites) (Clients, error) {
|
||||||
// Add the special "Site Name" to each client. This becomes a Grafana filter somewhere.
|
// Add the special "Site Name" to each client. This becomes a Grafana filter somewhere.
|
||||||
response.Data[i].SiteName = site.Desc + " (" + site.Name + ")"
|
response.Data[i].SiteName = site.Desc + " (" + site.Name + ")"
|
||||||
// Fix name and hostname fields. Sometimes one or the other is blank.
|
// Fix name and hostname fields. Sometimes one or the other is blank.
|
||||||
response.Data[i].Hostname = pick(d.Hostname, d.Name, d.Mac)
|
response.Data[i].Hostname = strings.TrimSpace(pick(d.Hostname, d.Name, d.Mac))
|
||||||
response.Data[i].Name = pick(d.Name, d.Hostname)
|
response.Data[i].Name = strings.TrimSpace(pick(d.Name, d.Hostname))
|
||||||
}
|
}
|
||||||
|
|
||||||
data = append(data, response.Data...)
|
data = append(data, response.Data...)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ package unifi
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// GetDevices returns a response full of devices' data from the UniFi Controller.
|
// GetDevices returns a response full of devices' data from the UniFi Controller.
|
||||||
|
|
@ -50,25 +51,25 @@ func (u *Unifi) parseDevices(data []json.RawMessage, siteName string) *Devices {
|
||||||
case "uap":
|
case "uap":
|
||||||
dev := &UAP{SiteName: siteName, SourceName: u.URL}
|
dev := &UAP{SiteName: siteName, SourceName: u.URL}
|
||||||
if u.unmarshalDevice(assetType, r, dev) == nil {
|
if u.unmarshalDevice(assetType, r, dev) == nil {
|
||||||
dev.Name = pick(dev.Name, dev.Mac)
|
dev.Name = strings.TrimSpace(pick(dev.Name, dev.Mac))
|
||||||
devices.UAPs = append(devices.UAPs, dev)
|
devices.UAPs = append(devices.UAPs, dev)
|
||||||
}
|
}
|
||||||
case "ugw", "usg": // in case they ever fix the name in the api.
|
case "ugw", "usg": // in case they ever fix the name in the api.
|
||||||
dev := &USG{SiteName: siteName, SourceName: u.URL}
|
dev := &USG{SiteName: siteName, SourceName: u.URL}
|
||||||
if u.unmarshalDevice(assetType, r, dev) == nil {
|
if u.unmarshalDevice(assetType, r, dev) == nil {
|
||||||
dev.Name = pick(dev.Name, dev.Mac)
|
dev.Name = strings.TrimSpace(pick(dev.Name, dev.Mac))
|
||||||
devices.USGs = append(devices.USGs, dev)
|
devices.USGs = append(devices.USGs, dev)
|
||||||
}
|
}
|
||||||
case "usw":
|
case "usw":
|
||||||
dev := &USW{SiteName: siteName, SourceName: u.URL}
|
dev := &USW{SiteName: siteName, SourceName: u.URL}
|
||||||
if u.unmarshalDevice(assetType, r, dev) == nil {
|
if u.unmarshalDevice(assetType, r, dev) == nil {
|
||||||
dev.Name = pick(dev.Name, dev.Mac)
|
dev.Name = strings.TrimSpace(pick(dev.Name, dev.Mac))
|
||||||
devices.USWs = append(devices.USWs, dev)
|
devices.USWs = append(devices.USWs, dev)
|
||||||
}
|
}
|
||||||
case "udm":
|
case "udm":
|
||||||
dev := &UDM{SiteName: siteName, SourceName: u.URL}
|
dev := &UDM{SiteName: siteName, SourceName: u.URL}
|
||||||
if u.unmarshalDevice(assetType, r, dev) == nil {
|
if u.unmarshalDevice(assetType, r, dev) == nil {
|
||||||
dev.Name = pick(dev.Name, dev.Mac)
|
dev.Name = strings.TrimSpace(pick(dev.Name, dev.Mac))
|
||||||
devices.UDMs = append(devices.UDMs, dev)
|
devices.UDMs = append(devices.UDMs, dev)
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ func (d DPIMap) Keys() []string {
|
||||||
|
|
||||||
// DPICats maps the categories to descriptions.
|
// DPICats maps the categories to descriptions.
|
||||||
// From: https://fw-download.ubnt.com/data/usg-dpi/1628-debian-v1.442.0-05f5a57eaef344358bd5a8e84a184c18.tar
|
// From: https://fw-download.ubnt.com/data/usg-dpi/1628-debian-v1.442.0-05f5a57eaef344358bd5a8e84a184c18.tar
|
||||||
var DPICats = DPIMap{
|
var DPICats = DPIMap{ // nolint: gochecknoglobals
|
||||||
0: "Instant Messengers",
|
0: "Instant Messengers",
|
||||||
1: "Peer-to-Peer Networks",
|
1: "Peer-to-Peer Networks",
|
||||||
3: "File Sharing",
|
3: "File Sharing",
|
||||||
|
|
@ -83,7 +83,7 @@ var DPICats = DPIMap{
|
||||||
|
|
||||||
// DPIApps maps the applications to names.
|
// DPIApps maps the applications to names.
|
||||||
// From: https://fw-download.ubnt.com/data/usg-dpi/1628-debian-v1.442.0-05f5a57eaef344358bd5a8e84a184c18.tar
|
// From: https://fw-download.ubnt.com/data/usg-dpi/1628-debian-v1.442.0-05f5a57eaef344358bd5a8e84a184c18.tar
|
||||||
var DPIApps = DPIMap{
|
var DPIApps = DPIMap{ // nolint: gochecknoglobals
|
||||||
1: "MSN",
|
1: "MSN",
|
||||||
2: "Yahoo Messenger",
|
2: "Yahoo Messenger",
|
||||||
3: "AIM/ICQ/iIM",
|
3: "AIM/ICQ/iIM",
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,11 @@
|
||||||
module github.com/unifi-poller/unifi
|
module github.com/unifi-poller/unifi
|
||||||
|
|
||||||
go 1.13
|
go 1.14
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/davecgh/go-spew v1.1.1
|
github.com/davecgh/go-spew v1.1.1
|
||||||
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/pmezard/go-difflib v1.0.0
|
github.com/pmezard/go-difflib v1.0.0
|
||||||
github.com/stretchr/testify v1.4.0
|
github.com/stretchr/testify v1.4.0
|
||||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2
|
golang.org/x/net v0.0.0-20200602114024-627f9648deb9
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,8 @@
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||||
|
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||||
|
|
@ -9,7 +11,10 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
||||||
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/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
|
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
|
||||||
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
|
golang.org/x/net v0.0.0-20200602114024-627f9648deb9 h1:pNX+40auqi2JqRfOP1akLGtYcn15TUbkhwuCO3foqqM=
|
||||||
|
golang.org/x/net v0.0.0-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
|
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,8 @@ import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
|
|
||||||
// IDSList contains a list that contains all of the IDS Events on a controller.
|
// IDSList contains a list that contains all of the IDS Events on a controller.
|
||||||
|
|
@ -135,7 +137,7 @@ func (u *Unifi) GetSiteIDS(site *Site, from, to time.Time) ([]*IDS, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return nil, fmt.Errorf("invalid status code from server %s", resp.Status)
|
return nil, errors.Wrap(errInvalidStatusCode, resp.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := json.Unmarshal(body, &response); err != nil {
|
if err := json.Unmarshal(body, &response); err != nil {
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,9 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Satisfy gomnd
|
var (
|
||||||
const oneItem = 1
|
errDPIDataBug = fmt.Errorf("dpi data table contains more than 1 item; please open a bug report")
|
||||||
|
)
|
||||||
|
|
||||||
// GetSites returns a list of configured sites on the UniFi controller.
|
// GetSites returns a list of configured sites on the UniFi controller.
|
||||||
func (u *Unifi) GetSites() (Sites, error) {
|
func (u *Unifi) GetSites() (Sites, error) {
|
||||||
|
|
@ -24,7 +25,7 @@ func (u *Unifi) GetSites() (Sites, error) {
|
||||||
// Add special SourceName value.
|
// Add special SourceName value.
|
||||||
response.Data[i].SourceName = u.URL
|
response.Data[i].SourceName = u.URL
|
||||||
// If the human name is missing (description), set it to the cryptic name.
|
// If the human name is missing (description), set it to the cryptic name.
|
||||||
response.Data[i].Desc = pick(d.Desc, d.Name)
|
response.Data[i].Desc = strings.TrimSpace(pick(d.Desc, d.Name))
|
||||||
// Add the custom site name to each site. used as a Grafana filter somewhere.
|
// Add the custom site name to each site. used as a Grafana filter somewhere.
|
||||||
response.Data[i].SiteName = d.Desc + " (" + d.Name + ")"
|
response.Data[i].SiteName = d.Desc + " (" + d.Name + ")"
|
||||||
sites = append(sites, d.Name) // used for debug log only
|
sites = append(sites, d.Name) // used for debug log only
|
||||||
|
|
@ -51,9 +52,9 @@ func (u *Unifi) GetSiteDPI(sites Sites) ([]*DPITable, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if l := len(response.Data); l > oneItem {
|
if l := len(response.Data); l > 1 {
|
||||||
return nil, fmt.Errorf("dpi data table contains more than 1 item; please open a bug report")
|
return nil, errDPIDataBug
|
||||||
} else if l != oneItem {
|
} else if l != 1 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,12 @@ import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errCannotUnmarshalFlexInt = fmt.Errorf("cannot unmarshal to FlexInt")
|
||||||
)
|
)
|
||||||
|
|
||||||
// This is a list of unifi API paths.
|
// This is a list of unifi API paths.
|
||||||
|
|
@ -124,7 +130,7 @@ func (f *FlexInt) UnmarshalJSON(b []byte) error {
|
||||||
f.Txt = "0"
|
f.Txt = "0"
|
||||||
f.Val = 0
|
f.Val = 0
|
||||||
default:
|
default:
|
||||||
return fmt.Errorf("cannot unmarshal to FlexInt: %s", b)
|
return errors.Wrapf(errCannotUnmarshalFlexInt, "%v", b)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package unifi
|
package unifi // nolint: testpackage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
|
|
||||||
|
|
@ -399,7 +399,7 @@ type RadioTable []struct {
|
||||||
WlangroupID string `json:"wlangroup_id"`
|
WlangroupID string `json:"wlangroup_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// RadioTableStats is part of the data shared between UAP and UDM
|
// RadioTableStats is part of the data shared between UAP and UDM.
|
||||||
type RadioTableStats []struct {
|
type RadioTableStats []struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Channel FlexInt `json:"channel"`
|
Channel FlexInt `json:"channel"`
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package unifi
|
package unifi // nolint: testpackage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
||||||
|
|
@ -175,7 +175,7 @@ type NetworkTable []struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
// UDMStat holds the "stat" data for a dream machine.
|
// UDMStat holds the "stat" data for a dream machine.
|
||||||
// A dream machine is a USG + USW + Controller
|
// A dream machine is a USG + USW + Controller.
|
||||||
type UDMStat struct {
|
type UDMStat struct {
|
||||||
*Gw `json:"gw"`
|
*Gw `json:"gw"`
|
||||||
*Sw `json:"sw"`
|
*Sw `json:"sw"`
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,15 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
"golang.org/x/net/publicsuffix"
|
"golang.org/x/net/publicsuffix"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errAuthenticationFailed = fmt.Errorf("authentication failed")
|
||||||
|
errInvalidStatusCode = fmt.Errorf("invalid status code from server")
|
||||||
|
)
|
||||||
|
|
||||||
// NewUnifi creates a http.Client with authenticated cookies.
|
// NewUnifi creates a http.Client with authenticated cookies.
|
||||||
// Used to make additional, authenticated requests to the APIs.
|
// Used to make additional, authenticated requests to the APIs.
|
||||||
// Start here.
|
// Start here.
|
||||||
|
|
@ -44,7 +50,7 @@ func NewUnifi(config *Config) (*Unifi, error) {
|
||||||
Client: &http.Client{
|
Client: &http.Client{
|
||||||
Jar: jar,
|
Jar: jar,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: !config.VerifySSL},
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: !config.VerifySSL}, // nolint: gosec
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
@ -58,7 +64,7 @@ func NewUnifi(config *Config) (*Unifi, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := u.GetServerData(); err != nil {
|
if err := u.GetServerData(); err != nil {
|
||||||
return u, fmt.Errorf("unable to get server version: %v", err)
|
return u, errors.Wrap(err, "unable to get server version")
|
||||||
}
|
}
|
||||||
|
|
||||||
return u, nil
|
return u, nil
|
||||||
|
|
@ -85,7 +91,7 @@ func (u *Unifi) Login() error {
|
||||||
req.URL, time.Since(start).Round(time.Millisecond), resp.ContentLength)
|
req.URL, time.Since(start).Round(time.Millisecond), resp.ContentLength)
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
return fmt.Errorf("authentication failed (user: %s): %s (status: %s)",
|
return errors.Wrapf(errAuthenticationFailed, "(user: %s): %s (status: %s)",
|
||||||
u.User, req.URL, resp.Status)
|
u.User, req.URL, resp.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -111,7 +117,7 @@ func (u *Unifi) checkNewStyleAPI() error {
|
||||||
return http.ErrUseLastResponse
|
return http.ErrUseLastResponse
|
||||||
},
|
},
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
TLSClientConfig: &tls.Config{InsecureSkipVerify: !u.VerifySSL},
|
TLSClientConfig: &tls.Config{InsecureSkipVerify: !u.VerifySSL}, // nolint: gosec
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -216,7 +222,7 @@ func (u *Unifi) GetJSON(apiPath string, params ...string) ([]byte, error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if resp.StatusCode != http.StatusOK {
|
if resp.StatusCode != http.StatusOK {
|
||||||
err = fmt.Errorf("invalid status code from server for %s: %s", req.URL, resp.Status)
|
err = errors.Wrapf(errInvalidStatusCode, "%s: %s", req.URL, resp.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
return body, err
|
return body, err
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package unifi
|
package unifi // nolint: testpackage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package unifi
|
package unifi // nolint: testpackage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
package unifi
|
package unifi // nolint: testpackage
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue