github.com/crowdsecurity/crowdsec@v1.6.1/pkg/cticlient/example/fire.go (about) 1 package main 2 3 import ( 4 "encoding/csv" 5 "fmt" 6 "os" 7 "time" 8 9 "github.com/crowdsecurity/crowdsec/pkg/cticlient" 10 ) 11 12 func intPtr(i int) *int { 13 return &i 14 } 15 16 func main() { 17 client := cticlient.NewCrowdsecCTIClient(cticlient.WithAPIKey(os.Getenv("CTI_API_KEY"))) 18 paginator := cticlient.NewFirePaginator(client, cticlient.FireParams{ 19 Limit: intPtr(1000), 20 }) 21 22 csvHeader := []string{ 23 "value", 24 "reason", 25 "type", 26 "scope", 27 "duration", 28 } 29 csvFile, err := os.Create("fire.csv") 30 if err != nil { 31 panic(err) 32 } 33 defer csvFile.Close() 34 csvWriter := csv.NewWriter(csvFile) 35 allItems := make([][]string, 0) 36 37 for { 38 items, err := paginator.Next() 39 if err != nil { 40 panic(err) 41 } 42 if items == nil { 43 break 44 } 45 46 for _, item := range items { 47 if item.State == "refused" { 48 continue 49 } 50 banDuration := time.Until(item.Expiration.Time) 51 allItems = append(allItems, []string{ 52 item.Ip, 53 "fire-import", 54 "ban", 55 "ip", 56 fmt.Sprintf("%ds", int(banDuration.Seconds())), 57 }) 58 } 59 } 60 csvWriter.Write(csvHeader) 61 csvWriter.WriteAll(allItems) 62 }