use
This commit is contained in:
parent
a4577c41a9
commit
57ebd896da
@ -2,25 +2,20 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ColorMappingHandler struct {
|
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
type Color struct {
|
type Color struct {
|
||||||
R uint8 `json:"r"`
|
R uint8 `json:"r"`
|
||||||
G uint8 `json:"g"`
|
G uint8 `json:"g"`
|
||||||
B uint8 `json:"b"`
|
B uint8 `json:"b"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *ColorMappingHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
func (api *Api) GetColorMapping(resp http.ResponseWriter, req *http.Request) {
|
||||||
|
|
||||||
cm := make(map[string]Color)
|
cm := make(map[string]Color)
|
||||||
|
|
||||||
for k, v := range h.ctx.Colormapping.GetColors() {
|
for k, v := range api.Context.Colormapping.GetColors() {
|
||||||
cm[k] = Color{R: v.R, G: v.G, B: v.B}
|
cm[k] = Color{R: v.R, G: v.G, B: v.B}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -16,19 +16,15 @@ type PublicConfig struct {
|
|||||||
EnableSearch bool `json:"enablesearch"`
|
EnableSearch bool `json:"enablesearch"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ConfigHandler struct {
|
func (api *Api) GetConfig(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *ConfigHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
resp.Header().Add("content-type", "application/json")
|
resp.Header().Add("content-type", "application/json")
|
||||||
|
|
||||||
webcfg := PublicConfig{}
|
webcfg := PublicConfig{}
|
||||||
webcfg.Layers = h.ctx.Config.Layers
|
webcfg.Layers = api.Context.Config.Layers
|
||||||
webcfg.MapObjects = h.ctx.Config.MapObjects
|
webcfg.MapObjects = api.Context.Config.MapObjects
|
||||||
webcfg.Version = app.Version
|
webcfg.Version = app.Version
|
||||||
webcfg.DefaultOverlays = h.ctx.Config.DefaultOverlays
|
webcfg.DefaultOverlays = api.Context.Config.DefaultOverlays
|
||||||
webcfg.EnableSearch = h.ctx.Config.EnableSearch
|
webcfg.EnableSearch = api.Context.Config.EnableSearch
|
||||||
|
|
||||||
json.NewEncoder(resp).Encode(webcfg)
|
json.NewEncoder(resp).Encode(webcfg)
|
||||||
}
|
}
|
||||||
|
@ -2,18 +2,13 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"mapserver/coords"
|
"mapserver/coords"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MapblockHandler struct {
|
func (api *Api) GetMapBlockData(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *MapblockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
str := strings.TrimPrefix(req.URL.Path, "/api/mapblock/")
|
str := strings.TrimPrefix(req.URL.Path, "/api/mapblock/")
|
||||||
parts := strings.Split(str, "/")
|
parts := strings.Split(str, "/")
|
||||||
if len(parts) != 3 {
|
if len(parts) != 3 {
|
||||||
@ -27,7 +22,7 @@ func (h *MapblockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request)
|
|||||||
z, _ := strconv.Atoi(parts[2])
|
z, _ := strconv.Atoi(parts[2])
|
||||||
|
|
||||||
c := coords.NewMapBlockCoords(x, y, z)
|
c := coords.NewMapBlockCoords(x, y, z)
|
||||||
mb, err := h.ctx.MapBlockAccessor.GetMapBlock(c)
|
mb, err := api.Context.MapBlockAccessor.GetMapBlock(c)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
|
@ -2,18 +2,13 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"mapserver/mapobjectdb"
|
"mapserver/mapobjectdb"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MapObjects struct {
|
func (api *Api) QueryMapobjects(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (t *MapObjects) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
|
|
||||||
timer := prometheus.NewTimer(mapobjectServeDuration)
|
timer := prometheus.NewTimer(mapobjectServeDuration)
|
||||||
defer timer.ObserveDuration()
|
defer timer.ObserveDuration()
|
||||||
@ -28,7 +23,7 @@ func (t *MapObjects) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
objects, err := t.ctx.Objectdb.GetMapData(&q)
|
objects, err := api.Context.Objectdb.GetMapData(&q)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
resp.Write([]byte(err.Error()))
|
resp.Write([]byte(err.Error()))
|
||||||
|
@ -1,17 +1,12 @@
|
|||||||
package web
|
package web
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"mapserver/app"
|
|
||||||
"mapserver/public"
|
"mapserver/public"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
type MediaHandler struct {
|
func (api *Api) GetMedia(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *MediaHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
str := strings.TrimPrefix(req.URL.Path, "/api/media/")
|
str := strings.TrimPrefix(req.URL.Path, "/api/media/")
|
||||||
parts := strings.Split(str, "/")
|
parts := strings.Split(str, "/")
|
||||||
if len(parts) != 1 {
|
if len(parts) != 1 {
|
||||||
@ -23,7 +18,7 @@ func (h *MediaHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|||||||
filename := parts[0]
|
filename := parts[0]
|
||||||
fallback, hasfallback := req.URL.Query()["fallback"]
|
fallback, hasfallback := req.URL.Query()["fallback"]
|
||||||
|
|
||||||
content := h.ctx.MediaRepo[filename]
|
content := api.Context.MediaRepo[filename]
|
||||||
|
|
||||||
if content == nil && hasfallback && len(fallback) > 0 {
|
if content == nil && hasfallback && len(fallback) > 0 {
|
||||||
var err error
|
var err error
|
||||||
|
@ -2,7 +2,6 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
@ -64,14 +63,10 @@ type MinetestInfo struct {
|
|||||||
Uptime float64 `json:"uptime"`
|
Uptime float64 `json:"uptime"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Minetest struct {
|
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
var LastStats *MinetestInfo
|
var LastStats *MinetestInfo
|
||||||
|
|
||||||
func (this *Minetest) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
func (api *Api) PostMinetestData(resp http.ResponseWriter, req *http.Request) {
|
||||||
if req.Header.Get("Authorization") != this.ctx.Config.WebApi.SecretKey {
|
if req.Header.Get("Authorization") != api.Context.Config.WebApi.SecretKey {
|
||||||
resp.WriteHeader(403)
|
resp.WriteHeader(403)
|
||||||
resp.Write([]byte("invalid key!"))
|
resp.Write([]byte("invalid key!"))
|
||||||
return
|
return
|
||||||
@ -94,7 +89,7 @@ func (this *Minetest) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|||||||
mintestMaxLag.Set(data.MaxLag)
|
mintestMaxLag.Set(data.MaxLag)
|
||||||
|
|
||||||
LastStats = data
|
LastStats = data
|
||||||
this.ctx.WebEventbus.Emit("minetest-info", data)
|
api.Context.WebEventbus.Emit("minetest-info", data)
|
||||||
|
|
||||||
json.NewEncoder(resp).Encode("stub")
|
json.NewEncoder(resp).Encode("stub")
|
||||||
}
|
}
|
||||||
|
19
web/serve.go
19
web/serve.go
@ -19,6 +19,7 @@ func Serve(ctx *app.App) {
|
|||||||
}
|
}
|
||||||
logrus.WithFields(fields).Info("Starting http server")
|
logrus.WithFields(fields).Info("Starting http server")
|
||||||
|
|
||||||
|
api := NewApi(ctx)
|
||||||
mux := http.NewServeMux()
|
mux := http.NewServeMux()
|
||||||
|
|
||||||
// static files
|
// static files
|
||||||
@ -27,13 +28,13 @@ func Serve(ctx *app.App) {
|
|||||||
tiles := &Tiles{ctx: ctx}
|
tiles := &Tiles{ctx: ctx}
|
||||||
tiles.Init()
|
tiles.Init()
|
||||||
mux.Handle("/api/tile/", tiles)
|
mux.Handle("/api/tile/", tiles)
|
||||||
mux.Handle("/api/config", &ConfigHandler{ctx: ctx})
|
mux.HandleFunc("/api/config", api.GetConfig)
|
||||||
mux.Handle("/api/stats", &StatsHandler{ctx: ctx})
|
mux.HandleFunc("/api/stats", api.GetStats)
|
||||||
mux.Handle("/api/media/", &MediaHandler{ctx: ctx})
|
mux.HandleFunc("/api/media/", api.GetMedia)
|
||||||
mux.Handle("/api/minetest", &Minetest{ctx: ctx})
|
mux.HandleFunc("/api/minetest", api.PostMinetestData)
|
||||||
mux.Handle("/api/mapobjects/", &MapObjects{ctx: ctx})
|
mux.HandleFunc("/api/mapobjects/", api.QueryMapobjects)
|
||||||
mux.Handle("/api/colormapping", &ColorMappingHandler{ctx: ctx})
|
mux.HandleFunc("/api/colormapping", api.GetColorMapping)
|
||||||
mux.Handle("/api/viewblock/", &ViewMapblockHandler{ctx: ctx})
|
mux.HandleFunc("/api/viewblock/", api.GetBlockData)
|
||||||
|
|
||||||
if ctx.Config.MapObjects.Areas {
|
if ctx.Config.MapObjects.Areas {
|
||||||
mux.Handle("/api/areas", &AreasHandler{ctx: ctx})
|
mux.Handle("/api/areas", &AreasHandler{ctx: ctx})
|
||||||
@ -51,11 +52,11 @@ func Serve(ctx *app.App) {
|
|||||||
|
|
||||||
if ctx.Config.WebApi.EnableMapblock {
|
if ctx.Config.WebApi.EnableMapblock {
|
||||||
//mapblock endpoint
|
//mapblock endpoint
|
||||||
mux.Handle("/api/mapblock/", &MapblockHandler{ctx: ctx})
|
mux.HandleFunc("/api/mapblock/", api.GetMapBlockData)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// main entry point
|
||||||
http.HandleFunc("/", mux.ServeHTTP)
|
http.HandleFunc("/", mux.ServeHTTP)
|
||||||
|
|
||||||
err := http.ListenAndServe(":"+strconv.Itoa(ctx.Config.Port), nil)
|
err := http.ListenAndServe(":"+strconv.Itoa(ctx.Config.Port), nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
@ -2,15 +2,10 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
type StatsHandler struct {
|
func (api *Api) GetStats(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *StatsHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
resp.Header().Add("content-type", "application/json")
|
resp.Header().Add("content-type", "application/json")
|
||||||
json.NewEncoder(resp).Encode(LastStats)
|
json.NewEncoder(resp).Encode(LastStats)
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,6 @@ package web
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"mapserver/app"
|
|
||||||
"mapserver/coords"
|
"mapserver/coords"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
@ -14,11 +13,7 @@ type ViewBlock struct {
|
|||||||
ContentId []int `json:"contentid"`
|
ContentId []int `json:"contentid"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ViewMapblockHandler struct {
|
func (api *Api) GetBlockData(resp http.ResponseWriter, req *http.Request) {
|
||||||
ctx *app.App
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *ViewMapblockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
|
|
||||||
str := strings.TrimPrefix(req.URL.Path, "/api/viewblock/")
|
str := strings.TrimPrefix(req.URL.Path, "/api/viewblock/")
|
||||||
parts := strings.Split(str, "/")
|
parts := strings.Split(str, "/")
|
||||||
if len(parts) != 3 {
|
if len(parts) != 3 {
|
||||||
@ -32,7 +27,7 @@ func (h *ViewMapblockHandler) ServeHTTP(resp http.ResponseWriter, req *http.Requ
|
|||||||
z, _ := strconv.Atoi(parts[2])
|
z, _ := strconv.Atoi(parts[2])
|
||||||
|
|
||||||
c := coords.NewMapBlockCoords(x, y, z)
|
c := coords.NewMapBlockCoords(x, y, z)
|
||||||
mb, err := h.ctx.MapBlockAccessor.GetMapBlock(c)
|
mb, err := api.Context.MapBlockAccessor.GetMapBlock(c)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp.WriteHeader(500)
|
resp.WriteHeader(500)
|
||||||
|
Loading…
Reference in New Issue
Block a user