80 lines
1.3 KiB
Go
80 lines
1.3 KiB
Go
|
package file
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// Supported extensions
|
||
|
var extensions = [2]string{"txt", "json"}
|
||
|
|
||
|
// 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 {
|
||
|
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
|
||
|
}
|