init
This commit is contained in:
58
bbs-go/server/internal/controllers/api/captcha_controller.go
Normal file
58
bbs-go/server/internal/controllers/api/captcha_controller.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package api
|
||||
|
||||
import (
|
||||
"bbs-go/internal/pkg/bbsurls"
|
||||
"log/slog"
|
||||
|
||||
"github.com/dchest/captcha"
|
||||
"github.com/kataras/iris/v12"
|
||||
"github.com/mlogclub/simple/common/strs"
|
||||
"github.com/mlogclub/simple/web"
|
||||
)
|
||||
|
||||
type CaptchaController struct {
|
||||
Ctx iris.Context
|
||||
}
|
||||
|
||||
func (c *CaptchaController) GetRequest() *web.JsonResult {
|
||||
captchaId := c.Ctx.FormValue("captchaId")
|
||||
if strs.IsNotBlank(captchaId) { // reload
|
||||
if !captcha.Reload(captchaId) {
|
||||
// reload 失败,重新加载验证码
|
||||
captchaId = captcha.NewLen(4)
|
||||
}
|
||||
} else {
|
||||
captchaId = captcha.NewLen(4)
|
||||
}
|
||||
captchaUrl := bbsurls.AbsUrl("/api/captcha/show?captchaId=" + captchaId + "&r=" + strs.UUID())
|
||||
return web.NewEmptyRspBuilder().
|
||||
Put("captchaId", captchaId).
|
||||
Put("captchaUrl", captchaUrl).
|
||||
JsonResult()
|
||||
}
|
||||
|
||||
func (c *CaptchaController) GetShow() {
|
||||
captchaId := c.Ctx.URLParam("captchaId")
|
||||
|
||||
if captchaId == "" {
|
||||
c.Ctx.StatusCode(404)
|
||||
return
|
||||
}
|
||||
|
||||
if !captcha.Reload(captchaId) {
|
||||
c.Ctx.StatusCode(404)
|
||||
return
|
||||
}
|
||||
|
||||
c.Ctx.Header("Content-Type", "image/png")
|
||||
if err := captcha.WriteImage(c.Ctx.ResponseWriter(), captchaId, captcha.StdWidth, captcha.StdHeight); err != nil {
|
||||
slog.Error(err.Error(), slog.Any("err", err))
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CaptchaController) GetVerify() *web.JsonResult {
|
||||
captchaId := c.Ctx.URLParam("captchaId")
|
||||
captchaCode := c.Ctx.URLParam("captchaCode")
|
||||
success := captcha.VerifyString(captchaId, captchaCode)
|
||||
return web.NewEmptyRspBuilder().Put("success", success).JsonResult()
|
||||
}
|
||||
Reference in New Issue
Block a user