/
main.go
59 lines (50 loc) · 1.44 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package main
import (
"log"
"net/http"
"strings"
"github.com/elazarl/go-bindata-assetfs"
"github.com/labstack/echo"
"github.com/labstack/echo/engine/standard"
"github.com/labstack/echo/middleware"
"github.com/matobet/verdi/backend"
"github.com/matobet/verdi/config"
"github.com/matobet/verdi/frontend"
"github.com/matobet/verdi/ws"
)
func main() {
err := config.Load()
if err != nil {
log.Fatal("Failed to load configuration: ", err)
}
backend, err := backend.Init()
if err != nil {
log.Fatal("Failed to initialize backend: ", err)
}
e := echo.New()
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "${time_rfc3339}: ${status} ${latency_human} ${method} ${uri} - ${tx_bytes} bytes\n",
}))
e.Use(middleware.Recover())
websocketHandler := ws.NewHandler(backend)
fileServer := http.FileServer(&assetfs.AssetFS{
Asset: frontend.Asset,
AssetDir: frontend.AssetDir,
AssetInfo: frontend.AssetInfo,
Prefix: "/",
})
e.Use(standard.WrapMiddleware(func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if strings.HasPrefix(r.RequestURI, "/ws") {
websocketHandler.ServeHTTP(w, r)
} else if r.RequestURI == "/" {
fileServer.ServeHTTP(w, r)
} else if _, err := frontend.Asset(r.RequestURI[1:]); err == nil {
fileServer.ServeHTTP(w, r)
} else {
next.ServeHTTP(w, r)
}
})
}))
e.Run(standard.New(config.Conf.HTTPPort))
}