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  }