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 { fmt.Println("Fehler beim Serialisieren: ", err) return err } // Datei öffnen/erstellen err = os.WriteFile(filename, jsonData, 0644) if err != nil { fmt.Println("Fehler beim Schreiben der Datei: ", err) return err } return nil } // Daten aus einer Datei lesen func readFromFile(filename string) (DB, error) { // Datei lesen jsonData, err := os.ReadFile(filename) if err != nil { fmt.Println("Fehler beim Lesen der Datei: ", err) return nil, err } // JSON in DB parsen var data DB err = json.Unmarshal(jsonData, &data) if err != nil { fmt.Println("Fehler beim Parsen von JSON: ", err) return nil, 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.EqualFold(Dns, "") || strings.EqualFold(Ip, "") || strings.EqualFold(User, "") || strings.EqualFold(Token, "") { /* strings.ToLower(Dns) != strings.ToLower("") && strings.ToLower(Ip) != strings.ToLower("") && strings.ToLower(User) != strings.ToLower("") && strings.ToLower(Token) != strings.ToLower("")*/ fmt.Println("Eintrag unvollständig: ", D[Dns]) w.WriteHeader(200) w.Write([]byte("nochg")) } else { 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")) } } } 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(":8089", nil) if srv_err != nil { fmt.Println("Starten des Servers fehlgeschlagen!", srv_err) } }