-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.go
118 lines (96 loc) · 3.18 KB
/
server.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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
package main
import (
"context"
"flag"
"fmt"
"log"
"net"
"github.com/castyapp/grpc.server/config"
"github.com/castyapp/grpc.server/core"
"github.com/castyapp/grpc.server/jwt"
"github.com/castyapp/grpc.server/oauth"
"github.com/castyapp/grpc.server/providers"
"github.com/castyapp/grpc.server/services/auth"
"github.com/castyapp/grpc.server/services/message"
"github.com/castyapp/grpc.server/services/theater"
"github.com/castyapp/grpc.server/services/user"
"github.com/castyapp/grpc.server/storage"
"github.com/castyapp/libcasty-protocol-go/proto"
"github.com/getsentry/sentry-go"
"google.golang.org/grpc"
"google.golang.org/grpc/reflection"
)
var (
ctx *core.Context
port *int
host *string
)
func main() {
log.SetFlags(log.Ltime | log.Lshortfile)
configFileName := flag.String("config-file", "config.hcl", "config.hcl file")
host = flag.String("host", "0.0.0.0", "grpc server host listener")
port = flag.Int("port", 55283, "grpc server port listener")
flag.Parse()
log.Printf("Loading ConfigMap from file: [%s]", *configFileName)
ctx = core.NewContext(context.Background())
if err := ctx.Set("config.filepath", *configFileName); err != nil {
log.Fatal(fmt.Errorf("could not set config.filepath to context: %v", err))
}
ctx.With(
// Registering configmap provider
&providers.ConfigProvider{},
// Init sentry loggin if its enabled
&providers.SentryProvider{},
// config database (mongodb)
&providers.DatabaseProvider{},
// config redis connection
&providers.RedisProvider{},
// configure jwt
&providers.LambdaProvider{
Registeration: func(ctx *core.Context) error {
cm := ctx.MustGet("config.map").(*config.Map)
if err := jwt.Load(cm); err != nil {
return fmt.Errorf("could not load jwt configuration: %v", err)
}
return nil
},
},
// configure oauth clients
&providers.LambdaProvider{
Registeration: func(ctx *core.Context) error {
cm := ctx.MustGet("config.map").(*config.Map)
if err := oauth.ConfigureOAUTHClients(cm); err != nil {
return fmt.Errorf("could not load oauth clients configurations: %v", err)
}
return nil
},
},
// configure s3 bucket (minio) storage
&providers.LambdaProvider{
Registeration: func(ctx *core.Context) error {
cm := ctx.MustGet("config.map").(*config.Map)
if err := storage.Configure(cm); err != nil {
return fmt.Errorf("could not configure s3 bucket storage client: %v", err)
}
return nil
},
},
)
defer ctx.Close()
listener, err := net.Listen("tcp", fmt.Sprintf("%s:%d", *host, *port))
if err != nil {
sentry.CaptureException(err)
log.Fatal(fmt.Errorf("could not create tcp listener: %v", err))
}
server := grpc.NewServer()
proto.RegisterAuthServiceServer(server, auth.NewService(ctx))
proto.RegisterUserServiceServer(server, user.NewService(ctx))
proto.RegisterTheaterServiceServer(server, theater.NewService(ctx))
proto.RegisterMessagesServiceServer(server, message.NewService(ctx))
reflection.Register(server)
log.Println(fmt.Sprintf("Server running in tcp:%s:%d", *host, *port))
if err := server.Serve(listener); err != nil {
sentry.CaptureException(err)
log.Fatal(fmt.Errorf("could not serve grpc.tcp.listener :%v", err))
}
}