diff --git a/.drone.yml b/.drone.yml deleted file mode 100644 index d57fd37..0000000 --- a/.drone.yml +++ /dev/null @@ -1,28 +0,0 @@ -kind: pipeline -type: docker -name: default - -steps: - - name: validate - image: golang - commands: - - go build - - go test - - name: deploy - image: golang - environment: - SSH_PRIVATE_KEY: - from_secret: ssh_private_key - commands: - - go build - - apt-get update; apt-get install -y rsync - - mkdir ~/.ssh - - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa; chmod 600 ~/.ssh/id_rsa - - ssh-keyscan -t rsa factorio.blackolivepineapple.pizza >> ~/.ssh/known_hosts - - ssh service@factorio.blackolivepineapple.pizza sudo service factorio-site stop || true - - rsync --rsync-path="sudo rsync" --archive --verbose --compress . service@factorio.blackolivepineapple.pizza:/opt/factorio-site/ - - ssh service@factorio.blackolivepineapple.pizza sudo mv /opt/factorio-site/factorio-site.service /etc/systemd/system/ - - ssh service@factorio.blackolivepineapple.pizza sudo systemctl daemon-reload - - ssh service@factorio.blackolivepineapple.pizza sudo service factorio-site start - when: - branch: master diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7b57339 --- /dev/null +++ b/Makefile @@ -0,0 +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/templates/index.html b/index.html similarity index 89% rename from templates/index.html rename to index.html index 385a4e0..e04fff8 100644 --- a/templates/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 4794928..2b4bd64 100644 --- a/minecraft-site.go +++ b/minecraft-site.go @@ -2,6 +2,7 @@ package main import ( "crypto/tls" + _ "embed" "encoding/json" "fmt" "html/template" @@ -35,6 +36,9 @@ type pageData struct { Servers []server } +//go:embed index.html +var indexhtml string + func main() { // Parse config file @@ -63,12 +67,16 @@ func main() { // Set up templates fmt.Print("Parsing templates...\n") - t, err := template.ParseFiles("templates/index.html") + t, err := template.New("").Parse(indexhtml) if err != nil { log.Fatalf("Error parsing HTML template: %v\n", err) } 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 { @@ -85,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))))