diff --git a/v1/internal/file/write.go b/v1/internal/file/write.go new file mode 100644 index 0000000..0ee736f --- /dev/null +++ b/v1/internal/file/write.go @@ -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 +}