package main
|
|
|
|
import (
|
|
"net/url"
|
|
"strings"
|
|
|
|
"github.com/google/safebrowsing"
|
|
)
|
|
|
|
// Returns true when it spam
|
|
func checkValues(values *FormValues) bool {
|
|
var urlsToCheck []string
|
|
var allValues []string
|
|
for _, value := range *values {
|
|
for _, singleValue := range value {
|
|
allValues = append(allValues, singleValue)
|
|
if strings.Contains(singleValue, "http") {
|
|
parsed, e := url.Parse(singleValue)
|
|
if parsed != nil && e == nil {
|
|
urlsToCheck = append(urlsToCheck, singleValue)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return checkBlacklist(allValues) || checkUrls(urlsToCheck)
|
|
}
|
|
|
|
func checkBlacklist(values []string) bool {
|
|
for _, value := range values {
|
|
for _, blacklistedString := range appConfig.Blacklist {
|
|
if strings.Contains(strings.ToLower(value), strings.ToLower(blacklistedString)) {
|
|
return true
|
|
}
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Only tests when GOOGLE_API_KEY is set
|
|
// Returns true when it spam
|
|
func checkUrls(urlsToCheck []string) bool {
|
|
if len(appConfig.GoogleApiKey) < 1 || len(urlsToCheck) == 0 {
|
|
return false
|
|
}
|
|
sb, err := safebrowsing.NewSafeBrowser(safebrowsing.Config{
|
|
APIKey: appConfig.GoogleApiKey,
|
|
ID: "MailyGo",
|
|
})
|
|
if err != nil {
|
|
return false
|
|
}
|
|
allThreats, err := sb.LookupURLs(urlsToCheck)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
for _, threats := range allThreats {
|
|
if len(threats) > 0 {
|
|
// Unsafe url, mark as spam
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|