Go Sunucu SDK
Resmi Go sunucu tarafı SDK'sı — github.com/Captcha-La/captchala-go.
SDK'nın sizin için üstlendiği üç iş:
- Validate — tarayıcı SDK'sından gelen bir
pt_pass token'ını doğrulayın. - Issue — gelecek challenge'ı belirli bir action / IP / UID'ye bağlamak için tek seferlik bir
sct_server token'ı basın. - Moderate — panelin kullandığı OpenAI uyumlu pipeline ile çok modlu (metin + görüntü) içerik moderasyonu.
Kurulum
go get github.com/Captcha-La/captchala-goYalnızca stdlib. Harici bağımlılık yok.
Doğrulama (pt_ token)
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 requestOrijinal server_token, bind_uid ile düzenlendiyse karşılaştırın:
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:
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ı.
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 browserYalnızca varsayılan değerlerle kısayol:
issue, err := client.IssueServerToken("login")İçerik moderasyonu
Çok modlu — OpenAI uyumlu formatta ModerationItem slice'ı kabul eder (metin ve/veya image_url):
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:
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ür | Alanlar |
|---|---|
ValidateResult | Valid, Error, UID, ChallengeID, Action, Offline, ClientOnly, Warning |
IssueResult | OK, Token, ExpiresIn, IssuedAt, Error, Message |
IssueOptions | BindingIP, TTL, MaxUses, BindUID |
ModerationItem | Type, Text, ImageURL (TextItem() / ImageURLItem() yardımcılarını kullanın) |
ModerationResult | OK, Flagged, Categories, ContentType, Raw, Error, Message; HasCategory(...names) yöntemi |