-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
113 lines (99 loc) · 3.1 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
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
package main
import (
"os"
log "github.com/sirupsen/logrus"
prefixed "github.com/x-cray/logrus-prefixed-formatter"
"github.com/CalmBit/capybara/controllers"
"github.com/CalmBit/capybara/middleware"
"github.com/gobuffalo/pop"
"github.com/kataras/iris"
"github.com/kataras/iris/mvc"
"github.com/kataras/iris/sessions/sessiondb/redis"
"github.com/kataras/iris/sessions/sessiondb/redis/service"
)
const capybaraVersionString = "v0.1.0"
func main() {
log.SetOutput(os.Stderr)
textFormatter := new(prefixed.TextFormatter)
textFormatter.FullTimestamp = true
textFormatter.TimestampFormat = "Jan 01 2006 15:04:05"
log.SetFormatter(textFormatter)
log.SetLevel(log.DebugLevel)
middleware.LoadSettings()
log.Infof("Capybara %s is starting up...", capybaraVersionString)
log.Debugf("Establishing connection to database...")
tx, err := pop.Connect("development")
if err != nil {
log.Fatalf("Unable to establish database connection: %s", err.Error())
return
}
log.Debugf("Got database connection %s", tx.ID)
log.Debugf("Establishing connection to redis...")
cache := redis.New(service.Config{
Network: service.DefaultRedisNetwork,
Addr: service.DefaultRedisAddr,
Password: "",
Database: "",
MaxIdle: 0,
MaxActive: 0,
IdleTimeout: service.DefaultRedisIdleTimeout,
Prefix: "",
})
if cache == nil {
log.Fatalf("Unable to establish redis connection!")
return
}
iris.RegisterOnInterrupt(func() {
cache.Close()
tx.Close()
})
log.Debugf("Starting up Iris....")
app := iris.New()
middleware.SetupSessionBackend(cache)
app.Use(middleware.InitializeSession)
app.Use(middleware.InitializeSettings)
app.StaticWeb("/public/", "./public")
app.OnErrorCode(404, func(ctx iris.Context) {
ctx.View("404.pug")
})
pugEngine := iris.Pug("./views", ".pug").Layout("layout.pug")
pugEngine.Reload(true)
app.RegisterView(pugEngine)
mvc.Configure(app.Party("/"), public)
mvc.Configure(app.Party("/api/v1/accounts"), accounts)
mvc.Configure(app.Party("/register"), registrations)
mvc.Configure(app.Party("/login"), logins)
mvc.Configure(app.Party("/logout"), logouts)
mvc.Configure(app.Party("/about"), about)
mvc.Configure(app.Party("/otp"), otp)
log.Infof("Listening on 8080...")
var run iris.Runner
if middleware.GlobalSettings.UseTLS {
run = iris.TLS(":8080", middleware.GlobalSettings.TLSCert, middleware.GlobalSettings.TLSKey)
} else {
run = iris.Addr(":8080")
}
app.Run(run, iris.WithoutStartupLog, iris.WithoutServerError(iris.ErrServerClosed))
log.Infof("Goodbye! :)")
}
func public(app *mvc.Application) {
app.Handle(new(controllers.PublicController))
}
func accounts(app *mvc.Application) {
app.Handle(new(controllers.AccountController))
}
func registrations(app *mvc.Application) {
app.Handle(new(controllers.RegistrationController))
}
func logins(app *mvc.Application) {
app.Handle(new(controllers.LoginController))
}
func logouts(app *mvc.Application) {
app.Handle(new(controllers.LogoutController))
}
func about(app *mvc.Application) {
app.Handle(new(controllers.AboutController))
}
func otp(app *mvc.Application) {
app.Handle(new(controllers.OTPController))
}