Skip to content

Go-Server-SDK

Offizielles serverseitiges Go-SDK — github.com/Captcha-La/captchala-go.

Drei Aufgaben, die das SDK für Sie übernimmt:

  1. Validate — verifiziert einen pt_-Pass-Token aus dem Browser-SDK.
  2. Issue — stellt einen Einmal-sct_-Server-Token aus, um die anstehende Challenge an eine bestimmte action / IP / UID zu binden.
  3. Moderate — multimodale (Text + Bild) Content-Moderation gegen dieselbe OpenAI-kompatible Pipeline, die auch das Dashboard verwendet.

Installation

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

Ausschließlich Standardbibliothek. Keine externen Abhängigkeiten.

Validate (pt_-Token)

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

Falls der ursprüngliche server_token mit bind_uid ausgestellt wurde, vergleichen Sie:

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

Für IP-gebundene Tokens übergeben Sie die Nutzer-IP auf der Verifizierungsseite:

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

Server-Token ausstellen

Empfohlen für hochwertige Flows (Anmeldung, Registrierung, Bezahlung): Das Backend stellt einen Einmal-sct_-Token aus, übergibt ihn an den Browser, der Browser verwendet ihn als serverToken-Prop. Einmal-, action-bezogen, optional IP/UID-gebunden.

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

Abkürzung nur mit Standardwerten:

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

Inhalte moderieren

Multimodal — akzeptiert einen Slice von ModerationItem (Text und/oder image_url im OpenAI-kompatiblen Format):

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
    }
}

Reine-Text-Abkürzung:

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

Kategorien werden vom Modell definiert; iterieren Sie result.Categories defensiv, statt einen festen Satz hart zu kodieren.

Typen

TypFelder
ValidateResultValid, Error, UID, ChallengeID, Action, Offline, ClientOnly, Warning
IssueResultOK, Token, ExpiresIn, IssuedAt, Error, Message
IssueOptionsBindingIP, TTL, MaxUses, BindUID
ModerationItemType, Text, ImageURL (Helper TextItem() / ImageURLItem() verwenden)
ModerationResultOK, Flagged, Categories, ContentType, Raw, Error, Message; Methode HasCategory(...names)

MIT-licensed examples · CaptchaLa is operated independently