{"id":24956839,"url":"https://github.com/andrewstuart/edgeos-rest","last_synced_at":"2025-04-10T19:04:46.556Z","repository":{"id":57480231,"uuid":"77642917","full_name":"andrewstuart/edgeos-rest","owner":"andrewstuart","description":"An EdgeOS REST client in Go.","archived":false,"fork":false,"pushed_at":"2019-01-25T06:32:55.000Z","size":20,"stargazers_count":18,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T16:46:15.669Z","etag":null,"topics":["client","edgeos","edgerouter","erlite","golang","ubiquiti","unifi"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andrewstuart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-12-29T22:12:03.000Z","updated_at":"2025-02-19T01:13:37.000Z","dependencies_parsed_at":"2022-09-26T17:41:38.371Z","dependency_job_id":null,"html_url":"https://github.com/andrewstuart/edgeos-rest","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewstuart%2Fedgeos-rest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewstuart%2Fedgeos-rest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewstuart%2Fedgeos-rest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrewstuart%2Fedgeos-rest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrewstuart","download_url":"https://codeload.github.com/andrewstuart/edgeos-rest/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248279196,"owners_count":21077406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","edgeos","edgerouter","erlite","golang","ubiquiti","unifi"],"created_at":"2025-02-03T06:41:21.151Z","updated_at":"2025-04-10T19:04:46.528Z","avatar_url":"https://github.com/andrewstuart.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# edgeos\n--\n    import \"astuart.co/edgeos-rest/pkg/edgeos\"\n\nPackage edgeos provides a Go client for interfacing with EdgeOS devices. It has\nbeen developed and tested against the ERLite running v1.9.1 firmware. Thus far,\nit serves primarily to expose high-level generic functionality as well as a\nspecific implementation for the port forwarding features.\n\n## Usage\n\n#### type Client\n\n```go\ntype Client struct {\n\tUsername, Password, Address string\n\n\tPath, Suffix, LoginEndpoint string\n}\n```\n\nA Client can interact with the EdgeOS REST API\n\n#### func  NewClient\n\n```go\nfunc NewClient(addr, username, password string) (*Client, error)\n```\nNewClient returns an initialized Client for interacting with an EdgeOS device\n\n#### func (*Client) Feature\n\n```go\nfunc (c *Client) Feature(s Scenario) (Resp, error)\n```\nFeature takes an EdgeOS \"Scenario\" as an argument and returns a Resp\nrepresenting the JSON returned by the API.\n\n#### func (*Client) FeatureFor\n\n```go\nfunc (c *Client) FeatureFor(s Scenario, out interface{}) error\n```\nFeatureFor takes a scenario and a pointer to a struct. The JSON response will be\ndeserialized into the `out` object, and any errors will be returned.\n\n#### func (*Client) Get\n\n```go\nfunc (c *Client) Get() (Resp, error)\n```\nGet returns some standard configuration information from EdgeOS\n\n#### func (*Client) GetJSON\n\n```go\nfunc (c *Client) GetJSON(endpoint string, data interface{}) (Resp, error)\n```\nGetJSON takes an endpoint and data for the POST body (or GET if `data` is nil)\nand returns the Resp type that contains the data response from the endpoint.\n\n#### func (*Client) JSONFor\n\n```go\nfunc (c *Client) JSONFor(endpoint string, data, out interface{}) error\n```\nJSONFor is a high-level method that takes an endpoint, a post body, and a\npointer to a struct into which the JSON should be decoded.\n\n#### func (*Client) Login\n\n```go\nfunc (c *Client) Login() error\n```\nLogin sets up an http session with the EdgeOS device using the supplied endpoint\nand credentials\n\n#### func (*Client) PortForwards\n\n```go\nfunc (c *Client) PortForwards() (*FeatureResponse, error)\n```\n\n#### func (*Client) SetFeature\n\n```go\nfunc (c *Client) SetFeature(s Scenario, data interface{}) (Resp, error)\n```\nSetFeature allows users to programmatically update features\n\n#### func (*Client) SetFeatureFor\n\n```go\nfunc (c *Client) SetFeatureFor(s Scenario, data interface{}, out interface{}) error\n```\nSetFeatureFor takes a \"Scenario\", some data to send, and a pointer to an\ninterface into which the JSON response will be decoded.\n\n#### type Config\n\n```go\ntype Config struct {\n\tSuccess bool `json:\"success\"`\n\tGET     struct {\n\t\tFirewall struct {\n\t\t\tAllPing              string `json:\"all-ping\"`\n\t\t\tBroadcastPing        string `json:\"broadcast-ping\"`\n\t\t\tIpv6ReceiveRedirects string `json:\"ipv6-receive-redirects\"`\n\t\t\tIpv6SrcRoute         string `json:\"ipv6-src-route\"`\n\t\t\tIPSrcRoute           string `json:\"ip-src-route\"`\n\t\t\tLogMartians          string `json:\"log-martians\"`\n\t\t\tName                 struct {\n\t\t\t\tLANLOCAL struct {\n\t\t\t\t\tDefaultAction string `json:\"default-action\"`\n\t\t\t\t\tDescription   string `json:\"description\"`\n\t\t\t\t\tRule          struct {\n\t\t\t\t\t\tNum1 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tDestination struct {\n\t\t\t\t\t\t\t\tGroup struct {\n\t\t\t\t\t\t\t\t\tAddressGroup string `json:\"address-group\"`\n\t\t\t\t\t\t\t\t} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"destination\"`\n\t\t\t\t\t\t\tLog      string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol string `json:\"protocol\"`\n\t\t\t\t\t\t\tSource   struct {\n\t\t\t\t\t\t\t\tGroup interface{} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"source\"`\n\t\t\t\t\t\t\tState struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"1\"`\n\t\t\t\t\t\tNum2 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tDestination struct {\n\t\t\t\t\t\t\t\tGroup struct {\n\t\t\t\t\t\t\t\t\tAddressGroup string `json:\"address-group\"`\n\t\t\t\t\t\t\t\t} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"destination\"`\n\t\t\t\t\t\t\tLog      string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol string `json:\"protocol\"`\n\t\t\t\t\t\t\tSource   struct {\n\t\t\t\t\t\t\t\tGroup interface{} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"source\"`\n\t\t\t\t\t\t\tState struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"2\"`\n\t\t\t\t\t} `json:\"rule\"`\n\t\t\t\t} `json:\"LAN_LOCAL\"`\n\t\t\t\tWANIN struct {\n\t\t\t\t\tDefaultAction    string      `json:\"default-action\"`\n\t\t\t\t\tDescription      string      `json:\"description\"`\n\t\t\t\t\tEnableDefaultLog interface{} `json:\"enable-default-log\"`\n\t\t\t\t\tRule             struct {\n\t\t\t\t\t\tNum20 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tLog         string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol    string `json:\"protocol\"`\n\t\t\t\t\t\t\tState       struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"20\"`\n\t\t\t\t\t\tNum30 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tLog         string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol    string `json:\"protocol\"`\n\t\t\t\t\t\t\tSource      struct {\n\t\t\t\t\t\t\t\tGroup interface{} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"source\"`\n\t\t\t\t\t\t\tState struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"30\"`\n\t\t\t\t\t} `json:\"rule\"`\n\t\t\t\t} `json:\"WAN_IN\"`\n\t\t\t\tWANLOCAL struct {\n\t\t\t\t\tDefaultAction    string      `json:\"default-action\"`\n\t\t\t\t\tDescription      string      `json:\"description\"`\n\t\t\t\t\tEnableDefaultLog interface{} `json:\"enable-default-log\"`\n\t\t\t\t\tRule             struct {\n\t\t\t\t\t\tNum10 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tLog         string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol    string `json:\"protocol\"`\n\t\t\t\t\t\t\tState       struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"10\"`\n\t\t\t\t\t\tNum20 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tDestination struct {\n\t\t\t\t\t\t\t\tGroup struct {\n\t\t\t\t\t\t\t\t\tAddressGroup string `json:\"address-group\"`\n\t\t\t\t\t\t\t\t} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"destination\"`\n\t\t\t\t\t\t\tLog      string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol string `json:\"protocol\"`\n\t\t\t\t\t\t} `json:\"20\"`\n\t\t\t\t\t\tNum30 struct {\n\t\t\t\t\t\t\tAction      string `json:\"action\"`\n\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\tLog         string `json:\"log\"`\n\t\t\t\t\t\t\tProtocol    string `json:\"protocol\"`\n\t\t\t\t\t\t\tSource      struct {\n\t\t\t\t\t\t\t\tGroup interface{} `json:\"group\"`\n\t\t\t\t\t\t\t} `json:\"source\"`\n\t\t\t\t\t\t\tState struct {\n\t\t\t\t\t\t\t\tEstablished string `json:\"established\"`\n\t\t\t\t\t\t\t\tInvalid     string `json:\"invalid\"`\n\t\t\t\t\t\t\t\tNew         string `json:\"new\"`\n\t\t\t\t\t\t\t\tRelated     string `json:\"related\"`\n\t\t\t\t\t\t\t} `json:\"state\"`\n\t\t\t\t\t\t} `json:\"30\"`\n\t\t\t\t\t} `json:\"rule\"`\n\t\t\t\t} `json:\"WAN_LOCAL\"`\n\t\t\t} `json:\"name\"`\n\t\t\tOptions          interface{} `json:\"options\"`\n\t\t\tReceiveRedirects string      `json:\"receive-redirects\"`\n\t\t\tSendRedirects    string      `json:\"send-redirects\"`\n\t\t\tSourceValidation string      `json:\"source-validation\"`\n\t\t\tSynCookies       string      `json:\"syn-cookies\"`\n\t\t} `json:\"firewall\"`\n\t\tInterfaces struct {\n\t\t\tEthernet struct {\n\t\t\t\tEth0 struct {\n\t\t\t\t\tAddress     []string `json:\"address\"`\n\t\t\t\t\tDescription string   `json:\"description\"`\n\t\t\t\t\tDuplex      string   `json:\"duplex\"`\n\t\t\t\t\tFirewall    struct {\n\t\t\t\t\t\tIn struct {\n\t\t\t\t\t\t\tName string `json:\"name\"`\n\t\t\t\t\t\t} `json:\"in\"`\n\t\t\t\t\t\tLocal struct {\n\t\t\t\t\t\t\tName string `json:\"name\"`\n\t\t\t\t\t\t} `json:\"local\"`\n\t\t\t\t\t} `json:\"firewall\"`\n\t\t\t\t\tSpeed string `json:\"speed\"`\n\t\t\t\t} `json:\"eth0\"`\n\t\t\t\tEth1 struct {\n\t\t\t\t\tAddress     []string `json:\"address\"`\n\t\t\t\t\tDescription string   `json:\"description\"`\n\t\t\t\t\tDuplex      string   `json:\"duplex\"`\n\t\t\t\t\tFirewall    struct {\n\t\t\t\t\t\tLocal struct {\n\t\t\t\t\t\t\tName string `json:\"name\"`\n\t\t\t\t\t\t} `json:\"local\"`\n\t\t\t\t\t} `json:\"firewall\"`\n\t\t\t\t\tSpeed string `json:\"speed\"`\n\t\t\t\t} `json:\"eth1\"`\n\t\t\t\tEth2 struct {\n\t\t\t\t\tDuplex string `json:\"duplex\"`\n\t\t\t\t\tSpeed  string `json:\"speed\"`\n\t\t\t\t} `json:\"eth2\"`\n\t\t\t} `json:\"ethernet\"`\n\t\t\tLoopback struct {\n\t\t\t\tLo interface{} `json:\"lo\"`\n\t\t\t} `json:\"loopback\"`\n\t\t} `json:\"interfaces\"`\n\t\tService struct {\n\t\t\tDhcpServer struct {\n\t\t\t\tDisabled          string `json:\"disabled\"`\n\t\t\t\tHostfileUpdate    string `json:\"hostfile-update\"`\n\t\t\t\tSharedNetworkName struct {\n\t\t\t\t\tInternal struct {\n\t\t\t\t\t\tAuthoritative string `json:\"authoritative\"`\n\t\t\t\t\t\tSubnet        struct {\n\t\t\t\t\t\t\tOne9216816122 struct {\n\t\t\t\t\t\t\t\tDefaultRouter string   `json:\"default-router\"`\n\t\t\t\t\t\t\t\tDNSServer     []string `json:\"dns-server\"`\n\t\t\t\t\t\t\t\tDomainName    string   `json:\"domain-name\"`\n\t\t\t\t\t\t\t\tLease         string   `json:\"lease\"`\n\t\t\t\t\t\t\t\tStart         struct {\n\t\t\t\t\t\t\t\t\tOne9216816100 struct {\n\t\t\t\t\t\t\t\t\t\tStop string `json:\"stop\"`\n\t\t\t\t\t\t\t\t\t} `json:\"192.168.16.100\"`\n\t\t\t\t\t\t\t\t} `json:\"start\"`\n\t\t\t\t\t\t\t\tStaticMapping struct {\n\t\t\t\t\t\t\t\t\tBRN30055CC581BE struct {\n\t\t\t\t\t\t\t\t\t\tIPAddress  string `json:\"ip-address\"`\n\t\t\t\t\t\t\t\t\t\tMacAddress string `json:\"mac-address\"`\n\t\t\t\t\t\t\t\t\t} `json:\"BRN30055CC581BE\"`\n\t\t\t\t\t\t\t\t\tR6300V2 struct {\n\t\t\t\t\t\t\t\t\t\tIPAddress  string `json:\"ip-address\"`\n\t\t\t\t\t\t\t\t\t\tMacAddress string `json:\"mac-address\"`\n\t\t\t\t\t\t\t\t\t} `json:\"R6300v2\"`\n\t\t\t\t\t\t\t\t\tAstuart struct {\n\t\t\t\t\t\t\t\t\t\tIPAddress  string `json:\"ip-address\"`\n\t\t\t\t\t\t\t\t\t\tMacAddress string `json:\"mac-address\"`\n\t\t\t\t\t\t\t\t\t} `json:\"astuart\"`\n\t\t\t\t\t\t\t\t} `json:\"static-mapping\"`\n\t\t\t\t\t\t\t} `json:\"192.168.16.1/22\"`\n\t\t\t\t\t\t} `json:\"subnet\"`\n\t\t\t\t\t} `json:\"Internal\"`\n\t\t\t\t} `json:\"shared-network-name\"`\n\t\t\t\tUseDnsmasq string `json:\"use-dnsmasq\"`\n\t\t\t} `json:\"dhcp-server\"`\n\t\t\tDNS struct {\n\t\t\t\tForwarding struct {\n\t\t\t\t\tCacheSize string   `json:\"cache-size\"`\n\t\t\t\t\tListenOn  []string `json:\"listen-on\"`\n\t\t\t\t} `json:\"forwarding\"`\n\t\t\t} `json:\"dns\"`\n\t\t\tGui struct {\n\t\t\t\tHTTPPort     string `json:\"http-port\"`\n\t\t\t\tHTTPSPort    string `json:\"https-port\"`\n\t\t\t\tOlderCiphers string `json:\"older-ciphers\"`\n\t\t\t} `json:\"gui\"`\n\t\t\tNat struct {\n\t\t\t\tRule struct {\n\t\t\t\t\tNum5000 struct {\n\t\t\t\t\t\tDescription       string `json:\"description\"`\n\t\t\t\t\t\tLog               string `json:\"log\"`\n\t\t\t\t\t\tOutboundInterface string `json:\"outbound-interface\"`\n\t\t\t\t\t\tProtocol          string `json:\"protocol\"`\n\t\t\t\t\t\tSource            struct {\n\t\t\t\t\t\t\tGroup interface{} `json:\"group\"`\n\t\t\t\t\t\t} `json:\"source\"`\n\t\t\t\t\t\tType string `json:\"type\"`\n\t\t\t\t\t} `json:\"5000\"`\n\t\t\t\t} `json:\"rule\"`\n\t\t\t} `json:\"nat\"`\n\t\t\tSnmp struct {\n\t\t\t\tCommunity struct {\n\t\t\t\t\tPublic struct {\n\t\t\t\t\t\tAuthorization string   `json:\"authorization\"`\n\t\t\t\t\t\tNetwork       []string `json:\"network\"`\n\t\t\t\t\t} `json:\"public\"`\n\t\t\t\t} `json:\"community\"`\n\t\t\t\tContact  string `json:\"contact\"`\n\t\t\t\tLocation string `json:\"location\"`\n\t\t\t} `json:\"snmp\"`\n\t\t\tSSH struct {\n\t\t\t\tPort            string `json:\"port\"`\n\t\t\t\tProtocolVersion string `json:\"protocol-version\"`\n\t\t\t} `json:\"ssh\"`\n\t\t} `json:\"service\"`\n\t\tSystem struct {\n\t\t\tDomainName string `json:\"domain-name\"`\n\t\t\tHostName   string `json:\"host-name\"`\n\t\t\tLogin      struct {\n\t\t\t\tUser struct {\n\t\t\t\t\tAndrew struct {\n\t\t\t\t\t\tAuthentication struct {\n\t\t\t\t\t\t\tEncryptedPassword string `json:\"encrypted-password\"`\n\t\t\t\t\t\t\tPlaintextPassword string `json:\"plaintext-password\"`\n\t\t\t\t\t\t\tPublicKeys        struct {\n\t\t\t\t\t\t\t\tAndrewAstuart struct {\n\t\t\t\t\t\t\t\t\tKey  string `json:\"key\"`\n\t\t\t\t\t\t\t\t\tType string `json:\"type\"`\n\t\t\t\t\t\t\t\t} `json:\"andrew@astuart\"`\n\t\t\t\t\t\t\t\tAndrewDesktop struct {\n\t\t\t\t\t\t\t\t\tKey  string `json:\"key\"`\n\t\t\t\t\t\t\t\t\tType string `json:\"type\"`\n\t\t\t\t\t\t\t\t} `json:\"andrew@desktop\"`\n\t\t\t\t\t\t\t} `json:\"public-keys\"`\n\t\t\t\t\t\t} `json:\"authentication\"`\n\t\t\t\t\t\tFullName string `json:\"full-name\"`\n\t\t\t\t\t\tLevel    string `json:\"level\"`\n\t\t\t\t\t} `json:\"andrew\"`\n\t\t\t\t} `json:\"user\"`\n\t\t\t} `json:\"login\"`\n\t\t\tNameServer []string `json:\"name-server\"`\n\t\t\tOffload    struct {\n\t\t\t\tHwnat string `json:\"hwnat\"`\n\t\t\t\tIpsec string `json:\"ipsec\"`\n\t\t\t\tIpv4  struct {\n\t\t\t\t\tForwarding string `json:\"forwarding\"`\n\t\t\t\t} `json:\"ipv4\"`\n\t\t\t\tIpv6 struct {\n\t\t\t\t\tForwarding string `json:\"forwarding\"`\n\t\t\t\t} `json:\"ipv6\"`\n\t\t\t} `json:\"offload\"`\n\t\t\tSyslog struct {\n\t\t\t\tGlobal struct {\n\t\t\t\t\tFacility struct {\n\t\t\t\t\t\tAll struct {\n\t\t\t\t\t\t\tLevel string `json:\"level\"`\n\t\t\t\t\t\t} `json:\"all\"`\n\t\t\t\t\t\tProtocols struct {\n\t\t\t\t\t\t\tLevel string `json:\"level\"`\n\t\t\t\t\t\t} `json:\"protocols\"`\n\t\t\t\t\t} `json:\"facility\"`\n\t\t\t\t} `json:\"global\"`\n\t\t\t\tHost struct {\n\t\t\t\t\tOne9216816115140 struct {\n\t\t\t\t\t\tFacility struct {\n\t\t\t\t\t\t\tAll struct {\n\t\t\t\t\t\t\t\tLevel string `json:\"level\"`\n\t\t\t\t\t\t\t} `json:\"all\"`\n\t\t\t\t\t\t} `json:\"facility\"`\n\t\t\t\t\t} `json:\"192.168.16.11:5140\"`\n\t\t\t\t\tLogsAstuartCo5140 struct {\n\t\t\t\t\t\tFacility struct {\n\t\t\t\t\t\t\tAll struct {\n\t\t\t\t\t\t\t\tLevel string `json:\"level\"`\n\t\t\t\t\t\t\t} `json:\"all\"`\n\t\t\t\t\t\t} `json:\"facility\"`\n\t\t\t\t\t} `json:\"logs.astuart.co:5140\"`\n\t\t\t\t} `json:\"host\"`\n\t\t\t} `json:\"syslog\"`\n\t\t\tTimeZone        string `json:\"time-zone\"`\n\t\t\tTrafficAnalysis struct {\n\t\t\t\tDpi    string `json:\"dpi\"`\n\t\t\t\tExport string `json:\"export\"`\n\t\t\t} `json:\"traffic-analysis\"`\n\t\t} `json:\"system\"`\n\t\tVpn       interface{} `json:\"vpn\"`\n\t\tProtocols struct {\n\t\t\tStatic struct {\n\t\t\t\tRoute struct {\n\t\t\t\t\tOne7231254124 struct {\n\t\t\t\t\t\tNextHop struct {\n\t\t\t\t\t\t\tOne921681612 struct {\n\t\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\t\tDistance    string `json:\"distance\"`\n\t\t\t\t\t\t\t} `json:\"192.168.16.12\"`\n\t\t\t\t\t\t} `json:\"next-hop\"`\n\t\t\t\t\t} `json:\"172.31.254.1/24\"`\n\t\t\t\t\tOne7231255124 struct {\n\t\t\t\t\t\tNextHop struct {\n\t\t\t\t\t\t\tOne921681611 struct {\n\t\t\t\t\t\t\t\tDescription string `json:\"description\"`\n\t\t\t\t\t\t\t\tDistance    string `json:\"distance\"`\n\t\t\t\t\t\t\t} `json:\"192.168.16.11\"`\n\t\t\t\t\t\t} `json:\"next-hop\"`\n\t\t\t\t\t} `json:\"172.31.255.1/24\"`\n\t\t\t\t} `json:\"route\"`\n\t\t\t} `json:\"static\"`\n\t\t} `json:\"protocols\"`\n\t\tTrafficControl interface{} `json:\"traffic-control\"`\n\t} `json:\"GET\"`\n\tSESSIONID string `json:\"SESSION_ID\"`\n}\n```\n\n\n#### type Feature\n\n```go\ntype Feature struct {\n\tData PortForwards\n\t// Data       interface{}\n\tDefinition interface{}\n\n\tDeletable string\n\tSuccess   string\n}\n```\n\n\n#### type FeatureResponse\n\n```go\ntype FeatureResponse struct {\n\tResponse\n\tFeature Feature `json:\"FEATURE\"`\n}\n```\n\nFeatureResponse encapsulates the Response metadata and the Feature\n\n#### type LanConfig\n\n```go\ntype LanConfig map[string]string\n```\n\nLanConfig is a simple string map that encapsulates the LAN configuration data.\n\n#### type PortForward\n\n```go\ntype PortForward struct {\n\tPortFrom    string `json:\"original-port\"`\n\tPortTo      string `json:\"forward-to-port\"`\n\tIPTo        string `json:\"forward-to-address\"`\n\tProtocol    string `json:\"protocol\"`\n\tDescription string `json:\"description\"`\n}\n```\n\nPortForward is a struct that represents a port forwarding rule\n\n#### type PortForwards\n\n```go\ntype PortForwards struct {\n\tAutoFirewall string        `json:\"auto-firewall\"`\n\tHairpinNAT   string        `json:\"hairpin-nat\"`\n\tWAN          string        `json:\"wan\"`\n\tLans         []LanConfig   `json:\"lans-config\"`\n\tRules        []PortForward `json:\"rules-config\"`\n}\n```\n\nPortForwards is a struct that represents the response from the API for with the\nlist of port forwards, etc.\n\n#### type Resp\n\n```go\ntype Resp map[string]interface{}\n```\n\nResp is the basic response type for the EdgeOS API. Higher-level methods will\ntend to skip this type and return strongly-typed objects for specific endpoints.\n\n#### type Response\n\n```go\ntype Response struct {\n\tSuccess bool   `json:\"success\"`\n\tError   string `json:\"error\"`\n}\n```\n\nResponse is a struct (intended for embedding) that represents response metadata\nreturned by the EdgeOS API.\n\n#### type Scenario\n\n```go\ntype Scenario string\n```\n\nScenario is just a string type to encourage the use of internal constants.\n\n```go\nconst (\n\tPortForwarding Scenario = \".Port_Forwarding\"\n)\n```\nCommon feature endpoints\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewstuart%2Fedgeos-rest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrewstuart%2Fedgeos-rest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrewstuart%2Fedgeos-rest/lists"}