From 9859ddea42357a8c929058831b132c34cb6be516 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Mon, 18 May 2026 14:07:33 +0200 Subject: [PATCH] feat: add shared user agent constants --- integrations/playback/allanime/client.go | 3 ++- integrations/watchorder/watch_order.go | 5 ++--- internal/playback/service/service.go | 5 +++-- pkg/net/useragent/useragent.go | 14 ++++++++++++++ 4 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 pkg/net/useragent/useragent.go diff --git a/integrations/playback/allanime/client.go b/integrations/playback/allanime/client.go index 081a70c..164a317 100644 --- a/integrations/playback/allanime/client.go +++ b/integrations/playback/allanime/client.go @@ -11,6 +11,7 @@ import ( "fmt" "io" "mal/internal/domain" + "mal/pkg/net/useragent" "mal/pkg/net/utls" "net/http" "net/url" @@ -23,7 +24,7 @@ const ( allAnimeBaseURL = "https://api.allanime.day" allAnimeReferer = "https://allmanga.to/" allAnimeOrigin = "https://youtu-chan.com" - defaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0" + defaultUserAgent = useragent.Firefox121 ) var ( diff --git a/integrations/watchorder/watch_order.go b/integrations/watchorder/watch_order.go index 78679f3..51b2e3e 100644 --- a/integrations/watchorder/watch_order.go +++ b/integrations/watchorder/watch_order.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "io" + "mal/pkg/net/useragent" "net/http" "regexp" "strconv" @@ -13,8 +14,6 @@ import ( "github.com/PuerkitoBio/goquery" ) -const defaultUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" - // idPattern extracts the watch order ID from chiaki.site URLs var idPattern = regexp.MustCompile(`/id/(\d+)`) @@ -82,7 +81,7 @@ func parseRootID(url string) (int, error) { } func addCommonHeaders(request *http.Request) { - request.Header.Set("User-Agent", defaultUserAgent) + request.Header.Set("User-Agent", useragent.Chrome135) request.Header.Set("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8") request.Header.Set("Accept-Language", "en-US,en;q=0.9") request.Header.Set("Referer", "https://chiaki.site/") diff --git a/internal/playback/service/service.go b/internal/playback/service/service.go index db9df87..4d8794a 100644 --- a/internal/playback/service/service.go +++ b/internal/playback/service/service.go @@ -12,6 +12,7 @@ import ( "mal/integrations/jikan" "mal/internal/db" "mal/internal/domain" + "mal/pkg/net/useragent" "net/http" "net/url" "sort" @@ -359,7 +360,7 @@ func (s *playbackService) fetchSkipSegments(ctx context.Context, malID int, epis if err != nil { return []SkipSegment{} } - req.Header.Set("User-Agent", "Mozilla/5.0") + req.Header.Set("User-Agent", useragent.Generic) resp, err := s.httpClient.Do(req) if err != nil { @@ -424,7 +425,7 @@ func (s *playbackService) warmStreamURL(targetURL, referer string) { if referer != "" { req.Header.Set("Referer", referer) } - req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0") + req.Header.Set("User-Agent", useragent.Firefox121) ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() diff --git a/pkg/net/useragent/useragent.go b/pkg/net/useragent/useragent.go new file mode 100644 index 0000000..b85ca7f --- /dev/null +++ b/pkg/net/useragent/useragent.go @@ -0,0 +1,14 @@ +package useragent + +// Keep these centralized so we don't end up with many drifting UA strings. + +// Firefox121 mimics a modern Firefox desktop UA (used for some upstreams that +// gate responses based on UA). +const Firefox121 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0" + +// Chrome135 mimics a modern Chrome desktop UA. +const Chrome135 = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36" + +// Generic is a minimal UA string. +const Generic = "Mozilla/5.0" +