Представьте себе: вы шли по улице и упали лицом в API ключи от Chat GPT. «Что же делать?» - спросите меня вы. И я с радостью вам помогу!
Вот что надо делать:
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"log"
"net/http"
"os"
"strings"
)
func main() {
// Create a scanner to read API keys from the console
scanner := bufio.NewScanner(os.Stdin)
outputFile, err := os.Create("validated_keys.txt")
if err != nil {
log.Fatalf("Не удалось создать файл: %v", err)
}
defer outputFile.Close()
writer := bufio.NewWriter(outputFile)
for {
fmt.Print("\n==========================\nВведите API ключи (или 'exit' для завершения): ")
scanner.Scan()
input := scanner.Text()
if input == "exit" {
break
}
if err := scanner.Err(); err != nil {
log.Fatalf("Ошибка ввода: %v", err)
}
apiKeys := strings.Fields(input)
for _, apiKey := range apiKeys {
gpt4oValid := checkAPIKey(apiKey, "gpt-4o")
gpt35Valid := checkAPIKey(apiKey, "gpt-3.5-turbo")
logOutput := fmt.Sprintf("\nAPI ключ: %s\nМодель GPT-4o: %s\nМодель GPT-3.5: %s\n",
apiKey, resultText(gpt4oValid), resultText(gpt35Valid))
fmt.Print(logOutput)
if gpt4oValid || gpt35Valid {
writer.WriteString(fmt.Sprintf("API ключ: %s\nМодель GPT-4o: %s\nМодель GPT-3.5: %s\n",
apiKey, resultText(gpt4oValid), resultText(gpt35Valid)))
writer.Flush()
}
}
}
}
func resultText(valid bool) string {
if valid {
return "действителен"
}
return "недействителен"
}
// Функция для проверки API ключа OpenAI
func checkAPIKey(apiKey string, model string) bool {
payload := map[string]interface{}{
"model": model,
"messages": []map[string]string{{"role": "user", "content": "Тестовое сообщение"}},
"max_tokens": 10,
}
jsonPayload, _ := json.Marshal(payload)
req, _ := http.NewRequest("POST", "https://api.openai.com/v1/chat/completions", bytes.NewBuffer(jsonPayload))
req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", apiKey))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
log.Printf("Ошибка при проверке API ключа %s для модели %s: %v", safeKey(apiKey), model, err)
return false
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
return true
}
log.Printf("Ошибка проверки ключа: %s для модели %s - %s", safeKey(apiKey), model, resp.Status)
return false
}
// Функция для скрытия ключа при выводе
func safeKey(key string) string {
if len(key) > 8 {
return key[:4] + "..." + key[len(key)-4:]
}
return key
}