From 5e40a146eda291ccfc64cc2df37956ad5f209d2f Mon Sep 17 00:00:00 2001 From: Hugo Tavares Reis Date: Mon, 27 Jul 2020 15:03:58 +0200 Subject: [PATCH] allows user to specify a custom admin port --- config/configuration.go | 2 ++ go.sum | 2 ++ internal/pihole/client.go | 12 +++++++----- main.go | 6 +++--- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/config/configuration.go b/config/configuration.go index 84ace52..b1fead8 100644 --- a/config/configuration.go +++ b/config/configuration.go @@ -17,6 +17,7 @@ import ( type Config struct { PIHoleProtocol string `config:"pihole_protocol"` PIHoleHostname string `config:"pihole_hostname"` + PIHolePort uint16 `config:"pihole_port"` PIHolePassword string `config:"pihole_password"` PIHoleApiToken string `config:"pihole_api_token"` Port string `config:"port"` @@ -27,6 +28,7 @@ func getDefaultConfig() *Config { return &Config{ PIHoleProtocol: "http", PIHoleHostname: "127.0.0.1", + PIHolePort: 80, PIHolePassword: "", PIHoleApiToken: "", Port: "9617", diff --git a/go.sum b/go.sum index 7df56e4..fb4b163 100644 --- a/go.sum +++ b/go.sum @@ -70,6 +70,7 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= @@ -262,6 +263,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw= golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= diff --git a/internal/pihole/client.go b/internal/pihole/client.go index 40ad6e1..217373a 100644 --- a/internal/pihole/client.go +++ b/internal/pihole/client.go @@ -16,8 +16,8 @@ import ( ) var ( - loginURLPattern = "%s://%s/admin/index.php?login" - statsURLPattern = "%s://%s/admin/api.php?summaryRaw&overTimeData&topItems&recentItems&getQueryTypes&getForwardDestinations&getQuerySources&jsonForceObject" + loginURLPattern = "%s://%s:%d/admin/index.php?login" + statsURLPattern = "%s://%s:%d/admin/api.php?summaryRaw&overTimeData&topItems&recentItems&getQueryTypes&getForwardDestinations&getQuerySources&jsonForceObject" ) // Client struct is a PI-Hole client to request an instance of a PI-Hole ad blocker. @@ -26,13 +26,14 @@ type Client struct { interval time.Duration protocol string hostname string + port uint16 password string sessionID string apiToken string } // NewClient method initializes a new PI-Hole client. -func NewClient(protocol, hostname, password, apiToken string, interval time.Duration) *Client { +func NewClient(protocol, hostname string, port uint16, password, apiToken string, interval time.Duration) *Client { if protocol != "http" && protocol != "https" { log.Printf("protocol %s is invalid. Must be http or https.", protocol) os.Exit(1) @@ -41,6 +42,7 @@ func NewClient(protocol, hostname, password, apiToken string, interval time.Dura return &Client{ protocol: protocol, hostname: hostname, + port: port, password: password, apiToken: apiToken, interval: interval, @@ -109,7 +111,7 @@ func (c *Client) setMetrics(stats *Stats) { } func (c *Client) getPHPSessionID() (sessionID string) { - loginURL := fmt.Sprintf(loginURLPattern, c.protocol, c.hostname) + loginURL := fmt.Sprintf(loginURLPattern, c.protocol, c.hostname, c.port) values := url.Values{"pw": []string{c.password}} req, err := http.NewRequest("POST", loginURL, strings.NewReader(values.Encode())) @@ -138,7 +140,7 @@ func (c *Client) getPHPSessionID() (sessionID string) { func (c *Client) getStatistics() *Stats { var stats Stats - statsURL := fmt.Sprintf(statsURLPattern, c.protocol, c.hostname) + statsURL := fmt.Sprintf(statsURLPattern, c.protocol, c.hostname, c.port) if c.isUsingApiToken() { statsURL = fmt.Sprintf("%s&auth=%s", statsURL, c.apiToken) diff --git a/main.go b/main.go index 1311e59..f3de359 100644 --- a/main.go +++ b/main.go @@ -26,14 +26,14 @@ func main() { metrics.Init() - initPiHoleClient(conf.PIHoleProtocol, conf.PIHoleHostname, conf.PIHolePassword, conf.PIHoleApiToken, conf.Interval) + initPiHoleClient(conf.PIHoleProtocol, conf.PIHoleHostname, conf.PIHolePort, conf.PIHolePassword, conf.PIHoleApiToken, conf.Interval) initHttpServer(conf.Port) handleExitSignal() } -func initPiHoleClient(protocol, hostname, password, apiToken string, interval time.Duration) { - client := pihole.NewClient(protocol, hostname, password, apiToken, interval) +func initPiHoleClient(protocol, hostname string, port uint16, password, apiToken string, interval time.Duration) { + client := pihole.NewClient(protocol, hostname, port, password, apiToken, interval) go client.Scrape() }