Files
go-unifi/fields/fwupdate.go
Joshua Spence 97b562a6d2 Improvements to field generation (#137)
* Remove `no-embedded-types` flag

We don't use this.

* Use `fw-download.ubnt.com`

* Return firmware download URL from `latestUnifiVersion`

* Don't use version metadata
2023-05-26 15:29:07 +10:00

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"`
}
func firmwareUpdateApiFilter(key, value string) string {
return fmt.Sprintf("%s~~%s~~%s", "eq", key, value)
}