forked from
tangled.org/core
Monorepo for Tangled — https://tangled.org
1package main
2
3import (
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
16func 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 e.E.EnableAutoSave(true)
46
47 jc, err := jetstream.NewJetstreamClient("knotserver", []string{
48 tangled.PublicKeyNSID,
49 tangled.KnotMemberNSID,
50 }, nil, l, db, true)
51 if err != nil {
52 l.Error("failed to setup jetstream", "error", err)
53 }
54
55 mux, err := knotserver.Setup(ctx, c, db, e, jc, l)
56 if err != nil {
57 l.Error("failed to setup server", "error", err)
58 return
59 }
60 imux := knotserver.Internal(ctx, db, e)
61
62 l.Info("starting internal server", "address", c.Server.InternalListenAddr)
63 go http.ListenAndServe(c.Server.InternalListenAddr, imux)
64
65 l.Info("starting main server", "address", c.Server.ListenAddr)
66 l.Error("server error", "error", http.ListenAndServe(c.Server.ListenAddr, mux))
67
68 return
69}