// 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") beego.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 { beego.Error("Write Captcha Image Error:", err) } }
// CreateCaptchaHTML template func for output html func (c *Captcha) CreateCaptchaHTML() template.HTML { value, err := c.CreateCaptcha() if err != nil { beego.Error("Create Captcha Error:", err) return "" } // create html return template.HTML(fmt.Sprintf(`<input type="hidden" name="%s" value="%s">`+ `<a class="captcha" href="javascript:">`+ `<img onclick="this.src=('%s%s.png?reload='+(new Date()).getTime())" class="captcha-img" src="%s%s.png">`+ `</a>`, c.FieldIDName, value, c.URLPrefix, value, c.URLPrefix, value)) }