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
This commit is contained in:
82
fields/fwupdate.go
Normal file
82
fields/fwupdate.go
Normal file
@@ -0,0 +1,82 @@
|
||||
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)
|
||||
}
|
||||
Reference in New Issue
Block a user