Files
unifi-network-operator/internal/unifi/unifi.go
2025-04-10 00:25:46 +02:00

73 lines
1.5 KiB
Go

/* https://github.com/clbx/kube-port-forward-controller */
package unifi
import (
"context"
"crypto/tls"
"errors"
"fmt"
"net/http"
"net/http/cookiejar"
"os"
"github.com/vegardengen/go-unifi/unifi"
)
type UnifiClient struct {
Client *unifi.Client
SiteID string
}
func CreateUnifiClient() (*UnifiClient, error) {
client := &unifi.Client{}
unifiURL := os.Getenv("UNIFI_URL")
if unifiURL == "" {
return nil, errors.New("could not get UniFi URL from environment variables")
}
siteID := os.Getenv("UNIFI_SITE")
if siteID == "" {
return nil, errors.New("could not get UniFi site ID from environment variables")
}
username := os.Getenv("UNIFI_USER")
if username == "" {
return nil, errors.New("could not get UniFi username from environment variables")
}
password := os.Getenv("UNIFI_PASSWORD")
if password == "" {
return nil, errors.New("could not get UniFi password from environment variables")
}
if err := client.SetBaseURL(unifiURL); err != nil {
return nil, err
}
jar, _ := cookiejar.New(nil)
tr := &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}
httpClient := &http.Client{
Jar: jar,
Transport: tr,
}
if err := client.SetHTTPClient(httpClient); err != nil {
return nil, fmt.Errorf("failed to set HTTP client: %s", err)
}
if err := client.Login(context.Background(), username, password); err != nil {
return nil, fmt.Errorf("could not log into UniFi controller: %s", err)
}
unifiClient := &UnifiClient{
Client: client,
SiteID: siteID,
}
return unifiClient, nil
}