Implemented IString for file writing for Hunter Structs.
This commit is contained in:
+6
-6
@@ -113,7 +113,7 @@ var (
|
||||
|
||||
// Write Hunter.io Domain Search Result to file
|
||||
fmt.Printf("[*] Writing Hunter.io Domain Search Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterDomainToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter domain search to file")
|
||||
@@ -150,7 +150,7 @@ var (
|
||||
|
||||
// Write Hunter.io Email Finder Result to file
|
||||
fmt.Printf("[*] Writing Hunter.io Email Finder Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterEmailToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter email find to file")
|
||||
@@ -206,7 +206,7 @@ var (
|
||||
}
|
||||
// Write Hunter.io Email Verification Result to file
|
||||
fmt.Printf("[*] Writing Hunter.io Email Verification Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterEmailVerifyToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter email verification to file")
|
||||
@@ -264,7 +264,7 @@ var (
|
||||
|
||||
// Write to file
|
||||
fmt.Printf("[*] Writing Hunter.io Company Enrichment Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterCompanyEnrichmentToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter company enrichment to file")
|
||||
@@ -302,7 +302,7 @@ var (
|
||||
|
||||
// Write to file
|
||||
fmt.Printf("[*] Writing Hunter.io Person Enrichment Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterPersonEnrichmentToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter person enrichment to file")
|
||||
@@ -339,7 +339,7 @@ var (
|
||||
|
||||
// Write to file
|
||||
fmt.Printf("[*] Writing Hunter.io Combined Enrichment Result to file: %s%s\n", hunterOutputFile, fType.Extension())
|
||||
err = export.WriteHunterCombinedEnrichmentToFile(result, hunterOutputFile, fType)
|
||||
err = export.WriteIStringToFile(result, hunterOutputFile, fType)
|
||||
if err != nil {
|
||||
if debugGlobal {
|
||||
debug.PrintInfo("failed to write hunter combined enrichment to file")
|
||||
|
||||
@@ -1,161 +0,0 @@
|
||||
package export
|
||||
|
||||
import (
|
||||
"crowsnest/internal/files"
|
||||
"crowsnest/internal/sqlite"
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"gopkg.in/yaml.v3"
|
||||
"os"
|
||||
)
|
||||
|
||||
func WriteHunterDomainToFile(result sqlite.HunterDomainData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
|
||||
func WriteHunterEmailToFile(result sqlite.HunterEmailFinderData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
|
||||
func WriteHunterEmailVerifyToFile(result sqlite.HunterEmailVerifyData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
|
||||
func WriteHunterCompanyEnrichmentToFile(result sqlite.CompanyData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
|
||||
func WriteHunterPersonEnrichmentToFile(result sqlite.PersonData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
|
||||
func WriteHunterCombinedEnrichmentToFile(result sqlite.CombinedData, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(result, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(result, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(result)
|
||||
case files.TEXT:
|
||||
data = []byte(result.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package export
|
||||
|
||||
import (
|
||||
"crowsnest/internal/files"
|
||||
"crowsnest/internal/sqlite"
|
||||
"encoding/json"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"gopkg.in/yaml.v3"
|
||||
"os"
|
||||
)
|
||||
|
||||
func WriteIStringToFile(iString sqlite.IString, outputFile string, fileType files.FileType) error {
|
||||
var data []byte
|
||||
var err error
|
||||
|
||||
switch fileType {
|
||||
case files.JSON:
|
||||
data, err = json.MarshalIndent(iString, "", " ")
|
||||
case files.XML:
|
||||
data, err = xml.MarshalIndent(iString, "", " ")
|
||||
case files.YAML:
|
||||
data, err = yaml.Marshal(iString)
|
||||
case files.TEXT:
|
||||
data = []byte(iString.String())
|
||||
default:
|
||||
return err
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
filePath := fmt.Sprintf("%s.%s", outputFile, fileType.String())
|
||||
return os.WriteFile(filePath, data, 0644)
|
||||
}
|
||||
@@ -14,6 +14,7 @@ type HunterDomainSearchResult struct {
|
||||
|
||||
// HunterDomainData contains the main domain information
|
||||
type HunterDomainData struct {
|
||||
IString
|
||||
gorm.Model
|
||||
Domain string `json:"domain" gorm:"unique"`
|
||||
Disposable bool `json:"disposable"`
|
||||
@@ -40,7 +41,7 @@ type HunterDomainData struct {
|
||||
LinkedDomains []string `json:"linked_domains" gorm:"serializer:json"`
|
||||
}
|
||||
|
||||
func (h *HunterDomainData) String() string {
|
||||
func (h HunterDomainData) String() string {
|
||||
return fmt.Sprintf("Domain: %s\nDisposable: %t\nWebmail: %t\nAcceptAll: %t\nPattern: %s\nOrganization: %s\nDescription: %s\nIndustry: %s\nTwitter: %s\nFacebook: %s\nLinkedin: %s\nInstagram: %s\nYoutube: %s\nTechnologies: %v\nCountry: %s\nState: %s\nCity: %s\nPostalCode: %s\nStreet: %s\nHeadcount: %s\nCompanyType: %s\nEmails: %v\nLinkedDomains: %v\n",
|
||||
h.Domain, h.Disposable, h.Webmail, h.AcceptAll, h.Pattern, h.Organization, h.Description, h.Industry, h.Twitter, h.Facebook, h.Linkedin, h.Instagram, h.Youtube, h.Technologies, h.Country, h.State, h.City, h.PostalCode, h.Street, h.Headcount, h.CompanyType, h.Emails, h.LinkedDomains)
|
||||
}
|
||||
@@ -142,6 +143,7 @@ type HunterEmailFinderResponse struct {
|
||||
|
||||
// HunterEmailFinderData contains the main email information
|
||||
type HunterEmailFinderData struct {
|
||||
IString
|
||||
FirstName string `json:"first_name"`
|
||||
LastName string `json:"last_name"`
|
||||
Email string `json:"email"`
|
||||
@@ -157,7 +159,7 @@ type HunterEmailFinderData struct {
|
||||
Verification HunterVerification `json:"verification" gorm:"embedded;embeddedPrefix:verification_"`
|
||||
}
|
||||
|
||||
func (he *HunterEmailFinderData) String() string {
|
||||
func (he HunterEmailFinderData) String() string {
|
||||
return fmt.Sprintf("FirstName: %s\nLastName: %s\nEmail: %s\nScore: %d\nDomain: %s\nAcceptAll: %t\nPosition: %s\nTwitter: %s\nLinkedinURL: %s\nPhoneNumber: %s\nCompany: %s\nSources: %v\nVerification: %v\n",
|
||||
he.FirstName, he.LastName, he.Email, he.Score, he.Domain, he.AcceptAll, he.Position, he.Twitter, he.LinkedinURL, he.PhoneNumber, he.Company, he.Sources, he.Verification)
|
||||
}
|
||||
@@ -189,6 +191,7 @@ type HunterEmailVerifyResponse struct {
|
||||
|
||||
// HunterEmailVerifyData contains the email verification information
|
||||
type HunterEmailVerifyData struct {
|
||||
IString
|
||||
Status string `json:"status"`
|
||||
Result string `json:"result"`
|
||||
DeprecationNotice string `json:"_deprecation_notice"`
|
||||
@@ -206,7 +209,7 @@ type HunterEmailVerifyData struct {
|
||||
Sources []HunterSource `json:"sources" gorm:"serializer:json"`
|
||||
}
|
||||
|
||||
func (ev *HunterEmailVerifyData) String() string {
|
||||
func (ev HunterEmailVerifyData) String() string {
|
||||
return fmt.Sprintf("Status: %s\nResult: %s\nDeprecationNotice: %s\nScore: %d\nEmail: %s\nRegexp: %t\nGibberish: %t\nDisposable: %t\nWebmail: %t\nMXRecords: %t\nSMTPServer: %t\nSMTPCheck: %t\nAcceptAll: %t\nBlock: %t\nSources: %v\n",
|
||||
ev.Status, ev.Result, ev.DeprecationNotice, ev.Score, ev.Email, ev.Regexp, ev.Gibberish, ev.Disposable, ev.Webmail, ev.MXRecords, ev.SMTPServer, ev.SMTPCheck, ev.AcceptAll, ev.Block, ev.Sources)
|
||||
}
|
||||
@@ -229,6 +232,7 @@ type HunterCompanyEnrichmentResponse struct {
|
||||
|
||||
// CompanyData contains the detailed company information
|
||||
type CompanyData struct {
|
||||
IString
|
||||
ID string `json:"id"`
|
||||
Name string `json:"name"`
|
||||
LegalName string `json:"legalName"`
|
||||
@@ -262,7 +266,7 @@ type CompanyData struct {
|
||||
UltimateParent ParentCompany `json:"ultimateParent" gorm:"embedded;embeddedPrefix:ultimate_parent_"`
|
||||
}
|
||||
|
||||
func (cd *CompanyData) String() string {
|
||||
func (cd CompanyData) String() string {
|
||||
return fmt.Sprintf("ID: %s\nName: %s\nLegalName: %s\nDomain: %s\nDomainAliases: %v\nSite: %v\nCategory: %v\nTags: %v\nDescription: %s\nFoundedYear: %d\nLocation: %s\nTimeZone: %s\nUTCOffset: %d\nGeo: %v\nLogo: %s\nFacebook: %v\nLinkedIn: %v\nTwitter: %v\nCrunchbase: %v\nYouTube: %v\nEmailProvider: %s\nType: %s\nTicker: %s\nIdentifiers: %v\nPhone: %s\nMetrics: %v\nIndexedAt: %s\nTech: %v\nTechCategories: %v\nParent: %v\nUltimateParent: %v\n",
|
||||
cd.ID, cd.Name, cd.LegalName, cd.Domain, cd.DomainAliases, cd.Site, cd.Category, cd.Tags, cd.Description, cd.FoundedYear, cd.Location, cd.TimeZone, cd.UTCOffset, cd.Geo, cd.Logo, cd.Facebook, cd.LinkedIn, cd.Twitter, cd.Crunchbase, cd.YouTube, cd.EmailProvider, cd.Type, cd.Ticker, cd.Identifiers, cd.Phone, cd.Metrics, cd.IndexedAt, cd.Tech, cd.TechCategories, cd.Parent, cd.UltimateParent)
|
||||
}
|
||||
@@ -508,6 +512,7 @@ type HunterPersonEnrichmentResponse struct {
|
||||
|
||||
// PersonData contains the detailed person information
|
||||
type PersonData struct {
|
||||
IString
|
||||
gorm.Model
|
||||
ID string `json:"id"`
|
||||
Name PersonName `json:"name" gorm:"embedded;embeddedPrefix:name_"`
|
||||
@@ -534,7 +539,7 @@ type PersonData struct {
|
||||
InactiveAt string `json:"inactiveAt"`
|
||||
}
|
||||
|
||||
func (pd *PersonData) String() string {
|
||||
func (pd PersonData) String() string {
|
||||
return fmt.Sprintf("ID: %s\nName: %v\nEmail: %s\nLocation: %s\nTimeZone: %s\nUTCOffset: %d\nGeo: %v\nBio: %s\nSite: %s\nAvatar: %s\nEmployment: %v\nFacebook: %v\nGitHub: %v\nTwitter: %v\nLinkedIn: %v\nGooglePlus: %v\nGravatar: %v\nFuzzy: %t\nEmailProvider: %s\nIndexedAt: %s\nPhone: %s\nActiveAt: %s\nInactiveAt: %s\n",
|
||||
pd.ID, pd.Name, pd.Email, pd.Location, pd.TimeZone, pd.UTCOffset, pd.Geo, pd.Bio, pd.Site, pd.Avatar, pd.Employment, pd.Facebook, pd.GitHub, pd.Twitter, pd.LinkedIn, pd.GooglePlus, pd.Gravatar, pd.Fuzzy, pd.EmailProvider, pd.IndexedAt, pd.Phone, pd.ActiveAt, pd.InactiveAt)
|
||||
}
|
||||
@@ -728,11 +733,12 @@ type HunterCombinedEnrichmentResponse struct {
|
||||
|
||||
// CombinedData contains both person and company information
|
||||
type CombinedData struct {
|
||||
IString
|
||||
Person PersonData `json:"person" gorm:"embedded;embeddedPrefix:person_"`
|
||||
Company CompanyData `json:"company" gorm:"embedded;embeddedPrefix:company_"`
|
||||
}
|
||||
|
||||
func (cbd *CombinedData) String() string {
|
||||
func (cbd CombinedData) String() string {
|
||||
return fmt.Sprintf("Person: %s\nCompany: %s",
|
||||
cbd.Person.String(),
|
||||
cbd.Company.String())
|
||||
|
||||
Reference in New Issue
Block a user