This commit is contained in:
2025-01-08 22:32:49 +01:00
parent db9df2e3bb
commit 1ddd899a4f
3 changed files with 139 additions and 0 deletions

136
main.go Normal file
View File

@@ -0,0 +1,136 @@
package main
import (
"encoding/json"
"fmt"
"net/http"
"os"
"strings"
"time"
)
type DB map[string]dns_entry
var D map[string]dns_entry
type dns_entry struct {
Dns string `json:"dns"`
Ip string `json:"ip"`
User string `json:"user"`
Token string `json:"token"`
LastSeen string `json:"lastseen"`
}
// Daten in eine Datei schreiben
func writeToFile(filename string, data DB) error {
// JSON konvertieren
jsonData, err := json.MarshalIndent(data, "", " ")
if err != nil {
return fmt.Errorf("Fehler beim Serialisieren: %w", err)
}
// Datei öffnen/erstellen
err = os.WriteFile(filename, jsonData, 0644)
if err != nil {
return fmt.Errorf("Fehler beim Schreiben der Datei: %w", err)
}
return nil
}
// Daten aus einer Datei lesen
func readFromFile(filename string) (DB, error) {
// Datei lesen
jsonData, err := os.ReadFile(filename)
if err != nil {
return nil, fmt.Errorf("Fehler beim Lesen der atei: %w", err)
}
// JSON in DB parsen
var data DB
err = json.Unmarshal(jsonData, &data)
if err != nil {
return nil, fmt.Errorf("Fehler beim Parsen von JSON: %w", err)
}
return data, nil
}
func handler(w http.ResponseWriter, r *http.Request) {
Dns := r.URL.Query().Get("DDNS")
Ip := r.URL.Query().Get("IP")
User := r.URL.Query().Get("USER")
Token := r.URL.Query().Get("TOKEN")
if D == nil {
D = make(map[string]dns_entry)
}
if strings.ToLower(Dns) != strings.ToLower("") && strings.ToLower(Ip) != strings.ToLower("") && strings.ToLower(User) != strings.ToLower("") && strings.ToLower(Token) != strings.ToLower("") {
if entry, exists := D[Dns]; exists {
if User == entry.User && Token == entry.Token {
D[Dns] = dns_entry{Dns: Dns, Ip: Ip, User: User, Token: Token, LastSeen: time.Now().String()}
fmt.Println("Eintrag aktualisiert: ", entry, D[Dns])
// Datei speichern
filename := "data.json"
err := writeToFile(filename, D)
if err != nil {
fmt.Println("Fehler beim Schreiben:", err)
return
}
fmt.Println("Daten erfolgreich in Datei geschrieben.")
w.WriteHeader(200)
w.Write([]byte("good"))
} else {
fmt.Println("Eintrag aktualisieren abgelehnt (Benutzer/Passwort ungültig): ", entry, D[Dns])
w.WriteHeader(200)
w.Write([]byte("nochg"))
}
} else {
D[Dns] = dns_entry{Dns: Dns, Ip: Ip, User: User, Token: Token, LastSeen: time.Now().String()}
fmt.Println("Eintrag erstellt: ", entry, D[Dns])
// Datei speichern
filename := "data.json"
err := writeToFile(filename, D)
if err != nil {
fmt.Println("Fehler beim Schreiben:", err)
return
}
fmt.Println("Daten erfolgreich in Datei geschrieben.")
w.WriteHeader(200)
w.Write([]byte("good"))
}
} else {
fmt.Println("Eintrag unvollständig: ", D[Dns])
w.WriteHeader(200)
w.Write([]byte("nochg"))
}
}
func handlerIP(w http.ResponseWriter, r *http.Request) {
}
func main() {
D = make(map[string]dns_entry)
// Datei lesen
filename := "data.json"
readData, err := readFromFile(filename)
if err != nil {
fmt.Println("Fehler beim Lesen:", err)
} else {
fmt.Println("Daten erfolgreich aus Datei gelesen.")
D = readData
}
http.HandleFunc("/", handler)
http.HandleFunc("/ip", handlerIP)
fmt.Println("Server läuft auf http://*:8080")
srv_err := http.ListenAndServe(":8080", nil)
if srv_err != nil {
fmt.Println("Starten des Servers fehlgeschlagen!", srv_err)
}
}