blink/internal/file/write.go

93 lines
1.5 KiB
Go
Raw Normal View History

2024-07-09 17:56:22 +00:00
package file
import (
"encoding/json"
"fmt"
"os"
"strings"
)
// Supported extensions
2024-07-09 18:04:40 +00:00
var Extensions = []string{"csv", "txt", "json"}
2024-07-09 17:56:22 +00:00
// Write to file
func Write(path, domain, subdomain string, ips []string) error {
// Store extension
var extension string
// Split by extension
split := strings.Split(path, ".")
// No extension found
if len(split) != 2 {
extension = "txt"
} else {
extension = split[1]
}
// Open the file
file, err := os.OpenFile(path, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
if err != nil {
return err
}
defer file.Close()
// Check extension
switch extension {
2024-07-09 18:04:40 +00:00
case "csv":
// Store IPs
ip := strings.Join(ips, "#")
// Format line
line := fmt.Sprintf("%s,%s,%s\n", domain, subdomain, ip)
// Write line
_, err := file.Write([]byte(line))
if err != nil {
return err
}
2024-07-09 17:56:22 +00:00
case "txt":
// Store IPs
ip := strings.Join(ips, ",")
// Format line
line := fmt.Sprintf("%s:%s:%s\n", domain, subdomain, ip)
// Write line
_, err := file.Write([]byte(line))
if err != nil {
return err
}
case "json":
// Format struct
output := struct {
Domain string `json:"domain"`
Subdomain string `json:"subdomain"`
Hosts []string `json:"hosts"`
}{
Domain: domain,
Subdomain: subdomain,
Hosts: ips,
}
// Marshal JSON
jason, err := json.Marshal(&output)
if err != nil {
return err
}
// Format line
line := string(jason) + "\n"
// Write line
_, err = file.Write([]byte(line))
if err != nil {
return err
}
}
return nil
}