Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alpkeskin
GitHub Repository: alpkeskin/mosint
Path: blob/master/v3/pkg/services/emailrep/emailrep.go
689 views
1
/*
2
Copyright © 2023 github.com/alpkeskin
3
*/
4
package emailrep
5
6
import (
7
"encoding/json"
8
"fmt"
9
"io"
10
"net/http"
11
"strings"
12
13
"github.com/alpkeskin/mosint/v3/internal/config"
14
"github.com/alpkeskin/mosint/v3/internal/spinner"
15
"github.com/fatih/color"
16
)
17
18
type Emailrep struct {
19
Response EmailRepResponse
20
}
21
22
type EmailRepResponse struct {
23
Email string `json:"email"`
24
Reputation string `json:"reputation"`
25
Suspicious bool `json:"suspicious"`
26
References int `json:"references"`
27
Details struct {
28
Blacklisted bool `json:"blacklisted"`
29
MaliciousActivity bool `json:"malicious_activity"`
30
MaliciousActivityRecent bool `json:"malicious_activity_recent"`
31
CredentialsLeaked bool `json:"credentials_leaked"`
32
CredentialsLeakedRecent bool `json:"credentials_leaked_recent"`
33
DataBreach bool `json:"data_breach"`
34
FirstSeen string `json:"first_seen"`
35
LastSeen string `json:"last_seen"`
36
DomainExists bool `json:"domain_exists"`
37
DomainReputation string `json:"domain_reputation"`
38
NewDomain bool `json:"new_domain"`
39
DaysSinceDomainCreation int `json:"days_since_domain_creation"`
40
SuspiciousTld bool `json:"suspicious_tld"`
41
Spam bool `json:"spam"`
42
FreeProvider bool `json:"free_provider"`
43
Disposable bool `json:"disposable"`
44
Deliverable bool `json:"deliverable"`
45
AcceptAll bool `json:"accept_all"`
46
ValidMx bool `json:"valid_mx"`
47
PrimaryMx string `json:"primary_mx"`
48
Spoofable bool `json:"spoofable"`
49
SpfStrict bool `json:"spf_strict"`
50
DmarcEnforced bool `json:"dmarc_enforced"`
51
Profiles []string `json:"profiles"`
52
} `json:"details"`
53
}
54
55
func New() *Emailrep {
56
return &Emailrep{}
57
}
58
59
func (e *Emailrep) Lookup(email string) {
60
spinner := spinner.New("Email Reputation Lookup")
61
spinner.Start()
62
63
key := config.Cfg.Services.EmailRepApiKey
64
if strings.EqualFold(key, "") {
65
spinner.StopFail()
66
spinner.SetMessage("EmailRep Api Key is empty")
67
return
68
}
69
70
url := fmt.Sprintf("https://emailrep.io/%s", email)
71
req, err := http.NewRequest("GET", url, nil)
72
73
if err != nil {
74
spinner.StopFail()
75
spinner.SetMessage(err.Error())
76
return
77
}
78
79
req.Header.Set("Key", key)
80
req.Header.Set("User-Agent", "mosint")
81
client := &http.Client{}
82
resp, err := client.Do(req)
83
84
if err != nil {
85
spinner.StopFail()
86
spinner.SetMessage(err.Error())
87
return
88
}
89
90
body, err := io.ReadAll(resp.Body)
91
92
if err != nil {
93
spinner.StopFail()
94
spinner.SetMessage(err.Error())
95
return
96
}
97
98
defer resp.Body.Close()
99
var response EmailRepResponse
100
json.Unmarshal(body, &response)
101
e.Response = response
102
spinner.Stop()
103
}
104
105
func (e *Emailrep) Print() {
106
key := config.Cfg.Services.EmailRepApiKey
107
if strings.EqualFold(key, "") {
108
return
109
}
110
111
if e.Response.Email == "" {
112
fmt.Println(color.RedString("[!]"), "EmailRep Internal Error")
113
return
114
}
115
116
fmt.Println("[*] Email Reputation Lookup")
117
fmt.Println(color.GreenString("[+]"), "Reputation:", e.Response.Reputation)
118
fmt.Println(color.GreenString("[+]"), "Blacklisted:", e.Response.Details.Blacklisted)
119
fmt.Println(color.GreenString("[+]"), "Disposable:", e.Response.Details.Disposable)
120
fmt.Println(color.GreenString("[+]"), "Data Breach:", e.Response.Details.DataBreach)
121
fmt.Println(color.GreenString("[+]"), "Malicious Activity:", e.Response.Details.MaliciousActivity)
122
fmt.Println(color.GreenString("[+]"), "Credential Leaked:", e.Response.Details.CredentialsLeaked)
123
fmt.Println(color.GreenString("[+]"), "First Seen:", e.Response.Details.FirstSeen)
124
fmt.Println(color.GreenString("[+]"), "Last Seen:", e.Response.Details.LastSeen)
125
fmt.Println(color.GreenString("[+]"), "Day Since Domain Creation:", e.Response.Details.DaysSinceDomainCreation)
126
fmt.Println(color.GreenString("[+]"), "Spam:", e.Response.Details.Spam)
127
fmt.Println(color.GreenString("[+]"), "Free Provider:", e.Response.Details.FreeProvider)
128
fmt.Println(color.GreenString("[+]"), "Deliverable:", e.Response.Details.Deliverable)
129
fmt.Println(color.GreenString("[+]"), "Valid MX:", e.Response.Details.ValidMx)
130
}
131
132