jlelse
/
MailyGo
Archived
1
Fork 0
This repository has been archived on 2024-01-02. You can view files and clone it, but cannot push or open issues or pull requests.
MailyGo/spamcheck.go

65 lines
1.4 KiB
Go

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
}