// example of HTTP server that uses the captcha package. package main import ( "fmt" "github.com/dchest/captcha" "http" "template" ) var formTemplate = template.MustParse(formTemplateSrc, nil) func showFormHandler(w http.ResponseWriter, r *http.Request) { d := struct { CaptchaId string JavaScript string }{ captcha.New(captcha.StdLength), formJavaScript, } if err := formTemplate.Execute(w, &d); err != nil { http.Error(w, err.String(), http.StatusInternalServerError) } } func processFormHandler(w http.ResponseWriter, r *http.Request) { if !captcha.VerifyString(r.FormValue("captchaId"), r.FormValue("captchaSolution")) { fmt.Fprintf(w, "Wrong captcha solution! No robots allowed!") return } fmt.Fprintf(w, "Great job, human! You solved the captcha.") } func main() { http.HandleFunc("/", showFormHandler) http.HandleFunc("/process", processFormHandler) http.Handle("/captcha/", captcha.Server(captcha.StdWidth, captcha.StdHeight)) http.ListenAndServe(":8080", nil) } const formJavaScript = ` function playAudio() { var e = document.getElementById('audio') e.style.display = 'block'; e.play(); return false; } function reload() { function setSrcQuery(e, q) { var src = e.src; var p = src.indexOf('?'); if (p >= 0) { src = src.substr(0, p); } e.src = src + "?" + q } setSrcQuery(document.getElementById('image'), "reload=" + (new Date()).getTime()); setSrcQuery(document.getElementById('audio'), (new Date()).getTime()); return false; } ` const formTemplateSrc = ` Captcha Example

Type the numbers you see in the picture below:

Captcha image

Reload | Play Audio
`