-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.go
87 lines (73 loc) · 2.54 KB
/
main.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
package main
import (
"strings"
"github.com/airenas/api-doorman/internal/pkg/utils"
"github.com/airenas/api-doorman/internal/pkg/mongodb"
"github.com/airenas/api-doorman/internal/pkg/service"
"github.com/airenas/go-app/pkg/goapp"
"github.com/labstack/gommon/color"
"github.com/pkg/errors"
"github.com/spf13/viper"
)
func main() {
goapp.StartWithDefault()
mongoSessionProvider, err := mongodb.NewSessionProvider(goapp.Config.GetString("mongo.url"))
if err != nil {
goapp.Log.Fatal(errors.Wrap(err, "Can't init mongo provider"))
}
defer mongoSessionProvider.Close()
data := service.Data{}
data.Handlers, err = initFromConfig(goapp.Sub(goapp.Config, "proxy"), mongoSessionProvider)
if err != nil {
goapp.Log.Fatal(errors.Wrap(err, "Can't init handlers"))
}
data.Port = goapp.Config.GetInt("port")
utils.DefaultIPExtractor, err = utils.NewIPExtractor(goapp.Config.GetString("ipExtractType"))
if err != nil {
goapp.Log.Fatal(errors.Wrap(err, "Can't init IP extractor"))
}
printBanner()
err = service.StartWebServer(&data)
if err != nil {
goapp.Log.Fatal(errors.Wrap(err, "Can't start the service"))
}
}
func initFromConfig(cfg *viper.Viper, ms *mongodb.SessionProvider) ([]service.HandlerWrap, error) {
res := make([]service.HandlerWrap, 0)
if cfg == nil {
return nil, errors.New("Can't init handlers - names are not provided")
}
strHand := cfg.GetString("handlers")
for _, sh := range strings.Split(strHand, ",") {
sh = strings.TrimSpace(sh)
if sh != "" {
h, err := service.NewHandler(sh, cfg, ms)
if err != nil {
return nil, errors.Wrapf(err, "Can't init handler '%s'", sh)
}
res = append(res, h)
}
}
return res, nil
}
var (
version string
)
func printBanner() {
banner := `
___ ____ ____ __
/ | / __ \/ _/ \ \
/ /| | / /_/ // / _____________________________\ \
/ ___ |/ ____// / /_____/_____/_____/_____/_____/ /
/_/ |_/_/ /___/ /_/
__ __
/ / ____/ /___ ____ _________ ___ ____ _____
/ / ______ / __ / __ \/ __ \/ ___/ __ ` + "`" + `__ \/ __ ` + "`" + `/ __ \
\ \/_____/ / /_/ / /_/ / /_/ / / / / / / / / /_/ / / / /
\_\ \__,_/\____/\____/_/ /_/ /_/ /_/\__,_/_/ /_/ v: %s
%s
________________________________________________________
`
cl := color.New()
cl.Printf(banner, cl.Red(version), cl.Green("https://github.com/airenas/api-doorman"))
}