import 'dart:convert'; import 'package:html/dom.dart'; import 'package:http_interceptor/http_interceptor.dart'; import 'package:mangayomi/eval/model/m_bridge.dart'; import 'package:mangayomi/models/video.dart'; import 'package:html/parser.dart' as parser; import 'package:mangayomi/services/http/m_client.dart'; import 'package:mangayomi/utils/extensions/string_extensions.dart'; class GogoCdnExtractor { final InterceptedClient client = MClient.init(reqcopyWith: {'useDartHttpClient': true}); final JsonCodec json = const JsonCodec(); Future> videosFromUrl(String serverUrl) async { try { final response = await client.get(Uri.parse(serverUrl)); final document = response.body; Document parsedResponse = parser.parse(response.body); final iv = parsedResponse.querySelector('div.wrapper')!.attributes["class"]!.split('container-').last; final secretKey = parsedResponse.querySelector('body[class]')!.attributes["class"]!.split('container-').last; RegExp(r'container-(\d+)').firstMatch(document)?.group(1); final decryptionKey = RegExp(r'videocontent-(\d+)').firstMatch(document)?.group(1); final encryptAjaxParams = MBridge.cryptoHandler( RegExp(r'data-value="([^"]+)').firstMatch(document)?.group(1) ?? "", iv, secretKey, false, ).substringAfter("&"); final httpUrl = Uri.parse(serverUrl); final host = "https://${httpUrl.host}/"; final id = httpUrl.queryParameters['id']; final encryptedId = MBridge.cryptoHandler(id ?? "", iv, secretKey, true); final token = httpUrl.queryParameters['token']; final qualityPrefix = token != null ? "Gogostream - " : "Vidstreaming - "; final encryptAjaxUrl = "${host}encrypt-ajax.php?id=$encryptedId&$encryptAjaxParams&alias=$id"; final encryptAjaxResponse = await client.get(Uri.parse(encryptAjaxUrl), headers: {"X-Requested-With": "XMLHttpRequest"}); final jsonResponse = encryptAjaxResponse.body; final data = json.decode(jsonResponse)["data"]; final decryptedData = MBridge.cryptoHandler(data ?? "", iv, decryptionKey!, false); final videoList =