ooni-probe-cli/internal/engine/probeservices/metadata.go

53 lines
1.6 KiB
Go
Raw Normal View History

package probeservices
// Metadata contains metadata about a probe. This message is
// included into a bunch of messages sent to orchestra.
type Metadata struct {
AvailableBandwidth string `json:"available_bandwidth,omitempty"`
DeviceToken string `json:"device_token,omitempty"`
Language string `json:"language,omitempty"`
NetworkType string `json:"network_type,omitempty"`
Platform string `json:"platform"`
ProbeASN string `json:"probe_asn"`
ProbeCC string `json:"probe_cc"`
ProbeFamily string `json:"probe_family,omitempty"`
ProbeTimezone string `json:"probe_timezone,omitempty"`
SoftwareName string `json:"software_name"`
SoftwareVersion string `json:"software_version"`
SupportedTests []string `json:"supported_tests"`
}
// Valid returns true if metadata is valid, false otherwise. Metadata is
// considered valid if all the mandatory fields are not empty. If a field
// is marked `json:",omitempty"` in the structure definition, then it's
// for sure mandatory. The "device_token" field is mandatory only if the
// platform is "ios" or "android", because there's currently no device
// token that we know of for desktop devices.
func (m Metadata) Valid() bool {
if m.ProbeCC == "" {
return false
}
if m.ProbeASN == "" {
return false
}
if m.Platform == "" {
return false
}
if m.SoftwareName == "" {
return false
}
if m.SoftwareVersion == "" {
return false
}
if len(m.SupportedTests) < 1 {
return false
}
switch m.Platform {
case "ios", "android":
if m.DeviceToken == "" {
return false
}
}
return true
}