// Handler beego filter handler for serve captcha image func (c *Captcha) Handler(ctx *context.Context) { var chars []byte id := path.Base(ctx.Request.RequestURI) if i := strings.Index(id, "."); i != -1 { id = id[:i] } key := c.key(id) if len(ctx.Input.Query("reload")) > 0 { chars = c.genRandChars() if err := c.store.Put(key, chars, c.Expiration); err != nil { ctx.Output.SetStatus(500) ctx.WriteString("captcha reload error") logs.Error("Reload Create Captcha Error:", err) return } } else { if v, ok := c.store.Get(key).([]byte); ok { chars = v } else { ctx.Output.SetStatus(404) ctx.WriteString("captcha not found") return } } img := NewImage(chars, c.StdWidth, c.StdHeight) if _, err := img.WriteTo(ctx.ResponseWriter); err != nil { logs.Error("Write Captcha Image Error:", err) } }
// show error string as simple text message. // if error string is empty, show 503 or 500 error as default. func exception(errCode string, ctx *context.Context) { atoi := func(code string) int { v, err := strconv.Atoi(code) if err == nil { return v } if ctx.Output.Status == 0 { return 503 } return ctx.Output.Status } for _, ec := range []string{errCode, "503", "500"} { if h, ok := ErrorMaps[ec]; ok { executeError(h, ctx, atoi(ec)) return } } //if 50x error has been removed from errorMap ctx.ResponseWriter.WriteHeader(atoi(errCode)) ctx.WriteString(errCode) }
func beegoFinishRouter2(ctx *context.Context) { ctx.WriteString("|FinishRouter2") }
func beegoAfterExec2(ctx *context.Context) { ctx.WriteString("|AfterExec2") }
func beegoBeforeExec2(ctx *context.Context) { ctx.WriteString("|BeforeExec2") }
func beegoBeforeRouter2(ctx *context.Context) { ctx.WriteString("|BeforeRouter2") }
func beegoFilterFunc(ctx *context.Context) { ctx.WriteString("hello") }
func serverStaticRouter(ctx *context.Context) { if ctx.Input.Method() != "GET" && ctx.Input.Method() != "HEAD" { return } forbidden, filePath, fileInfo, err := lookupFile(ctx) if err == errNotStaticRequest { return } if forbidden { exception("403", ctx) return } if filePath == "" || fileInfo == nil { if BConfig.RunMode == DEV { logs.Warn("Can't find/open the file:", filePath, err) } http.NotFound(ctx.ResponseWriter, ctx.Request) return } if fileInfo.IsDir() { requestURL := ctx.Input.URL() if requestURL[len(requestURL)-1] != '/' { redirectURL := requestURL + "/" if ctx.Request.URL.RawQuery != "" { redirectURL = redirectURL + "?" + ctx.Request.URL.RawQuery } ctx.Redirect(302, redirectURL) } else { //serveFile will list dir http.ServeFile(ctx.ResponseWriter, ctx.Request, filePath) } return } var enableCompress = BConfig.EnableGzip && isStaticCompress(filePath) var acceptEncoding string if enableCompress { acceptEncoding = context.ParseEncoding(ctx.Request) } b, n, sch, err := openFile(filePath, fileInfo, acceptEncoding) if err != nil { if BConfig.RunMode == DEV { logs.Warn("Can't compress the file:", filePath, err) } http.NotFound(ctx.ResponseWriter, ctx.Request) return } if b { ctx.Output.Header("Content-Encoding", n) } else { ctx.Output.Header("Content-Length", strconv.FormatInt(sch.size, 10)) } http.ServeContent(ctx.ResponseWriter, ctx.Request, filePath, sch.modTime, sch) return }