mirror of
https://gitee.com/shikong-sk/gofiber-study
synced 2025-05-12 04:58:03 +08:00
241 lines
6.9 KiB
Go
241 lines
6.9 KiB
Go
package test
|
|
|
|
import (
|
|
"fmt"
|
|
"github.com/gofiber/fiber/v2"
|
|
"gofiber.study.skcks.cn/common/errorx"
|
|
"gofiber.study.skcks.cn/common/logger"
|
|
"gofiber.study.skcks.cn/common/response"
|
|
"gofiber.study.skcks.cn/controller/types"
|
|
"gofiber.study.skcks.cn/global"
|
|
"gofiber.study.skcks.cn/model/captcha"
|
|
"gofiber.study.skcks.cn/services/waf"
|
|
"gofiber.study.skcks.cn/services/wol"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
type Controller struct {
|
|
*types.Controller
|
|
}
|
|
|
|
func (c *Controller) GetRouter() fiber.Router {
|
|
return c.Router
|
|
}
|
|
|
|
func NewController(app *fiber.App) *Controller {
|
|
return &Controller{
|
|
Controller: types.NewController(app, "/test"),
|
|
}
|
|
}
|
|
|
|
// JwtEncode jwt token 生成测试
|
|
//
|
|
// @Summary jwt token 生成测试
|
|
// @Description jwt token 生成测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param vo body global.UserClaims true "userClaims"
|
|
// @Success 200 {object} response.Response{data=string}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/jwt [post]
|
|
func (c *Controller) JwtEncode() {
|
|
c.Router.Add(fiber.MethodPost, "/jwt", func(ctx *fiber.Ctx) error {
|
|
claims := global.UserClaims{}
|
|
err := ctx.BodyParser(&claims)
|
|
|
|
if err = errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
token, err := global.GetToken(claims)
|
|
|
|
if err = errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse(token))
|
|
})
|
|
}
|
|
|
|
// JwtDecode jwt token 解析测试
|
|
//
|
|
// @Summary jwt token 解析测试
|
|
// @Description jwt token 解析测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param token query string true "token"
|
|
// @Success 200 {object} response.Response{data=global.UserClaims}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/jwt [get]
|
|
func (c *Controller) JwtDecode() {
|
|
c.Router.Add(fiber.MethodGet, "/jwt", func(ctx *fiber.Ctx) error {
|
|
token := ctx.Query("token")
|
|
claims, err := global.ParseToken(token)
|
|
|
|
if err = errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse(claims))
|
|
})
|
|
}
|
|
|
|
// SonyFlakeTest sonyFlake id 生成测试
|
|
//
|
|
// @Summary sonyFlake id 生成测试
|
|
// @Description sonyFlake id 生成测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=int}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/sonyFlake [get]
|
|
func (c *Controller) SonyFlakeTest() {
|
|
c.Router.Add(fiber.MethodGet, "/sonyFlake", func(ctx *fiber.Ctx) error {
|
|
id, err := global.SonyFlake.NextID()
|
|
|
|
if err = errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse(id))
|
|
})
|
|
}
|
|
|
|
// NanoIdTest nanoid 生成测试
|
|
//
|
|
// @Summary nanoid 生成测试
|
|
// @Description nanoid 生成测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=string}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/nanoid [get]
|
|
func (c *Controller) NanoIdTest() {
|
|
c.Router.Add(fiber.MethodGet, "/nanoid", func(ctx *fiber.Ctx) error {
|
|
id, err := global.GetNanoId()
|
|
|
|
if err = errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse(id))
|
|
})
|
|
}
|
|
|
|
// GetCaptchaTest 验证码 生成测试
|
|
//
|
|
// @Summary 验证码 生成测试
|
|
// @Description 验证码 生成测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=captcha.Captcha}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/captcha/get [get]
|
|
func (c *Controller) GetCaptchaTest() {
|
|
c.Router.Add(fiber.MethodGet, "/captcha/get", func(ctx *fiber.Ctx) error {
|
|
id, content, answer := global.Captcha.Driver.GenerateIdQuestionAnswer()
|
|
item, err := global.Captcha.Driver.DrawCaptcha(content)
|
|
err = global.Captcha.Store.Set(id, answer)
|
|
if err != nil {
|
|
return ctx.JSON(errorx.NewDefaultError("验证码生成失败"))
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse(captcha.Captcha{
|
|
Id: id,
|
|
Base64: item.EncodeB64string(),
|
|
Expire: time.Now().Add(time.Duration(global.Config.Captcha.Expire) * time.Second).Unix(),
|
|
}))
|
|
})
|
|
}
|
|
|
|
// VerifyCaptchaTest 验证码 验证测试
|
|
//
|
|
// @Summary 验证码 验证测试
|
|
// @Description 验证码 验证测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param vo body captcha.VerifyCaptcha true "验证码验证"
|
|
// @Success 200 {object} response.Response{data=string}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/captcha/verify [post]
|
|
func (c *Controller) VerifyCaptchaTest() {
|
|
c.Router.Add(fiber.MethodPost, "/captcha/verify", func(ctx *fiber.Ctx) error {
|
|
verifyCaptcha := &captcha.VerifyCaptcha{}
|
|
|
|
if err := errorx.ParseError(ctx.BodyParser(verifyCaptcha)); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
logger.Log.Debugf("verifyCaptcha %#v", verifyCaptcha)
|
|
|
|
verify := global.Captcha.Store.Verify(verifyCaptcha.Id, verifyCaptcha.Captcha, true)
|
|
if !verify {
|
|
return ctx.JSON(errorx.NewDefaultError("验证码错误"))
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse("验证成功"))
|
|
})
|
|
}
|
|
|
|
// WafRateLimitTest waf 访问频率限制 测试
|
|
//
|
|
// @Summary waf 访问频率限制 测试
|
|
// @Description waf 访问频率限制 测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Success 200 {object} response.Response{data=string}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/waf/access [get]
|
|
func (c *Controller) WafRateLimitTest() {
|
|
c.Router.Add(fiber.MethodGet, "/waf/access", func(ctx *fiber.Ctx) error {
|
|
logger.Log.Infof("ip: %v", ctx.GetReqHeaders())
|
|
ip := ctx.GetReqHeaders()["X-Forwarded-For"]
|
|
if len(ip) == 0 {
|
|
ip = ctx.IP()
|
|
}
|
|
|
|
access := waf.Service.Access(ip)
|
|
if !access {
|
|
return ctx.JSON(errorx.NewErrorWithCode(fiber.StatusTooManyRequests, "访问频率超过限制"))
|
|
}
|
|
|
|
return ctx.JSON(response.NewResponse("正常访问"))
|
|
})
|
|
}
|
|
|
|
// WolTest wol 测试
|
|
//
|
|
// @Summary wol 测试
|
|
// @Description wol 测试
|
|
// @Tags Test
|
|
// @Accept json
|
|
// @Produce json
|
|
// @Param mac query string true "mac"
|
|
// @Success 200 {object} response.Response{data=string}
|
|
// @Failure default {object} errorx.CodeErrorResponse
|
|
// @Router /test/wol [get]
|
|
func (c *Controller) WolTest() {
|
|
c.Router.Add(fiber.MethodGet, "/wol", func(ctx *fiber.Ctx) error {
|
|
mac := ctx.Query("mac")
|
|
port, err := strconv.Atoi(ctx.Query("port", "9"))
|
|
if err := errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
}
|
|
|
|
err = wol.Services.WakeUp(mac, port)
|
|
if err := errorx.ParseError(err); err != nil {
|
|
return ctx.JSON(err)
|
|
} else {
|
|
return ctx.JSON(response.NewResponse(fmt.Sprintf("%s 唤醒成功", mac)))
|
|
}
|
|
})
|
|
}
|