Added support for different styles for CAPTCHA.

This commit is contained in:
Alexander Andreev 2022-06-27 01:20:36 +04:00
parent 0957102169
commit 96c13ec6b2
Signed by: Arav
GPG Key ID: 0388CC8FAA51063F
5 changed files with 14 additions and 13 deletions

View File

@ -25,7 +25,7 @@ func NewDwellingCaptcha(expiry time.Duration) *DwellingCaptcha {
ExpireIn: captcha.ExpiryDate(expiry)}}
}
func (c *DwellingCaptcha) generateImage() *image.Image {
func (c *DwellingCaptcha) generateImage(style string) *image.Image {
ctx := gg.NewContext(dwImageWidth, dwImageHeight)
// fill background
@ -65,9 +65,9 @@ func (c *DwellingCaptcha) generateImage() *image.Image {
return &c.Image
}
func (c *DwellingCaptcha) GetImage() *image.Image {
func (c *DwellingCaptcha) GetImage(style string) *image.Image {
if c.Image == nil {
return c.generateImage()
return c.generateImage(style)
}
return &c.Image

View File

@ -17,8 +17,8 @@ func New(data string, captcha captcha.ICaptcha) (captcha.ICaptcha, captcha.ID) {
return captchaDb.New(data, captcha)
}
func Image(id captcha.ID) (*image.Image, error) {
return captchaDb.Image(id)
func Image(id captcha.ID, style string) (*image.Image, error) {
return captchaDb.Image(id, style)
}
func Solve(id captcha.ID, answer captcha.Answer) (bool, error) {

View File

@ -24,8 +24,9 @@ func (h *CaptchaHandlers) New(w http.ResponseWriter, r *http.Request) {
func (h *CaptchaHandlers) Image(w http.ResponseWriter, r *http.Request) {
captchaID := pcaptcha.ID(server.GetURLParam(r, "captcha"))
captchaStyle := r.URL.Query().Get("style")
captchaImage, err := captcha.Image(captchaID)
captchaImage, err := captcha.Image(captchaID, captchaStyle)
if err != nil {
w.WriteHeader(http.StatusNotFound)
return

View File

@ -19,10 +19,10 @@ type Answer string
// ICaptcha interface that should be implemented by captcha.
type ICaptcha interface {
// generateImage is used to create a captcha image.
generateImage() *image.Image
generateImage(style string) *image.Image
// GetImage() returns an image of captcha. Calls
// generateImage() method if image doesn't exist.
GetImage() *image.Image
GetImage(style string) *image.Image
// GetAnswer returns a pregenerated answer.
GetAnswer() Answer
// Solve compares a stored answer with a passed one.
@ -50,13 +50,13 @@ type Captcha struct {
ExpireIn time.Time
}
func (c *Captcha) generateImage() *image.Image {
func (c *Captcha) generateImage(style string) *image.Image {
return nil
}
func (c *Captcha) GetImage() *image.Image {
func (c *Captcha) GetImage(style string) *image.Image {
if c.Image == nil {
return c.generateImage()
return c.generateImage(style)
}
return &c.Image

View File

@ -78,9 +78,9 @@ func (cdb *CaptchaDB) New(data string, captcha ICaptcha) (ICaptcha, ID) {
}
// Image returns image for a captcha.
func (cdb *CaptchaDB) Image(id ID) (*image.Image, error) {
func (cdb *CaptchaDB) Image(id ID, style string) (*image.Image, error) {
if c, ok := cdb.DB[id]; ok {
return c.GetImage(), nil
return c.GetImage(style), nil
}
return nil, errorNotFound
}