Browse Source

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

pull/68/head
Gabe Kangas 5 years ago
parent
commit
ab21706d73
  1. 5
      controllers/index.go
  2. 23
      utils/utils.go
  3. 16
      utils/utils_test.go

5
controllers/index.go

@ -8,7 +8,6 @@ import ( @@ -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) { @@ -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
}

23
utils/utils.go

@ -5,6 +5,8 @@ import ( @@ -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 { @@ -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

@ -0,0 +1,16 @@ @@ -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)
}
}
}
Loading…
Cancel
Save