feat: add url shortner
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package shorturl
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// botSubstrings catches the named social-platform link previewers explicitly,
|
||||
// so we don't over-count human clicks from OG scraping.
|
||||
var botSubstrings = []string{
|
||||
"facebookexternalhit",
|
||||
"facebot",
|
||||
"twitterbot",
|
||||
"linkedinbot",
|
||||
"slackbot",
|
||||
"telegrambot",
|
||||
"discordbot",
|
||||
"pinterest",
|
||||
"whatsapp",
|
||||
"applebot",
|
||||
"googlebot",
|
||||
"bingbot",
|
||||
"yahoo! slurp",
|
||||
"duckduckbot",
|
||||
"baiduspider",
|
||||
"yandex",
|
||||
"redditbot",
|
||||
"embedly",
|
||||
"vkshare",
|
||||
"viber",
|
||||
"signal",
|
||||
"skypeuripreview",
|
||||
}
|
||||
|
||||
var botFallbackRe = regexp.MustCompile(`(?i)\b(bot|crawler|spider|preview|fetch)\b`)
|
||||
|
||||
// IsBot returns true if the user-agent looks like an OG scraper / search
|
||||
// crawler / link previewer, rather than a real human browser. False positives
|
||||
// here only affect analytics aggregation (the is_bot flag); they never change
|
||||
// redirect behavior.
|
||||
func IsBot(userAgent string) bool {
|
||||
if userAgent == "" {
|
||||
return true // missing UA is almost always a bot or curl
|
||||
}
|
||||
ua := strings.ToLower(userAgent)
|
||||
for _, needle := range botSubstrings {
|
||||
if strings.Contains(ua, needle) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return botFallbackRe.MatchString(ua)
|
||||
}
|
||||
Reference in New Issue
Block a user