/
engine.go
93 lines (74 loc) · 2.25 KB
/
engine.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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package admin
import (
"container/list"
"embed"
"encoding/json"
"io/fs"
"log"
"net/http"
jwt "github.com/appleboy/gin-jwt/v2"
db "github.com/cyops-se/safe-import/si-engine/web/admin/db"
"github.com/cyops-se/safe-import/si-engine/web/admin/routes"
"github.com/cyops-se/safe-import/usvc"
"github.com/nats-io/nats.go"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
//go:embed static/index.html
var admin string
//go:embed static/*
var static embed.FS
func Run(broker *usvc.UsvcBroker) {
db.ConnectDatabase()
// http.FS can be used to create a http Filesystem
subFS2, _ := fs.Sub(static, "static")
var staticFS = http.FS(subFS2)
// fmt.Println("STARTING ADMIN WEB")
Log("info", "STARTING ADMIN WEB", "")
connections := list.New()
r := gin.Default()
r.StaticFS("/ui", staticFS)
// r.Static("/ui", "./dist")
authMiddleware, _ := jwt.New(JWT)
authMiddleware.MiddlewareInit()
r.GET("/ws", func(c *gin.Context) {
WShandler(c.Writer, c.Request, connections)
})
routes.RegisterAuthRoutes(r, authMiddleware)
routes.RegisterMiscRoutes(r, broker, connections)
api := r.Group("/api")
api.Use(authMiddleware.MiddlewareFunc())
{
routes.RegisterUserRoutes(api)
routes.RegisterLogRoutes(api)
routes.RegisterDnsRoutes(api, broker)
routes.RegisterHttpRoutes(api, broker)
routes.RegisterReposRoutes(api, broker)
routes.RegisterJobsRoutes(api, broker)
// routes.RegisterPKIRoutes(api)
routes.RegisterSystemRoutes(api)
}
broker.Subscribe(">", func(m *nats.Msg) {
if m.Subject != "system.heartbeat" {
// fmt.Println("NATS message: ", m.Subject, string(m.Data))
}
msg := gin.H{"topic": m.Subject, "data": gin.H{"message": string(m.Data)}}
for e := connections.Front(); e != nil; e = e.Next() {
conn := e.Value.(*websocket.Conn)
conn.WriteJSON(msg)
}
})
broker.Subscribe("log.>", func(m *nats.Msg) {
var entry db.Log
if err := json.Unmarshal(m.Data, &entry); err != nil {
log.Println("ERROR: Failed to unmarshal log entry:", string(m.Data), err)
}
db.DB.Create(&entry)
})
r.NoRoute(authMiddleware.MiddlewareFunc(), func(c *gin.Context) {
claims := jwt.ExtractClaims(c)
log.Printf("NoRoute claims: %#v\n", claims)
c.JSON(404, gin.H{"code": "PAGE_NOT_FOUND", "message": "Page not found"})
})
r.Run(":7499")
}