first commit
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
package pihole
|
||||
|
||||
import (
|
||||
"ArinDash/config"
|
||||
"encoding/json"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type configFile struct {
|
||||
Pihole piholeConfig
|
||||
}
|
||||
|
||||
type piholeConfig struct {
|
||||
Host string
|
||||
Password string
|
||||
}
|
||||
|
||||
type PiHConnector struct {
|
||||
Host string
|
||||
Session PiHSession
|
||||
}
|
||||
|
||||
type PiHAuth struct {
|
||||
Session PiHSession `json:"session"`
|
||||
}
|
||||
|
||||
type PiHSession struct {
|
||||
SID string `json:"sid"`
|
||||
CSRF string `json:"csrf"`
|
||||
}
|
||||
|
||||
func (ph *PiHConnector) get(endpoint string) []byte {
|
||||
return ph.do("GET", endpoint, nil)
|
||||
}
|
||||
|
||||
func (ph *PiHConnector) post(endpoint string, body io.Reader) []byte {
|
||||
return ph.do("POST", endpoint, body)
|
||||
}
|
||||
|
||||
func (ph *PiHConnector) do(method string, endpoint string, body io.Reader) []byte {
|
||||
var requestString = "http://" + ph.Host + "/api/" + endpoint
|
||||
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest(method, requestString, body)
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
req.Header.Add("X-FTL-SID", ph.Session.SID)
|
||||
req.Header.Add("X-FTL-CSRF", ph.Session.CSRF)
|
||||
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
return respBody
|
||||
}
|
||||
|
||||
func Connect() PiHConnector {
|
||||
cfg := &configFile{}
|
||||
config.LoadConfig(cfg)
|
||||
client := &http.Client{}
|
||||
req, err := http.NewRequest("POST", "http://"+cfg.Pihole.Host+"/api/auth", strings.NewReader("{\"password\": \""+cfg.Pihole.Password+"\"}"))
|
||||
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
resp, err := client.Do(req)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
|
||||
respBody, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
s := &PiHAuth{}
|
||||
|
||||
err = json.Unmarshal(respBody, s)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
return PiHConnector{
|
||||
Host: cfg.Pihole.Host,
|
||||
Session: s.Session,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user