package component import ( "context" "fmt" "os" "strings" "time" "wireguard-dashboard/client" "wireguard-dashboard/constant" ) type CaptchaStore struct{} // Set // @description: 验证码放入指定存储 // @receiver CaptchaStore // @param id // @param value // @return error func (CaptchaStore) Set(id string, value string) error { return client.Redis.Set(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id), value, 2*time.Minute).Err() } // Get // @description: 获取验证码信息 // @receiver CaptchaStore // @param id // @param clear // @return string func (CaptchaStore) Get(id string, clear bool) string { val, err := client.Redis.Get(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id)).Result() if err != nil { return "" } if clear { client.Redis.Del(context.Background(), fmt.Sprintf("%s:%s", constant.Captcha, id)) return val } return val } // Verify // @description: 校验 // @receiver CaptchaStore // @param id // @param answer // @param clear // @return bool func (c CaptchaStore) Verify(id, answer string, clear bool) bool { if os.Getenv("GIN_MODE") != "release" { return true } return strings.ToUpper(answer) == strings.ToUpper(c.Get(id, clear)) }