diff --git a/Makefile b/Makefile index 68066f2..7b57339 100644 --- a/Makefile +++ b/Makefile @@ -1,2 +1,7 @@ minecraft-site: minecraft-site.go index.html go.mod go.sum go build -tags netgo -ldflags '-extldflags "-static"' + +.PHONY: deploy +deploy: minecraft-site + rsync --rsync-path="sudo -u minecraft rsync" minecraft-site zirconium:/home/minecraft/minecraft-site + ssh zirconium sudo systemctl restart minecraft-site.service diff --git a/index.html b/index.html index 385a4e0..e04fff8 100644 --- a/index.html +++ b/index.html @@ -55,6 +55,9 @@ {{end}} {{end}} -

This page maintained by chandlerswift's minecraft server list.

+

+ This page maintained by chandlerswift's minecraft server list. + API at /data.json. +

diff --git a/minecraft-site.go b/minecraft-site.go index a653bee..2b4bd64 100644 --- a/minecraft-site.go +++ b/minecraft-site.go @@ -73,6 +73,10 @@ func main() { } http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + if r.URL.Path != "/" { + http.NotFound(w, r) + return + } // Update servers with current data for i, s := range config.Servers { @@ -89,6 +93,23 @@ func main() { } }) + http.HandleFunc("/data.json", func(w http.ResponseWriter, r *http.Request) { + // Update servers with current data + for i, s := range config.Servers { + // TODO: Query instead (opportunistically?) to get mod lists, etc + config.Servers[i].Status, err = minequery.Ping17(s.Host, s.Port) + if err != nil { + log.Printf("Error querying server: %v", err) + } + } + msg, err := json.Marshal(config.Servers) + if err != nil { + http.Error(w, err.Error(), 500) + } + w.Header().Set("Content-Type", "application/json") + w.Write(msg) + }) + // Serve backup directory if serveBackups { // TODO: add HTML http.Handle("/backups/", http.StripPrefix("/backups/", http.FileServer(http.Dir(config.BackupDir))))