Added CAPTCHA handlers.
This commit is contained in:
parent
685735a576
commit
bc37700d9b
@ -1,6 +1,8 @@
|
||||
package http
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"image/jpeg"
|
||||
"math"
|
||||
"net/http"
|
||||
"strconv"
|
||||
@ -11,6 +13,9 @@ import (
|
||||
"git.arav.top/Arav/dwelling-home/pkg/servicestat"
|
||||
"git.arav.top/Arav/dwelling-home/pkg/util"
|
||||
"git.arav.top/Arav/dwelling-home/web"
|
||||
"git.arav.top/Arav/justcaptcha/pkg/captcha"
|
||||
"git.arav.top/Arav/justcaptcha/pkg/captcha/inmemdb"
|
||||
"git.arav.top/Arav/justcaptcha/pkg/dwcaptcha"
|
||||
gbsqlite "git.arav.top/Arav/justguestbook/database/sqlite"
|
||||
"git.arav.top/Arav/justguestbook/guestbook"
|
||||
)
|
||||
@ -28,6 +33,8 @@ func NewHandlers(captchaExpire time.Duration, dbPath, gbOwner string, gbPageSize
|
||||
panic(err)
|
||||
}
|
||||
|
||||
inmemdb.SetExpiry(captchaExpire)
|
||||
|
||||
return &Handlers{
|
||||
guestbookDB: gbdb,
|
||||
captchaExpire: captchaExpire,
|
||||
@ -160,3 +167,44 @@ func (h *Handlers) Robots(w http.ResponseWriter, r *http.Request) {
|
||||
func (h *Handlers) NotFound(w http.ResponseWriter, r *http.Request) {
|
||||
web.NotFound("Not Found", w)
|
||||
}
|
||||
|
||||
/**** CAPTCHA *****************************************************************/
|
||||
|
||||
func (h *Handlers) CaptchaNew(w http.ResponseWriter, r *http.Request) {
|
||||
dwc := dwcaptcha.NewDwellingCaptcha(h.captchaExpire)
|
||||
_, id := inmemdb.New(r.RemoteAddr, dwc)
|
||||
w.WriteHeader(http.StatusCreated)
|
||||
fmt.Fprint(w, id)
|
||||
}
|
||||
|
||||
func (h *Handlers) CaptchaImage(w http.ResponseWriter, r *http.Request) {
|
||||
id := captcha.ID(GetURLParam(r, "id"))
|
||||
|
||||
image := inmemdb.Image(id, r.URL.Query().Get("style"))
|
||||
if image == nil {
|
||||
http.Error(w, "image not found", http.StatusNotFound)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Add("Content-Disposition", "inline; filename=\""+string(id)+"\"")
|
||||
|
||||
jpeg.Encode(w, *image, &jpeg.Options{Quality: 20})
|
||||
}
|
||||
|
||||
func (h *Handlers) CaptchaSolve(w http.ResponseWriter, r *http.Request) {
|
||||
captchaID := captcha.ID(GetURLParam(r, "id"))
|
||||
isJustRemove := r.URL.Query().Has("remove")
|
||||
|
||||
if isJustRemove {
|
||||
inmemdb.Remove(captchaID)
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
return
|
||||
}
|
||||
|
||||
if solved := inmemdb.IsSolved(captchaID); !solved {
|
||||
http.Error(w, "wrong answer", http.StatusForbidden)
|
||||
return
|
||||
}
|
||||
|
||||
w.WriteHeader(http.StatusNoContent)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user