fix(player): nie wstrzykuj naszego skryptu na stronach rodziny DoodStream

Zgloszenie Jana: myvidplay i easyvidplayer na filmach dalej nie dzialaly, mimo
wczorajszych poprawek backendu.

Backend byl OK, sprawdzone na zywo: myvidplay resolwuje sie teraz na playmogo.com, a
easyvidplayer oddaje 410 i znika z listy. Problem byl PO STRONIE APLIKACJI.

Playmogo (tam laduja myvidplay i doply) zmienil zabezpieczenie. Nasza notatka mowila, ze
to niewidzialny Turnstile przechodzacy automatycznie. To juz NIEPRAWDA: ich strona wola
turnstile.render z size flexible, czyli WIDOCZNY widget, i to dopiero po kliknieciu w
przycisk play, a po weryfikacji przeladowuje strone i dopiero wtedy pojawia sie pass_md5.

Nasz wstrzykiwany skrypt psul dokladnie ten przeplyw. Widget siedzi w kontenerze o klasie
captcha-player z z-index 100000, czyli w tym, co nasz usuwacz nakladek traktuje jak
reklame, a nasze auto-klikniecie w plakat odpalalo brame, zanim widget zdazyl sie
wyrenderowac. Do tego patchujemy prototypy HTMLMediaElement, co Turnstile potrafi uznac
za podejrzane srodowisko (dokladnie ten sam objaw mielismy na vikingfile).

Straz, ktora dotad obejmowala tylko vikingfile, obejmuje teraz cala rodzine bramkowana
Cloudflare. Na stronie pliku i tak nie potrzebujemy ani wyciszania autoplay, ani ad-blocka.

Pulapka po drodze, warta zapamietania: komentarz z backtickami wewnatrz literalu
szablonowego INJECTED_JS przerywa ten literal i wywala parsowanie calego pliku.

Zweryfikowane: regex po rozwinieciu szablonu pomija playmogo/myvidplay/doply/vikingfile/
d0000d/ds2play, a zostawia dzialajacy skrypt na galaxyporn, sxyprn i eporner; podobnie
brzmiacy goodplay.com sie nie lapie. Typecheck wrocil do bazowych 11 bledow.

NIE mam na to dowodu z urzadzenia: przejscie Turnstile trzeba potwierdzic na telefonie.
This commit is contained in:
goon-foss 2026-08-27 09:10:16 +02:00
parent 365c97a1de
commit 38eee03902
2 changed files with 19 additions and 4 deletions

View file

@ -29,6 +29,14 @@ export type ChangelogEntry = {
};
export const CHANGELOG: ChangelogEntry[] = [
{
id: '2026-08-26c',
date: 'August 2026',
items: [
'Movie hosts that ask you to confirm you are human (myvidplay, doply and the DoodStream family) should work again. The app was running its own ad-blocking and autoplay tweaks on those pages, and the confirm box lives in exactly the kind of overlay that ad-blocking removes, so it either vanished or was rejected. Those pages are now left untouched.',
'Scenes whose file the host has quietly deleted no longer open to a black screen. The address still looked valid but the file was gone, so the app now checks it actually responds and moves on to another source instead.',
],
},
{
id: '2026-08-26b',
date: 'August 2026',

View file

@ -1277,13 +1277,20 @@ const INJECTED_JS = `
return vkSend.apply(this, arguments);
};
}
// Na hosterze z zabezpieczeniem Cloudflare KONCZYMY tutaj. Ponizej patchujemy
// prototypy HTMLMediaElement i usuwamy elementy uznane za reklamy, a Turnstile
// Na KAZDYM hosterze z brama Cloudflare KONCZYMY tutaj. Ponizej patchujemy prototypy
// HTMLMediaElement, klikamy w plakat i usuwamy elementy uznane za reklamy, a Turnstile
// potrafi uznac tak zmodyfikowane srodowisko za podejrzane i odrzucic weryfikacje
// (zgloszenie: "wywolanie cloudflare dziala, ale weryfikacja jest negatywna").
//
// Rodzina dooda doszla 2026-08-26. Playmogo (tam laduje myvidplay i doply) renderuje
// widget przez turnstile.render z size flexible, DOPIERO po kliknieciu w play,
// i trzyma go w kontenerze o klasie captcha-player z z-index 100000, czyli w tym,
// co nasz usuwacz nakladek traktuje jak reklame. Do tego nasze auto-klikniecie w plakat
// odpalalo ta brame, zanim widget zdazyl sie wyrenderowac.
//
// Na stronie pliku i tak nie potrzebujemy ani wyciszania autoplay, ani ad-blocka,
// a bezposredni link i tak przechwytujemy podsluchem POST-a powyzej.
if (/vik[i1]ngfile\\./i.test(location.hostname)) return;
// a bezposredni link przechwytujemy podsluchem powyzej.
if (/vik[i1]ngfile\\.|playmogo\\.|dood|d0000d|dooood|do0od|do7go|ds2play|doply\\.|myvidplay\\./i.test(location.hostname)) return;
} catch (e) {}
// -- 0a. Mute autoplay until the FIRST user gesture (kills the unmuted-audio flash