Njalla
This commit is contained in:
parent
ed458c7db8
commit
c28859eb84
3 changed files with 86 additions and 0 deletions
17
main.go
17
main.go
|
@ -1,5 +1,22 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"log"
|
||||
|
||||
"nulo.in/ddnser/nameservers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
njalla := nameservers.Njalla{Key: "yourkey"}
|
||||
record, err := njalla.SetRecord("estoesprueba.nulo.in", "")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(record)
|
||||
record, err = njalla.SetRecord("estoesprueba.nulo.in", "1.1.1.1")
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
log.Println(record)
|
||||
|
||||
}
|
||||
|
|
5
nameservers/nameserver.go
Normal file
5
nameservers/nameserver.go
Normal file
|
@ -0,0 +1,5 @@
|
|||
package nameservers
|
||||
|
||||
type NameServer interface {
|
||||
SetRecord(domain string, overrideIp string) (string, error)
|
||||
}
|
64
nameservers/njalla.go
Normal file
64
nameservers/njalla.go
Normal file
|
@ -0,0 +1,64 @@
|
|||
package nameservers
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
)
|
||||
|
||||
type Njalla struct {
|
||||
httpClient http.Client
|
||||
Key string
|
||||
}
|
||||
|
||||
type njallaValue struct {
|
||||
A string `json:"A"`
|
||||
}
|
||||
|
||||
type njallaResponse struct {
|
||||
Status int `json:"status"`
|
||||
Message string `json:"message"`
|
||||
Value njallaValue `json:"value"`
|
||||
}
|
||||
|
||||
func (n *Njalla) SetRecord(domain string, overrideIp string) (string, error) {
|
||||
u, _ := url.Parse("https://njal.la/update/")
|
||||
values := url.Values{
|
||||
"h": {domain},
|
||||
"k": {n.Key},
|
||||
}
|
||||
if len(overrideIp) > 0 {
|
||||
|
||||
values["a"] = []string{overrideIp}
|
||||
} else {
|
||||
values["auto"] = []string{""}
|
||||
}
|
||||
u.RawQuery = values.Encode()
|
||||
|
||||
resp, err := n.httpClient.Get(u.String())
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
body, err := io.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
decoded := njallaResponse{}
|
||||
err = json.Unmarshal(body, &decoded)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
log.Println(string(body))
|
||||
|
||||
if resp.StatusCode < 200 || resp.StatusCode > 299 {
|
||||
return "", errors.New("Not nice status code: " + strconv.Itoa(resp.StatusCode) + " with body: " + string(body))
|
||||
}
|
||||
if decoded.Status < 200 || decoded.Status > 299 {
|
||||
return "", errors.New("Not nice JSON status: " + strconv.Itoa(decoded.Status) + " with body: " + string(body))
|
||||
}
|
||||
return decoded.Value.A, nil
|
||||
}
|
Reference in a new issue