Skip to content

SDK serveur Go

SDK officiel côté serveur Go — github.com/Captcha-La/captchala-go.

Trois rôles que le SDK gère pour vous :

  1. Valider — vérifier un pass token pt_ issu du SDK navigateur.
  2. Émettre — générer un server token sct_ à usage unique pour lier le prochain challenge à une action / IP / UID donnée.
  3. Modérer — modération de contenu multi-modale (texte + image) via le même pipeline compatible OpenAI utilisé par le tableau de bord.

Installation

bash
go get github.com/Captcha-La/captchala-go

Bibliothèque standard uniquement. Aucune dépendance externe.

Valider (token pt_)

go
import captchala "github.com/Captcha-La/captchala-go"

client := captchala.NewClient(appKey, appSecret)

result, err := client.Validate(passToken)
if err != nil || !result.Valid {
    http.Error(w, result.Error, http.StatusBadRequest)
    return
}
// proceed with the request

Si le server_token original a été émis avec bind_uid, comparez :

go
if result.UID != expectedUserID {
    http.Error(w, "user mismatch", http.StatusBadRequest)
    return
}

Pour les tokens liés à une IP, passez l'IP utilisateur côté vérification :

go
result, err := client.ValidateWithClientIP(passToken, false, userIP)

Émettre un server token

Recommandé pour les flux à forte valeur (connexion, inscription, paiement) : le backend génère un token sct_ à usage unique, le transmet au navigateur, qui l'utilise comme prop serverToken. À usage unique, lié à une action et facultativement lié à une IP / UID.

go
issue, err := client.IssueServerTokenWithOptions("login", captchala.IssueOptions{
    BindingIP: userIP,    // backend rejects token if a different IP redeems it
    TTL:       300,       // seconds
    MaxUses:   5,         // SDK retry budget
    BindUID:   userID,    // pair with ValidateResult.UID on verify
})
if err != nil || !issue.OK {
    http.Error(w, issue.Error, http.StatusBadRequest)
    return
}
// hand issue.Token to the browser

Raccourci avec valeurs par défaut uniquement :

go
issue, err := client.IssueServerToken("login")

Modérer du contenu

Multi-modal — accepte un slice de ModerationItem (texte et/ou image_url au format compatible OpenAI) :

go
result, err := client.ModerationCheck([]captchala.ModerationItem{
    captchala.TextItem(userComment),
    captchala.ImageURLItem(uploadedImageURL),
}, userID)

if err != nil || !result.OK {
    http.Error(w, result.Error, http.StatusBadRequest)
    return
}

if result.Flagged {
    if result.HasCategory("violence", "csam") {
        // hard block
    }
}

Raccourci texte brut :

go
result, err := client.ModerationText("user comment here", userID)

Les catégories sont définies par le modèle ; itérez sur result.Categories de manière défensive plutôt que de coder en dur un ensemble fixe.

Types

TypeChamps
ValidateResultValid, Error, UID, ChallengeID, Action, Offline, ClientOnly, Warning
IssueResultOK, Token, ExpiresIn, IssuedAt, Error, Message
IssueOptionsBindingIP, TTL, MaxUses, BindUID
ModerationItemType, Text, ImageURL (utilisez les helpers TextItem() / ImageURLItem())
ModerationResultOK, Flagged, Categories, ContentType, Raw, Error, Message ; méthode HasCategory(...names)

Liens

MIT-licensed examples · CaptchaLa is operated independently