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
Raw Normal View History

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