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.ValidateWithClientIP(token, false, clientIP(r))
if err != nil || !result.Valid {
    http.Error(w, result.Error, http.StatusBadRequest)
    return
}
// proceed with the request

// Real end-user IP behind a CDN / proxy
func clientIP(r *http.Request) string {
    if ip := r.Header.Get("CF-Connecting-IP"); ip != "" {
        return ip
    }
    if xff := r.Header.Get("X-Forwarded-For"); xff != "" {
        return strings.TrimSpace(strings.Split(xff, ",")[0])
    }
    host, _, _ := net.SplitHostPort(r.RemoteAddr)
    return host
}

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
}

ValidateWithClientIP'in IP argümanı isteğe bağlı ancak önerilir — son kullanıcının IP'sini gelen isteğinizden geçirin; ek risk kontrolleri için kullanılır. Atlanması güvenlidir (o zaman Validate / ValidateWithOptions kullanın). Çözüm anındaki bağlam, başvurunuz için result.CaptchaArgs içinde de döndürülür:

go
ip := result.CaptchaArgs.UserIP   // visitor IP recorded at solve time

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, CaptchaArgs
CaptchaArgsPlatform, UserIP, Referer, Pkg, SolvedAt, RiskScore (yalnızca bilgi amaçlı)
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