Merge "wow: implement spaceapi"
diff --git a/personal/q3k/wow/lib.libsonnet b/personal/q3k/wow/lib.libsonnet
index 4a9517b..8828b49 100644
--- a/personal/q3k/wow/lib.libsonnet
+++ b/personal/q3k/wow/lib.libsonnet
@@ -9,7 +9,7 @@
         prefix: "",
         images: {
             acore: "registry.k0.hswaw.net/q3k/azerothcore-wowtlk:1606950998",
-            panel: "registry.k0.hswaw.net/q3k/panel:1607033741-f18a531f9b84c5b33653c8db5d64aaa0af337541",
+            panel: "registry.k0.hswaw.net/q3k/panel:1607075221-54d0e977e57cc2c8d949c3a7ecf2ff21abd9d143",
         },
         db: {
             local mkConfig = function(name) {
diff --git a/personal/q3k/wow/panel/BUILD.bazel b/personal/q3k/wow/panel/BUILD.bazel
index 44162a4..743e3e2 100644
--- a/personal/q3k/wow/panel/BUILD.bazel
+++ b/personal/q3k/wow/panel/BUILD.bazel
@@ -7,6 +7,7 @@
     srcs = [
         "main.go",
         "soap.go",
+        "spaceapi.go",
     ],
     importpath = "code.hackerspace.pl/hscloud/personal/q3k/wow/panel",
     visibility = ["//visibility:private"],
diff --git a/personal/q3k/wow/panel/main.go b/personal/q3k/wow/panel/main.go
index cd1f586..aefbd1a 100644
--- a/personal/q3k/wow/panel/main.go
+++ b/personal/q3k/wow/panel/main.go
@@ -115,6 +115,7 @@
 	http.HandleFunc("/setup", s.viewOauthSetup)
 	http.HandleFunc("/reset", s.viewReset)
 	http.HandleFunc("/logout", s.viewLogout)
+	http.HandleFunc("/spaceapi", s.viewSpaceAPI)
 
 	err = http.ListenAndServe(flagListen, nil)
 	if err != nil {
diff --git a/personal/q3k/wow/panel/spaceapi.go b/personal/q3k/wow/panel/spaceapi.go
new file mode 100644
index 0000000..94923d2
--- /dev/null
+++ b/personal/q3k/wow/panel/spaceapi.go
@@ -0,0 +1,35 @@
+package main
+
+import (
+	"encoding/json"
+	"net/http"
+)
+
+type PeopleNowPresent struct {
+	Names []string `json:"names"`
+	Value int      `json:"value"`
+}
+
+type SpaceAPI struct {
+	Sensors struct {
+		PeopleNowPresent []PeopleNowPresent `json:"people_now_present"`
+	} `json:"sensors"`
+}
+
+func (s *server) viewSpaceAPI(w http.ResponseWriter, r *http.Request) {
+	res := &SpaceAPI{}
+
+	names := []string{}
+	for _, p := range s.online(r.Context()) {
+		names = append(names, p.Character)
+	}
+	res.Sensors.PeopleNowPresent = []PeopleNowPresent{
+		{
+			Names: names,
+			Value: len(names),
+		},
+	}
+
+	w.Header().Set("Content-Type", "application/json")
+	json.NewEncoder(w).Encode(res)
+}