1
0
mirror of https://github.com/mje-nz/zerotier-dns.git synced 2024-05-11 05:55:15 +00:00

Merge Multinetwork Support

This commit is contained in:
Aaryn Smith
2018-02-21 14:24:25 -06:00
4 changed files with 29 additions and 12 deletions

View File

@ -81,11 +81,17 @@ func updateDNS() time.Time {
// Get all configured networks:
for domain, id := range viper.GetStringMapString("Networks") {
// Get ZeroTier Network info
ztnetwork := ztapi.GetNetworkInfo(API, URL, id)
ztnetwork, err := ztapi.GetNetworkInfo(API, URL, id)
if err != nil {
log.Fatalf("Unable to update DNS entries: %s", err.Error())
}
// Get list of members in network
log.Infof("Getting Members of Network: %s (%s)", ztnetwork.Config.Name, domain)
lst := ztapi.GetMemberList(API, URL, ztnetwork.ID)
lst, err := ztapi.GetMemberList(API, URL, ztnetwork.ID)
if err != nil {
log.Fatalf("Unable to update DNS entries: %s", err.Error())
}
log.Infof("Got %d members", len(*lst))
for _, n := range *lst {

View File

@ -10,19 +10,25 @@ import (
)
// GetMemberInfo returns a Member containing informationa about a specific member in a ZeroTier network
func GetMemberInfo(API, host, networkID, memberID string) *Member {
func GetMemberInfo(API, host, networkID, memberID string) (*Member, error) {
resp := new(Member)
url := fmt.Sprintf("%s/network/%s/member/%s", host, networkID, memberID)
getJSON(url, API, resp)
return resp
err := getJSON(url, API, resp)
if err != nil {
return nil, fmt.Errorf("Unable to get member info: %s", err.Error())
}
return resp, nil
}
// GetMemberList gets a Slice of Members in a ZeroTier network
func GetMemberList(API, host, networkID string) *Members {
func GetMemberList(API, host, networkID string) (*Members, error) {
resp := new(Members)
url := fmt.Sprintf("%s/network/%s/member", host, networkID)
getJSON(url, API, resp)
return resp
err := getJSON(url, API, resp)
if err != nil {
return nil, fmt.Errorf("Unable to get member list: %s", err.Error())
}
return resp, nil
}
// Members is a List of Members

View File

@ -6,11 +6,14 @@ package ztapi
import "fmt"
// GetNetworkInfo returns a Nework containing information about a ZeroTier network
func GetNetworkInfo(API, host, networkID string) *Network {
func GetNetworkInfo(API, host, networkID string) (*Network, error) {
resp := new(Network)
url := fmt.Sprintf("%s/network/%s", host, networkID)
getJSON(url, API, resp)
return resp
err := getJSON(url, API, resp)
if err != nil {
return nil, fmt.Errorf("Unable to get network info: %s", err.Error())
}
return resp, nil
}
// Network contains the JSON response for a request for a network
@ -29,7 +32,6 @@ type Network struct {
}
Config struct {
ActiveMemberCount int
AuthTokens []string
AuthorizedMemberCount int
Capabilities []string
Clock int

View File

@ -23,6 +23,9 @@ func getJSON(url, APIToken string, target interface{}) error {
if err != nil {
return err
}
if r.StatusCode != 200 {
return fmt.Errorf("API returned error: %s", r.Status)
}
defer r.Body.Close()
return json.NewDecoder(r.Body).Decode(target)
}