github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-networks/main.go (about)

     1  // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved.
     2  // Use of this source code is governed by ISC-style license
     3  // that can be found in the LICENSE file.
     4  
     5  // Example command list-networks
     6  // Prints networks of a given site
     7  // If no site is specified, all of the controllers networks are listed
     8  
     9  package main
    10  
    11  import (
    12  	"flag"
    13  	"fmt"
    14  	"log"
    15  	"os"
    16  	"strconv"
    17  	"text/tabwriter"
    18  
    19  	"github.com/dim13/unifi"
    20  )
    21  
    22  var (
    23  	host    = flag.String("host", "unifi", "Controller hostname")
    24  	user    = flag.String("user", "admin", "Controller username")
    25  	pass    = flag.String("pass", "unifi", "Controller password")
    26  	port    = flag.String("port", "8443", "Controller port")
    27  	version = flag.Int("version", 5, "Controller base version")
    28  	siteid  = flag.String("siteid", "", "Sitename or description")
    29  )
    30  
    31  func main() {
    32  	w := new(tabwriter.Writer)
    33  	w.Init(os.Stdout, 0, 8, 3, ' ', 0)
    34  	defer w.Flush()
    35  
    36  	flag.Parse()
    37  
    38  	u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version)
    39  	if err != nil {
    40  		log.Fatalln("Login returned error: ")
    41  	}
    42  	defer u.Logout()
    43  
    44  	var sites []unifi.Site
    45  
    46  	// If site specified, print networks of site
    47  	// Else print networks of all sites
    48  	if *siteid != "" {
    49  		site, err := u.Site(*siteid)
    50  		if err != nil {
    51  			log.Fatal(err)
    52  		}
    53  		sites = append(sites, *site)
    54  	} else {
    55  		sites, err = u.Sites()
    56  		if err != nil {
    57  			log.Fatal(err)
    58  		}
    59  	}
    60  
    61  	for _, s := range sites {
    62  
    63  		if len(sites) > 1 {
    64  			fmt.Fprintf(w, "Site: %s\n", s.Desc)
    65  			w.Flush()
    66  		}
    67  
    68  		// Returns a slice of devices
    69  		networks, err := u.Networks(&s)
    70  
    71  		if err != nil {
    72  			log.Fatalln(err)
    73  		}
    74  
    75  		// Output headline
    76  		fmt.Fprintln(w, "ID\tName\tSiteID\tPurpose\tSubnet\tNetworkgroup\tDomainname\tAttrHiddenId\tAttrNoDelete\tVlanEnabled")
    77  
    78  		for _, n := range networks {
    79  			id := n.ID           // string
    80  			name := n.Name       // string
    81  			siteid := n.SiteID   // string
    82  			purpose := n.Purpose // string
    83  			subnet := n.IPSubnet
    84  			networkgroup := n.Networkgroup // string
    85  			domaninname := n.DomainName    // string
    86  			attrhiddenid := n.AttrHiddenID //string
    87  			attrnodelete := n.AttrNoDelete // bool
    88  			vlanenabled := n.VlanEnabled   // bool
    89  
    90  			fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", id, name, siteid, purpose, subnet, networkgroup, domaninname, attrhiddenid, strconv.FormatBool(attrnodelete), strconv.FormatBool(vlanenabled))
    91  		}
    92  	}
    93  }