Added output support
This commit is contained in:
parent
77f1046bfc
commit
d69d5eee65
79
v1/internal/file/write.go
Normal file
79
v1/internal/file/write.go
Normal file
@ -0,0 +1,79 @@
|
||||
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
|
||||
}
|
Loading…
Reference in New Issue
Block a user