/
checker.go
47 lines (39 loc) · 911 Bytes
/
checker.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
package captcha
import (
"github.com/ArtalkJS/Artalk/internal/config"
)
type Map = map[string]interface{}
type CheckerConf struct {
config.CaptchaConf
User User
}
type User struct {
ID string
IP string
}
type CaptchaType = int
const (
Image CaptchaType = iota
IFrame
)
type Checker interface {
Type() CaptchaType
Check(value string) (bool, error)
Get() ([]byte, error)
}
func NewCaptchaChecker(conf *CheckerConf) Checker {
switch conf.CaptchaType {
case config.TypeImage:
return NewImageChecker(&conf.User)
case config.TypeTurnstile:
return NewTurnstileChecker(&conf.Turnstile, &conf.User)
case config.TypeReCaptcha:
return NewReCaptchaChecker(&conf.ReCaptcha, &conf.User)
case config.TypeHCaptcha:
return NewHCaptchaChecker(&conf.HCaptcha, &conf.User)
case config.TypeGeetest:
return NewGeetestChecker(&conf.Geetest, &conf.User)
default:
panic("Unknown captcha type")
}
}