A simple way to handle form submissions from static websites.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

63 lines
1.4 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
  1. package main
  2. import (
  3. "net/url"
  4. "strings"
  5. "github.com/google/safebrowsing"
  6. )
  7. // Returns true when it spam
  8. func checkValues(values *FormValues) bool {
  9. var urlsToCheck []string
  10. var allValues []string
  11. for _, value := range *values {
  12. for _, singleValue := range value {
  13. allValues = append(allValues, singleValue)
  14. if strings.Contains(singleValue, "http") {
  15. parsed, e := url.Parse(singleValue)
  16. if parsed != nil && e == nil {
  17. urlsToCheck = append(urlsToCheck, singleValue)
  18. }
  19. }
  20. }
  21. }
  22. return checkBlacklist(allValues) || checkUrls(urlsToCheck)
  23. }
  24. func checkBlacklist(values []string) bool {
  25. for _, value := range values {
  26. for _, blacklistedString := range appConfig.BlacklistArray {
  27. if strings.Contains(strings.ToLower(value), strings.ToLower(blacklistedString)) {
  28. return true
  29. }
  30. }
  31. }
  32. return false
  33. }
  34. // Only tests when GOOGLE_API_KEY is set
  35. // Returns true when it spam
  36. func checkUrls(urlsToCheck []string) bool {
  37. if len(appConfig.GoogleAPIKey) < 1 || len(urlsToCheck) == 0 {
  38. return false
  39. }
  40. sb, err := safebrowsing.NewSafeBrowser(safebrowsing.Config{
  41. APIKey: appConfig.GoogleAPIKey,
  42. ID: "MailyGo",
  43. })
  44. if err != nil {
  45. return false
  46. }
  47. allThreats, err := sb.LookupURLs(urlsToCheck)
  48. if err != nil {
  49. return false
  50. }
  51. for _, threats := range allThreats {
  52. if len(threats) > 0 {
  53. // Unsafe url, mark as spam
  54. return true
  55. }
  56. }
  57. return false
  58. }