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

     1  // Copyright (c) 2014 The unifi Authors. 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 disable-port
     6  // Disables a port of a USW
     7  package main
     8  
     9  import (
    10  	"flag"
    11  	"log"
    12  	"os"
    13  	"text/tabwriter"
    14  
    15  	"github.com/dim13/unifi"
    16  )
    17  
    18  var (
    19  	host    = flag.String("host", "unifi", "Controller hostname")
    20  	user    = flag.String("user", "admin", "Controller username")
    21  	pass    = flag.String("pass", "unifi", "Controller password")
    22  	port    = flag.String("port", "8443", "Controller port")
    23  	version = flag.Int("version", 5, "Controller base version")
    24  	siteid  = flag.String("siteid", "default", "Sitename or description")
    25  
    26  	devicename = flag.String("devicename", "", "Name of the device")
    27  	index      = flag.Int("index", 0, "Port Index")
    28  )
    29  
    30  func main() {
    31  	w := new(tabwriter.Writer)
    32  	w.Init(os.Stdout, 0, 8, 3, ' ', 0)
    33  	defer w.Flush()
    34  
    35  	flag.Parse()
    36  
    37  	u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version)
    38  	if err != nil {
    39  		log.Fatalln("Login returned error: ", err)
    40  	}
    41  	defer u.Logout()
    42  
    43  	site, err := u.Site(*siteid)
    44  	if err != nil {
    45  		log.Fatal(err)
    46  	}
    47  
    48  	// Returns the USW
    49  	usw, err := u.USW(site, *devicename)
    50  
    51  	if err != nil {
    52  		log.Fatalln(err)
    53  	}
    54  
    55  	if err != nil {
    56  		log.Fatalln(err)
    57  	}
    58  
    59  	// Get port profile name
    60  	profilename := "Disabled"
    61  	profile, err := u.PortProfile(site, profilename)
    62  
    63  	if err != nil {
    64  		log.Fatalln(err)
    65  	}
    66  
    67  	overrides := usw.PortOverrides
    68  
    69  	var found bool
    70  	for i := range usw.PortOverrides {
    71  		if overrides[i].PortIdx == *index {
    72  			overrides[i].PortconfID = profile.ID
    73  			overrides[i].POEMode = unifi.POEModeOff
    74  			overrides[i].Name = "Disabled by script"
    75  			found = true
    76  			break
    77  		}
    78  	}
    79  	// If not found, create a new override for the given port and add it to the slice
    80  	if !found {
    81  		var o unifi.PortOverride
    82  		o.PortIdx = *index
    83  		o.PortconfID = profile.ID
    84  		o.POEMode = unifi.POEModeOff
    85  		o.Name = "Disabled by script"
    86  		overrides = append(overrides, o)
    87  	}
    88  	u.SetPortoverrides(site, usw.DeviceID, overrides)
    89  }