83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
package main
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"net/url"
|
|
|
|
"github.com/hashicorp/go-version"
|
|
)
|
|
|
|
var firmwareUpdateApi = "https://fw-update.ubnt.com/api/firmware-latest"
|
|
|
|
const (
|
|
debianPlatform = "debian"
|
|
releaseChannel = "release"
|
|
unifiControllerProduct = "unifi-controller"
|
|
)
|
|
|
|
type firmwareUpdateApiResponse struct {
|
|
Embedded firmwareUpdateApiResponseEmbedded `json:"_embedded"`
|
|
}
|
|
|
|
type firmwareUpdateApiResponseEmbedded struct {
|
|
Firmware []firmwareUpdateApiResponseEmbeddedFirmware `json:"firmware"`
|
|
}
|
|
|
|
type firmwareUpdateApiResponseEmbeddedFirmware struct {
|
|
Channel string `json:"channel"`
|
|
Created string `json:"created"`
|
|
Id string `json:"id"`
|
|
Platform string `json:"platform"`
|
|
Product string `json:"product"`
|
|
Version *version.Version `json:"version"`
|
|
Links firmwareUpdateApiResponseEmbeddedFirmwareLinks `json:"_links"`
|
|
}
|
|
|
|
type firmwareUpdateApiResponseEmbeddedFirmwareDataLink struct {
|
|
Href *url.URL `json:"href"`
|
|
}
|
|
|
|
func (l firmwareUpdateApiResponseEmbeddedFirmwareDataLink) MarshalJSON() ([]byte, error) {
|
|
var href string
|
|
if l.Href != nil {
|
|
href = l.Href.String()
|
|
}
|
|
|
|
aux := struct {
|
|
Href string `json:"href"`
|
|
}{
|
|
Href: href,
|
|
}
|
|
|
|
return json.Marshal(aux)
|
|
}
|
|
|
|
func (l *firmwareUpdateApiResponseEmbeddedFirmwareDataLink) UnmarshalJSON(j []byte) error {
|
|
var m map[string]interface{}
|
|
|
|
err := json.Unmarshal(j, &m)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if href := m["href"]; href != nil {
|
|
url, err := url.Parse(href.(string))
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
l.Href = url
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
type firmwareUpdateApiResponseEmbeddedFirmwareLinks struct {
|
|
Data firmwareUpdateApiResponseEmbeddedFirmwareDataLink `json:"data,omitempty"`
|
|
}
|
|
|
|
func firmwareUpdateApiFilter(key, value string) string {
|
|
return fmt.Sprintf("%s~~%s~~%s", "eq", key, value)
|
|
}
|