captcha.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package utils
  2. import (
  3. "github.com/mojocn/base64Captcha"
  4. "time"
  5. )
  6. var capdString = base64Captcha.NewDriverString(50, 150, 5, 10, 4, "123456789abcdefghijklmnopqrstuvwxyz", nil, nil, nil)
  7. var capdMath = base64Captcha.NewDriverMath(50, 150, 5, 10, nil, nil, nil)
  8. type B64StringCaptchaProvider struct{}
  9. func (p B64StringCaptchaProvider) Generate(ip string) (string, string, error) {
  10. _, content, answer := capdString.GenerateIdQuestionAnswer()
  11. return content, answer, nil
  12. }
  13. func (p B64StringCaptchaProvider) Expiration() time.Duration {
  14. return 5 * time.Minute
  15. }
  16. func (p B64StringCaptchaProvider) Draw(content string) (string, error) {
  17. item, err := capdString.DrawCaptcha(content)
  18. if err != nil {
  19. return "", err
  20. }
  21. b64str := item.EncodeB64string()
  22. return b64str, nil
  23. }
  24. type B64MathCaptchaProvider struct{}
  25. func (p B64MathCaptchaProvider) Generate(ip string) (string, string, error) {
  26. _, content, answer := capdMath.GenerateIdQuestionAnswer()
  27. return content, answer, nil
  28. }
  29. func (p B64MathCaptchaProvider) Expiration() time.Duration {
  30. return 5 * time.Minute
  31. }
  32. func (p B64MathCaptchaProvider) Draw(content string) (string, error) {
  33. item, err := capdMath.DrawCaptcha(content)
  34. if err != nil {
  35. return "", err
  36. }
  37. b64str := item.EncodeB64string()
  38. return b64str, nil
  39. }