forked from caiiiyua/myapp
/
init.go
99 lines (84 loc) · 2.9 KB
/
init.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
package app
import (
"log"
"net/http"
"reweb/app/utils"
"time"
"github.com/dchest/captcha"
"github.com/go-xorm/xorm"
"github.com/revel/revel"
"github.com/revel/revel/cache"
)
var (
Engine *xorm.Engine
)
const (
CaptchaW = 120
CaptchaH = 40
)
func init() {
// init revel filters
initRevelFilters()
// init revel template functions
initRevelTemplateFuncs()
// register startup functions with OnAppStart
// ( order dependent )
revel.OnAppStart(initHandlers)
// revel.OnAppStart(InitDB)
// revel.OnAppStart(FillCache)
}
func initRevelFilters() {
// Filters is the default set of global filters.
revel.Filters = []revel.Filter{
revel.PanicFilter, // Recover from panics and display an error page instead.
revel.RouterFilter, // Use the routing table to select the right Action
revel.FilterConfiguringFilter, // A hook for adding or removing per-Action filters.
revel.ParamsFilter, // Parse parameters into Controller.Params.
revel.SessionFilter, // Restore and write the session cookie.
revel.FlashFilter, // Restore and write the flash cookie.
revel.ValidationFilter, // Restore kept validation errors and save new ones from cookie.
revel.I18nFilter, // Resolve the requested language
HeaderFilter, // Add some security based headers
revel.InterceptorFilter, // Run interceptors around the action.
revel.CompressFilter, // Compress the result.
revel.ActionInvoker, // Invoke the action.
}
}
func initRevelTemplateFuncs() {
revel.TemplateFuncs["webTitle"] = func(prefix string) (webTitle string) {
const KEY = "cache.web.title"
if err := cache.Get(KEY, &webTitle); err != nil {
webTitle = utils.ForceGetConfig("web.title")
go cache.Set(KEY, webTitle, 24*30*time.Hour)
}
return
}
revel.TemplateFuncs["logined"] = func(session revel.Session) bool {
v, e := session["user"]
return e == true && v != ""
}
}
func initHandlers() {
var (
serveMux = http.NewServeMux()
revelHandler = revel.Server.Handler
)
serveMux.Handle("/", revelHandler)
// serveMux.Handle("/captcha/", http.HandlerFunc(CaptchaHanlder))
serveMux.Handle("/captcha/", captcha.Server(CaptchaW, CaptchaH))
revel.Server.Handler = serveMux
}
var CaptchaHanlder = func(w http.ResponseWriter, r *http.Request) {
log.Println("CaptchaHandler handling...")
captcha.Server(CaptchaW, CaptchaH).ServeHTTP(w, r)
}
// TODO turn this into revel.HeaderFilter
// should probably also have a filter for CSRF
// not sure if it can go in the same filter or not
var HeaderFilter = func(c *revel.Controller, fc []revel.Filter) {
// Add some common security headers
c.Response.Out.Header().Add("X-Frame-Options", "SAMEORIGIN")
c.Response.Out.Header().Add("X-XSS-Protection", "1; mode=block")
c.Response.Out.Header().Add("X-Content-Type-Options", "nosniff")
fc[0](c, fc[1:]) // Execute the next filter stage.
}