From 27ab075da14b466f7d498b6215d0455b5564164a Mon Sep 17 00:00:00 2001 From: Felipe Marinho Date: Wed, 16 Jul 2025 20:22:53 -0300 Subject: [PATCH] Fix: Add adware url decoding support (#33) * chg: fix: add bludv url decoding support * chg: feat: add safeguards against future algorithim changes --- api/bludv.go | 24 ++++++++++++++++++++++++ utils/decoder.go | 28 ++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 utils/decoder.go diff --git a/api/bludv.go b/api/bludv.go index 22495d6..e84b4a6 100644 --- a/api/bludv.go +++ b/api/bludv.go @@ -152,6 +152,30 @@ func getTorrentsBluDV(ctx context.Context, i *Indexer, link string) ([]schema.In magnetLinks = append(magnetLinks, magnetLink) }) + adwareLinks := textContent.Find("a[href^=\"https://www.seuvideo.xyz\"]") + adwareLinks.Each(func(_ int, s *goquery.Selection) { + href, _ := s.Attr("href") + // extract querysting "id" from url + parsedUrl, err := url.Parse(href) + if err != nil { + fmt.Println(err) + return + } + magnetLink := parsedUrl.Query().Get("id") + magnetLinkDecoded, err := utils.DecodeAdLink(magnetLink) + if err != nil { + fmt.Printf("failed to decode ad link \"%s\": %v\n", href, err) + return + } + + // if decoded magnet link is indeed a magnet link, append it + if strings.HasPrefix(magnetLinkDecoded, "magnet:") { + magnetLinks = append(magnetLinks, magnetLinkDecoded) + } else { + fmt.Printf("WARN: link \"%s\" decoding resulted in non-magnet link: %s\n", href, magnetLinkDecoded) + } + }) + var audio []schema.Audio var year string var size []string diff --git a/utils/decoder.go b/utils/decoder.go new file mode 100644 index 0000000..db13a3b --- /dev/null +++ b/utils/decoder.go @@ -0,0 +1,28 @@ +package utils + +import ( + "encoding/base64" + "html" +) + +func DecodeAdLink(encodedStr string) (string, error) { + reversed := reverseString(encodedStr) + + decodedBytes, err := base64.StdEncoding.DecodeString(reversed) + if err != nil { + return "", err + } + + htmlUnescaped := html.UnescapeString(string(decodedBytes)) + + return htmlUnescaped, nil +} + +// Helper function to reverse a string +func reverseString(s string) string { + runes := []rune(s) + for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 { + runes[i], runes[j] = runes[j], runes[i] + } + return string(runes) +}