-71
cmd/knotserver/main.go
-71
cmd/knotserver/main.go
···
1
-
package main
2
-
3
-
import (
4
-
"context"
5
-
"net/http"
6
-
7
-
"tangled.sh/tangled.sh/core/api/tangled"
8
-
"tangled.sh/tangled.sh/core/jetstream"
9
-
"tangled.sh/tangled.sh/core/knotserver"
10
-
"tangled.sh/tangled.sh/core/knotserver/config"
11
-
"tangled.sh/tangled.sh/core/knotserver/db"
12
-
"tangled.sh/tangled.sh/core/log"
13
-
"tangled.sh/tangled.sh/core/rbac"
14
-
15
-
_ "net/http/pprof"
16
-
)
17
-
18
-
func main() {
19
-
ctx := context.Background()
20
-
// ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
21
-
// defer stop()
22
-
23
-
l := log.New("knotserver")
24
-
25
-
c, err := config.Load(ctx)
26
-
if err != nil {
27
-
l.Error("failed to load config", "error", err)
28
-
return
29
-
}
30
-
31
-
if c.Server.Dev {
32
-
l.Info("running in dev mode, signature verification is disabled")
33
-
}
34
-
35
-
db, err := db.Setup(c.Server.DBPath)
36
-
if err != nil {
37
-
l.Error("failed to setup db", "error", err)
38
-
return
39
-
}
40
-
41
-
e, err := rbac.NewEnforcer(c.Server.DBPath)
42
-
if err != nil {
43
-
l.Error("failed to setup rbac enforcer", "error", err)
44
-
return
45
-
}
46
-
47
-
e.E.EnableAutoSave(true)
48
-
49
-
jc, err := jetstream.NewJetstreamClient(c.Server.JetstreamEndpoint, "knotserver", []string{
50
-
tangled.PublicKeyNSID,
51
-
tangled.KnotMemberNSID,
52
-
}, nil, l, db, true)
53
-
if err != nil {
54
-
l.Error("failed to setup jetstream", "error", err)
55
-
}
56
-
57
-
mux, err := knotserver.Setup(ctx, c, db, e, jc, l)
58
-
if err != nil {
59
-
l.Error("failed to setup server", "error", err)
60
-
return
61
-
}
62
-
imux := knotserver.Internal(ctx, db, e)
63
-
64
-
l.Info("starting internal server", "address", c.Server.InternalListenAddr)
65
-
go http.ListenAndServe(c.Server.InternalListenAddr, imux)
66
-
67
-
l.Info("starting main server", "address", c.Server.ListenAddr)
68
-
l.Error("server error", "error", http.ListenAndServe(c.Server.ListenAddr, mux))
69
-
70
-
return
71
-
}