1
0

filter.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. package routers
  2. import (
  3. "encoding/json"
  4. "github.com/astaxie/beego"
  5. "github.com/astaxie/beego/context"
  6. "github.com/lifei6671/mindoc/conf"
  7. "github.com/lifei6671/mindoc/models"
  8. "net/url"
  9. "regexp"
  10. )
  11. func init() {
  12. var FilterUser = func(ctx *context.Context) {
  13. _, ok := ctx.Input.Session(conf.LoginSessionName).(models.Member)
  14. if !ok {
  15. if ctx.Input.IsAjax() {
  16. jsonData := make(map[string]interface{}, 3)
  17. jsonData["errcode"] = 403
  18. jsonData["message"] = "请登录后再操作"
  19. returnJSON, _ := json.Marshal(jsonData)
  20. ctx.ResponseWriter.Write(returnJSON)
  21. } else {
  22. ctx.Redirect(302, conf.URLFor("AccountController.Login")+"?url="+url.PathEscape(conf.BaseUrl+ctx.Request.URL.RequestURI()))
  23. }
  24. }
  25. }
  26. beego.InsertFilter("/manager", beego.BeforeRouter, FilterUser)
  27. beego.InsertFilter("/manager/*", beego.BeforeRouter, FilterUser)
  28. beego.InsertFilter("/setting", beego.BeforeRouter, FilterUser)
  29. beego.InsertFilter("/setting/*", beego.BeforeRouter, FilterUser)
  30. beego.InsertFilter("/book", beego.BeforeRouter, FilterUser)
  31. beego.InsertFilter("/book/*", beego.BeforeRouter, FilterUser)
  32. beego.InsertFilter("/api/*", beego.BeforeRouter, FilterUser)
  33. beego.InsertFilter("/manage/*", beego.BeforeRouter, FilterUser)
  34. var FinishRouter = func(ctx *context.Context) {
  35. ctx.ResponseWriter.Header().Add("MinDoc-Version", conf.VERSION)
  36. ctx.ResponseWriter.Header().Add("MinDoc-Site", "https://www.iminho.me")
  37. ctx.ResponseWriter.Header().Add("X-XSS-Protection", "1; mode=block")
  38. }
  39. var StartRouter = func(ctx *context.Context) {
  40. sessionId := ctx.Input.Cookie(beego.AppConfig.String("sessionname"))
  41. if sessionId != "" {
  42. //sessionId必须是数字字母组成,且最小32个字符,最大1024字符
  43. if ok, err := regexp.MatchString(`^[a-zA-Z0-9]{32,512}$`, sessionId); !ok || err != nil {
  44. panic("401")
  45. }
  46. }
  47. }
  48. beego.InsertFilter("/*", beego.BeforeStatic, StartRouter, false)
  49. beego.InsertFilter("/*", beego.BeforeRouter, FinishRouter, false)
  50. }