package main import ( "bytes" "encoding/json" "fmt" "net/http" "os" ) func validateRecaptcha(captchaToken string) (bool, error) { secret := os.Getenv("CAPTCHA_SERVER_KEY") if secret == "" { return false, fmt.Errorf("CAPTCHA_SERVER_KEY is not set") } url := "https://www.google.com/recaptcha/api/siteverify" payload := map[string]string{ "secret": secret, "response": captchaToken, } payloadBytes, _ := json.Marshal(payload) resp, err := http.Post(url, "application/json", bytes.NewBuffer(payloadBytes)) if err != nil { return false, fmt.Errorf("reCAPTCHA API request failed: %v", err) } defer resp.Body.Close() var result map[string]interface{} if err := json.NewDecoder(resp.Body).Decode(&result); err != nil { return false, fmt.Errorf("failed to parse reCAPTCHA API response: %v", err) } success, ok := result["success"].(bool) if !ok || !success { if errors, exists := result["error-codes"]; exists { fmt.Printf("reCAPTCHA error codes: %+v\n", errors) } return false, fmt.Errorf("reCAPTCHA validation failed") } return true, nil }