opnsense-exporter/opnsense/openvpn.go

64 lines
1.4 KiB
Go
Raw Normal View History

package opnsense
import "strings"
const fetchOpenVPNPayload = `{"current":1,"rowCount":-1,"sort":{},"searchPhrase":""}`
type openVPNSearchResponse struct {
Rows []struct {
UUID string `json:"uuid"`
Description string `json:"description"`
Role string `json:"role"`
DevType string `json:"dev_type"`
Enabled string `json:"enabled"`
} `json:"rows"`
RowCount int `json:"rowCount"`
Total int `json:"total"`
Current int `json:"current"`
}
type OpenVPN struct {
UUID string
Description string
Role string
DevType string
Enabled int
}
type OpenVPNInstances struct {
Rows []OpenVPN
}
func (c *Client) FetchOpenVPNInstances() (OpenVPNInstances, *APICallError) {
var resp openVPNSearchResponse
var data OpenVPNInstances
url, ok := c.endpoints["openVPNInstances"]
if !ok {
return data, &APICallError{
Endpoint: "openvpn",
Message: "endpoint not found in client endpoints",
StatusCode: 0,
}
}
if err := c.do("POST", url, strings.NewReader(fetchOpenVPNPayload), &resp); err != nil {
return data, err
}
for _, v := range resp.Rows {
enabled, err := parseStringToInt(v.Enabled, url)
if err != nil {
return data, err
}
data.Rows = append(data.Rows, OpenVPN{
UUID: v.UUID,
Description: v.Description,
Role: strings.ToLower(v.Role),
DevType: v.DevType,
Enabled: enabled,
})
}
return data, nil
}