Skip to content

Go Sunucu SDK

Resmi Go sunucu tarafı SDK'sı — github.com/Captcha-La/captchala-go.

SDK'nın sizin için üstlendiği üç iş:

  1. Validate — tarayıcı SDK'sından gelen bir pt_ pass token'ını doğrulayın.
  2. Issue — gelecek challenge'ı belirli bir action / IP / UID'ye bağlamak için tek seferlik bir sct_ server token'ı basın.
  3. Moderate — panelin kullandığı OpenAI uyumlu pipeline ile çok modlu (metin + görüntü) içerik moderasyonu.

Kurulum

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

Yalnızca stdlib. Harici bağımlılık yok.

Doğrulama (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

Orijinal server_token, bind_uid ile düzenlendiyse karşılaştırın:

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

IP'ye bağlı token'lar için doğrulama tarafında kullanıcı IP'sini geçirin:

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

Sunucu token'ı düzenleme

Yüksek değerli akışlar (giriş, kayıt, ödeme) için önerilir: backend tek seferlik bir sct_ token basar, tarayıcıya iletir, tarayıcı bunu serverToken prop'u olarak kullanır. Tek kullanımlık, action kapsamlı, isteğe bağlı IP/UID-bağlı.

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

Yalnızca varsayılan değerlerle kısayol:

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

İçerik moderasyonu

Çok modlu — OpenAI uyumlu formatta ModerationItem slice'ı kabul eder (metin ve/veya image_url):

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

Düz metin kısayolu:

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

Kategoriler model tanımlıdır; sabit bir küme kodlamak yerine result.Categories üzerinde defansif olarak iterasyon yapın.

Türler

TürAlanlar
ValidateResultValid, Error, UID, ChallengeID, Action, Offline, ClientOnly, Warning
IssueResultOK, Token, ExpiresIn, IssuedAt, Error, Message
IssueOptionsBindingIP, TTL, MaxUses, BindUID
ModerationItemType, Text, ImageURL (TextItem() / ImageURLItem() yardımcılarını kullanın)
ModerationResultOK, Flagged, Categories, ContentType, Raw, Error, Message; HasCategory(...names) yöntemi

Bağlantılar

MIT-licensed examples · CaptchaLa is operated independently