0

Add our own botlist for user-agent matching. Closes #51

This commit is contained in:
Gabe Kangas 2020-07-13 19:07:30 -07:00
parent 46b3922e1d
commit ab21706d73
3 changed files with 40 additions and 4 deletions

View File

@ -8,7 +8,6 @@ import (
"strings"
"text/template"
"github.com/mssola/user_agent"
log "github.com/sirupsen/logrus"
"github.com/gabek/owncast/config"
@ -38,9 +37,7 @@ func IndexHandler(w http.ResponseWriter, r *http.Request) {
return
}
ua := user_agent.New(r.UserAgent())
if ua != nil && ua.Bot() && isIndexRequest {
if utils.IsUserAgentABot(r.UserAgent()) && isIndexRequest {
handleScraperMetadataPage(w, r)
return
}

View File

@ -5,6 +5,8 @@ import (
"os"
"path/filepath"
"strings"
"github.com/mssola/user_agent"
)
//GetTemporaryPipePath gets the temporary path for the streampipe.flv file
@ -41,3 +43,24 @@ func Copy(source, destination string) error {
return ioutil.WriteFile(destination, input, 0644)
}
// IsUserAgentABot returns if a web client user-agent is seen as a bot
func IsUserAgentABot(userAgent string) bool {
if userAgent == "" {
return false
}
botStrings := []string{
"mastodon",
"pleroma",
}
for _, botString := range botStrings {
if strings.Contains(strings.ToLower(userAgent), botString) {
return true
}
}
ua := user_agent.New(userAgent)
return ua.Bot()
}

16
utils/utils_test.go Normal file
View File

@ -0,0 +1,16 @@
package utils
import "testing"
func TestUserAgent(t *testing.T) {
testAgents := []string{
"Pleroma 1.0.0-1168-ge18c7866-pleroma-dot-site; https://pleroma.site info@pleroma.site",
"Mastodon 1.2.3 Bot",
}
for _, agent := range testAgents {
if !IsUserAgentABot(agent) {
t.Error("Incorrect parsing of useragent", agent)
}
}
}