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