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