Skip to content

Package recaptcha is a middleware that provides reCAPTCHA integration for Flamego

License

Notifications You must be signed in to change notification settings

flamego/recaptcha

Folders and files

NameName
Last commit message
Last commit date
Dec 1, 2024
Mar 8, 2022
Dec 8, 2021
Jul 31, 2021
Dec 1, 2024
Jul 31, 2021
Oct 26, 2022
Jul 31, 2021
Jan 1, 2025
Jan 1, 2025
Mar 16, 2022
Mar 8, 2022
Mar 8, 2022
Mar 8, 2022

Repository files navigation

recaptcha

GitHub Workflow Status Codecov GoDoc Sourcegraph

Package recaptcha is a middleware that provides reCAPTCHA integration for Flamego.

Installation

The minimum requirement of Go is 1.18.

go get github.com/flamego/recaptcha

Getting started

<!-- templates/home.tmpl -->
<html>
<head>
  <script src="https://www.google.com/recaptcha/api.js"></script>
</head>
<body>
<script>
  function onSubmit(token) {
    document.getElementById("demo-form").submit();
  }
</script>
<form id="demo-form" method="POST">
  <button class="g-recaptcha"
    data-sitekey="{{.SiteKey}}"
    data-callback='onSubmit'
    data-action='submit'>Submit</button>
</form>
</body>
</html>
package main

import (
	"fmt"
	"net/http"

	"github.com/flamego/flamego"
	"github.com/flamego/recaptcha"
	"github.com/flamego/template"
)

func main() {
	f := flamego.Classic()
	f.Use(template.Templater())
	f.Use(recaptcha.V3(
		recaptcha.Options{
			Secret:    "<SECRET>",
			VerifyURL: recaptcha.VerifyURLGoogle,
		},
	))
	f.Get("/", func(t template.Template, data template.Data) {
		data["SiteKey"] = "<SITE KEY>"
		t.HTML(http.StatusOK, "home")
	})
	f.Post("/", func(w http.ResponseWriter, r *http.Request, re recaptcha.RecaptchaV3) {
		token := r.PostFormValue("g-recaptcha-response")
		resp, err := re.Verify(token)
		if err != nil {
			w.WriteHeader(http.StatusBadRequest)
			_, _ = w.Write([]byte(err.Error()))
			return
		} else if !resp.Success {
			w.WriteHeader(http.StatusBadRequest)
			_, _ = w.Write([]byte(fmt.Sprintf("Verification failed, error codes %v", resp.ErrorCodes)))
			return
		}
		w.WriteHeader(http.StatusOK)
		_, _ = w.Write([]byte("Verified!"))
	})
	f.Run()
}

Getting help

License

This project is under the MIT License. See the LICENSE file for the full license text.