This commit is contained in:
kodjomoustapha 2024-01-06 12:52:18 +01:00
parent d5cfd1f25f
commit 64b1f91dce
17 changed files with 146 additions and 629 deletions

View file

@ -18,7 +18,7 @@ import 'package:mangayomi/eval/model/m_manga.dart';
import 'package:mangayomi/eval/model/m_provider.dart';
import 'package:mangayomi/models/video.dart';
import 'package:mangayomi/modules/browse/extension/providers/extension_preferences_providers.dart';
import 'package:mangayomi/services/eval_js.dart';
import 'package:mangayomi/services/boa_js.dart';
class $MProvider extends MProvider with $Bridge<MProvider> {
static $MProvider $construct(

View file

@ -33,7 +33,7 @@ import 'package:mangayomi/services/anime_extractors/streamwish_extractor.dart';
import 'package:mangayomi/services/anime_extractors/vidbom_extractor.dart';
import 'package:mangayomi/services/anime_extractors/voe_extractor.dart';
import 'package:mangayomi/services/anime_extractors/your_upload_extractor.dart';
import 'package:mangayomi/services/http_service/cloudflare/cloudflare_bypass.dart';
import 'package:mangayomi/services/cloudflare/cloudflare.dart';
import 'package:mangayomi/utils/constant.dart';
import 'package:mangayomi/utils/cryptoaes/crypto_aes.dart';
import 'package:mangayomi/utils/cryptoaes/deobfuscator.dart';
@ -434,7 +434,7 @@ class MBridge {
if (res.statusCode == 403 && (source?.hasCloudflare ?? false)) {
log("Http request: ${res.statusCode}, Cloudflare");
return await cloudflareBypass(
url: url, sourceId: source!.id.toString(), method: 0);
url: url, sourceId: source!.id.toString());
} else if (res.statusCode == 200) {
log("Http request: ${res.statusCode}");
return await res.stream.bytesToString();

View file

@ -6,12 +6,8 @@ import 'package:desktop_webview_window/desktop_webview_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/providers/l10n_providers.dart';
import 'package:mangayomi/services/http_service/cloudflare/cookie.dart';
import 'package:mangayomi/services/http_service/cloudflare/providers/cookie_providers.dart';
import 'package:mangayomi/utils/constant.dart';
import 'package:mangayomi/services/cloudflare/cookie.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:share_plus/share_plus.dart';
import 'package:path/path.dart' as p;
@ -57,7 +53,6 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
);
webview!
..setBrightness(Brightness.dark)
..setApplicationNameForUserAgent(defaultUserAgent)
..launch(widget.url)
..onClose.whenComplete(() {
Navigator.pop(context);
@ -70,7 +65,6 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
late String _title = widget.title;
bool _canGoback = false;
bool _canGoForward = false;
@override
Widget build(BuildContext context) {
final l10n = l10nLocalizations(context);
@ -220,9 +214,10 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
},
onUpdateVisitedHistory:
(controller, url, isReload) async {
await ref.watch(
setCookieProvider(widget.sourceId, url.toString())
.future);
final ua = await controller.evaluateJavascript(
source: "navigator.userAgent") ??
"";
await addCookie(widget.sourceId, url.toString(), ua);
final canGoback = await controller.canGoBack();
final canGoForward = await controller.canGoForward();
final title = await controller.getTitle();
@ -233,10 +228,6 @@ class _MangaWebViewState extends ConsumerState<MangaWebView> {
_canGoForward = canGoForward;
});
},
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
userAgent: isar.settings.getSync(227)!.userAgent!),
),
initialUrlRequest: URLRequest(url: Uri.parse(widget.url)),
),
),
@ -259,9 +250,12 @@ Future<String?> decodeHtml(Webview webview, {String? sourceId}) async {
try {
final html = await webview
.evaluateJavaScript("window.document.documentElement.outerHTML;");
final cookie = await webview.evaluateJavaScript("window.document.cookie;");
if (cookie != null && sourceId != null) {
setCookieBA(cookie, sourceId);
final ua = await webview.evaluateJavaScript("navigator.userAgent") ?? "";
final newCookie =
await webview.evaluateJavaScript("window.document.cookie;");
if (newCookie != null && sourceId != null) {
CookieState(idSource: sourceId)
.set(jsonDecode(newCookie), ua.isNotEmpty ? jsonDecode(ua) : "");
}
final res = jsonDecode(html!) as String;

View file

@ -1,4 +1,4 @@
import 'package:mangayomi/messages/rust_js.pb.dart' as rust_js;
import 'package:mangayomi/messages/boa_js.pb.dart' as rust_js;
import 'package:rinf/rinf.dart';
Future<String> evalJs(String script) async {

View file

@ -0,0 +1,73 @@
import 'dart:io';
import 'package:desktop_webview_window/desktop_webview_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:mangayomi/modules/webview/webview.dart';
import 'package:mangayomi/services/cloudflare/cookie.dart';
Future<String> cloudflareBypass(
{required String url, required String sourceId}) async {
String ua = "";
bool isOk = false;
String? html;
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
final webview = await WebviewWindow.create(
configuration: CreateConfiguration(
windowHeight: 500,
windowWidth: 500,
userDataFolderWindows: await getWebViewPath(),
),
);
webview
..setBrightness(Brightness.dark)
..launch(url);
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
html = await decodeHtml(webview, sourceId: sourceId);
if (html == null ||
html!.contains("Just a moment") ||
html!.contains("challenges.cloudflare.com")) {
return true;
}
return false;
});
isOk = true;
webview.close();
} else {
HeadlessInAppWebView? headlessWebView;
headlessWebView = HeadlessInAppWebView(
onLoadStop: (controller, u) async {
html = await controller.getHtml();
await Future.doWhile(() async {
if (html == null ||
html!.contains("Just a moment") ||
html!.contains("challenges.cloudflare.com")) {
html = await controller.getHtml();
return true;
}
return false;
});
html = await controller.getHtml();
ua = await controller.evaluateJavascript(
source: "navigator.userAgent") ??
"";
isOk = true;
headlessWebView!.dispose();
},
initialUrlRequest: URLRequest(url: Uri.parse(url)),
);
headlessWebView.run();
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (isOk == true) {
return false;
}
return true;
});
await addCookie(sourceId, url, ua);
}
return html!;
}

View file

@ -0,0 +1,49 @@
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart'
as flutter_inappwebview;
class CookieState {
String? idSource;
CookieState({required String idSource});
String get() {
final cookiesList = isar.settings.getSync(227)!.cookiesList ?? [];
return cookiesList
.firstWhere(
(element) => element.idSource == idSource,
orElse: () => Cookie(cookie: ""),
)
.cookie!;
}
void set(String newCookie, String ua) {
final settings = isar.settings.getSync(227);
List<Cookie>? cookieList = [];
for (var cookie in settings!.cookiesList ?? []) {
if (cookie.idSource != idSource) {
cookieList.add(cookie);
}
}
cookieList.add(Cookie()
..idSource = idSource
..cookie = newCookie);
isar.writeTxnSync(() => isar.settings.putSync(settings
..cookiesList = cookieList
..userAgent = ua));
}
}
Future<void> addCookie(String sourceId, String url, String ua) async {
flutter_inappwebview.CookieManager cookieManager =
flutter_inappwebview.CookieManager.instance();
final cookie = (await cookieManager.getCookie(
url: Uri.parse(url), name: "cf_clearance"));
if (cookie != null) {
final newCookie = "${cookie.name}=${cookie.value}";
CookieState(idSource: sourceId).set(newCookie, ua);
}
}

View file

@ -1,113 +0,0 @@
import 'dart:convert';
import 'dart:io';
import 'package:desktop_webview_window/desktop_webview_window.dart';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/models/source.dart';
import 'package:mangayomi/modules/webview/webview.dart';
import 'package:mangayomi/services/http_service/cloudflare/cookie.dart';
import 'package:mangayomi/utils/constant.dart';
Future<String> cloudflareBypass(
{required String url,
required String sourceId,
required int method}) async {
final ua = isar.settings.getSync(227)!.userAgent!;
bool isOk = false;
String? html;
if (Platform.isWindows || Platform.isLinux || Platform.isMacOS) {
final webview = await WebviewWindow.create(
configuration: CreateConfiguration(
windowHeight: 500,
windowWidth: 500,
userDataFolderWindows: await getWebViewPath(),
),
);
webview
..setBrightness(Brightness.dark)
..setApplicationNameForUserAgent(ua)
..launch(url);
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
html = await decodeHtml(webview, sourceId: sourceId);
if (html == null ||
html!.contains("Just a moment") ||
html!.contains("challenges.cloudflare.com")) {
return true;
}
return false;
});
isOk = true;
webview.close();
} else {
HeadlessInAppWebView? headlessWebView;
headlessWebView = HeadlessInAppWebView(
onLoadStop: (controller, u) async {
html = await controller.evaluateJavascript(
source:
"window.document.getElementsByTagName('html')[0].outerHTML;");
await Future.doWhile(() async {
if (html == null ||
html!.contains("Just a moment") ||
html!.contains("challenges.cloudflare.com")) {
html = await controller.evaluateJavascript(
source:
"window.document.getElementsByTagName('html')[0].outerHTML;");
return true;
}
return false;
});
html = await controller.evaluateJavascript(
source:
"window.document.getElementsByTagName('html')[0].outerHTML;");
isOk = true;
headlessWebView!.dispose();
},
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
userAgent: defaultUserAgent,
),
),
initialUrlRequest: URLRequest(
headers: headers(sourceId: sourceId),
method: method == 0
? 'GET'
: method == 1
? 'POST'
: method == 2
? 'PUT'
: 'DELETE',
url: Uri.parse(url),
),
);
headlessWebView.run();
await Future.doWhile(() async {
await Future.delayed(const Duration(seconds: 1));
if (isOk == true) {
return false;
}
return true;
});
await setCookieB(sourceId, url);
}
return html!;
}
Map<String, String> headers({required String sourceId}) {
final source = isar.sources.getSync(int.parse(sourceId))!;
if (source.headers!.isEmpty) {
return {};
}
Map<String, String> newHeaders = {};
final headers = jsonDecode(source.headers!) as Map;
newHeaders =
headers.map((key, value) => MapEntry(key.toString(), value.toString()));
return newHeaders;
}

View file

@ -1,21 +0,0 @@
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:mangayomi/services/http_service/cloudflare/providers/cookie_providers.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'cookie.g.dart';
@riverpod
Future setCookie(SetCookieRef ref, String sourceId, String url) async {
CookieManager cookie = CookieManager.instance();
final cookies = await cookie.getCookies(url: Uri.parse(url.toString()));
final newCookie = cookies.map((e) => "${e.name}=${e.value}").join("; ");
setCookieBA(newCookie, sourceId);
}
Future setCookieB(String sourceId, String url) async {
CookieManager cookie = CookieManager.instance();
final cookies = await cookie.getCookies(url: Uri.parse(url.toString()));
final newCookie = cookies.map((e) => "${e.name}=${e.value}").join("; ");
setCookieBA(newCookie, sourceId);
}

View file

@ -1,174 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'cookie.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$setCookieHash() => r'd10ac9b2e839e2a5c369900c65c557723c8f2d37';
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
/// See also [setCookie].
@ProviderFor(setCookie)
const setCookieProvider = SetCookieFamily();
/// See also [setCookie].
class SetCookieFamily extends Family<AsyncValue> {
/// See also [setCookie].
const SetCookieFamily();
/// See also [setCookie].
SetCookieProvider call(
String sourceId,
String url,
) {
return SetCookieProvider(
sourceId,
url,
);
}
@override
SetCookieProvider getProviderOverride(
covariant SetCookieProvider provider,
) {
return call(
provider.sourceId,
provider.url,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'setCookieProvider';
}
/// See also [setCookie].
class SetCookieProvider extends AutoDisposeFutureProvider<Object?> {
/// See also [setCookie].
SetCookieProvider(
String sourceId,
String url,
) : this._internal(
(ref) => setCookie(
ref as SetCookieRef,
sourceId,
url,
),
from: setCookieProvider,
name: r'setCookieProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$setCookieHash,
dependencies: SetCookieFamily._dependencies,
allTransitiveDependencies: SetCookieFamily._allTransitiveDependencies,
sourceId: sourceId,
url: url,
);
SetCookieProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.sourceId,
required this.url,
}) : super.internal();
final String sourceId;
final String url;
@override
Override overrideWith(
FutureOr<Object?> Function(SetCookieRef provider) create,
) {
return ProviderOverride(
origin: this,
override: SetCookieProvider._internal(
(ref) => create(ref as SetCookieRef),
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
sourceId: sourceId,
url: url,
),
);
}
@override
AutoDisposeFutureProviderElement<Object?> createElement() {
return _SetCookieProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is SetCookieProvider &&
other.sourceId == sourceId &&
other.url == url;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, sourceId.hashCode);
hash = _SystemHash.combine(hash, url.hashCode);
return _SystemHash.finish(hash);
}
}
mixin SetCookieRef on AutoDisposeFutureProviderRef<Object?> {
/// The parameter `sourceId` of this provider.
String get sourceId;
/// The parameter `url` of this provider.
String get url;
}
class _SetCookieProviderElement
extends AutoDisposeFutureProviderElement<Object?> with SetCookieRef {
_SetCookieProviderElement(super.provider);
@override
String get sourceId => (origin as SetCookieProvider).sourceId;
@override
String get url => (origin as SetCookieProvider).url;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member

View file

@ -1,63 +0,0 @@
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'cookie_providers.g.dart';
@riverpod
class CookieState extends _$CookieState {
@override
String build(String idSource) {
final cookiesList = isar.settings.getSync(227)!.cookiesList ?? [];
final cookieList =
cookiesList.where((element) => element.idSource == idSource).toList();
String cookie = "";
if (cookieList.isNotEmpty) {
cookie = cookieList.first.cookie!.toString();
}
return cookie;
}
void setCookie(String newCookie) {
final settings = isar.settings.getSync(227);
List<Cookie>? cookieList = [];
for (var cookie in settings!.cookiesList ?? []) {
if (cookie.idSource != idSource) {
cookieList.add(cookie);
}
}
cookieList.add(Cookie()
..idSource = idSource
..cookie = newCookie);
isar.writeTxnSync(
() => isar.settings.putSync(settings..cookiesList = cookieList));
}
}
void setCookieBA(String newCookie, String idSource) {
final settings = isar.settings.getSync(227);
List<Cookie>? cookieList = [];
for (var cookie in settings!.cookiesList ?? []) {
if (cookie.idSource != idSource) {
cookieList.add(cookie);
}
}
cookieList.add(Cookie()
..idSource = idSource
..cookie = newCookie);
isar.writeTxnSync(
() => isar.settings.putSync(settings..cookiesList = cookieList));
}
String getCookie(String idSource) {
final cookiesList = isar.settings.getSync(227)!.cookiesList ?? [];
final cookieList =
cookiesList.where((element) => element.idSource == idSource).toList();
String cookie = "";
if (cookieList.isNotEmpty) {
cookie = cookieList.first.cookie!.toString();
}
return cookie;
}

View file

@ -1,172 +0,0 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'cookie_providers.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$cookieStateHash() => r'42286f51989b6f65eed9787ca2390a96854395a8';
/// Copied from Dart SDK
class _SystemHash {
_SystemHash._();
static int combine(int hash, int value) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + value);
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x0007ffff & hash) << 10));
return hash ^ (hash >> 6);
}
static int finish(int hash) {
// ignore: parameter_assignments
hash = 0x1fffffff & (hash + ((0x03ffffff & hash) << 3));
// ignore: parameter_assignments
hash = hash ^ (hash >> 11);
return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
}
}
abstract class _$CookieState extends BuildlessAutoDisposeNotifier<String> {
late final String idSource;
String build(
String idSource,
);
}
/// See also [CookieState].
@ProviderFor(CookieState)
const cookieStateProvider = CookieStateFamily();
/// See also [CookieState].
class CookieStateFamily extends Family<String> {
/// See also [CookieState].
const CookieStateFamily();
/// See also [CookieState].
CookieStateProvider call(
String idSource,
) {
return CookieStateProvider(
idSource,
);
}
@override
CookieStateProvider getProviderOverride(
covariant CookieStateProvider provider,
) {
return call(
provider.idSource,
);
}
static const Iterable<ProviderOrFamily>? _dependencies = null;
@override
Iterable<ProviderOrFamily>? get dependencies => _dependencies;
static const Iterable<ProviderOrFamily>? _allTransitiveDependencies = null;
@override
Iterable<ProviderOrFamily>? get allTransitiveDependencies =>
_allTransitiveDependencies;
@override
String? get name => r'cookieStateProvider';
}
/// See also [CookieState].
class CookieStateProvider
extends AutoDisposeNotifierProviderImpl<CookieState, String> {
/// See also [CookieState].
CookieStateProvider(
String idSource,
) : this._internal(
() => CookieState()..idSource = idSource,
from: cookieStateProvider,
name: r'cookieStateProvider',
debugGetCreateSourceHash:
const bool.fromEnvironment('dart.vm.product')
? null
: _$cookieStateHash,
dependencies: CookieStateFamily._dependencies,
allTransitiveDependencies:
CookieStateFamily._allTransitiveDependencies,
idSource: idSource,
);
CookieStateProvider._internal(
super._createNotifier, {
required super.name,
required super.dependencies,
required super.allTransitiveDependencies,
required super.debugGetCreateSourceHash,
required super.from,
required this.idSource,
}) : super.internal();
final String idSource;
@override
String runNotifierBuild(
covariant CookieState notifier,
) {
return notifier.build(
idSource,
);
}
@override
Override overrideWith(CookieState Function() create) {
return ProviderOverride(
origin: this,
override: CookieStateProvider._internal(
() => create()..idSource = idSource,
from: from,
name: null,
dependencies: null,
allTransitiveDependencies: null,
debugGetCreateSourceHash: null,
idSource: idSource,
),
);
}
@override
AutoDisposeNotifierProviderElement<CookieState, String> createElement() {
return _CookieStateProviderElement(this);
}
@override
bool operator ==(Object other) {
return other is CookieStateProvider && other.idSource == idSource;
}
@override
int get hashCode {
var hash = _SystemHash.combine(0, runtimeType.hashCode);
hash = _SystemHash.combine(hash, idSource.hashCode);
return _SystemHash.finish(hash);
}
}
mixin CookieStateRef on AutoDisposeNotifierProviderRef<String> {
/// The parameter `idSource` of this provider.
String get idSource;
}
class _CookieStateProviderElement
extends AutoDisposeNotifierProviderElement<CookieState, String>
with CookieStateRef {
_CookieStateProviderElement(super.provider);
@override
String get idSource => (origin as CookieStateProvider).idSource;
}
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member

View file

@ -1,55 +0,0 @@
// import 'package:html/dom.dart';
// import 'package:mangayomi/services/http_service/cloudflare/cloudflare_bypass.dart';
// import 'package:http/http.dart' as http;
// import 'package:mangayomi/sources/utils/utils.dart';
// import 'package:mangayomi/utils/headers.dart';
// import 'package:riverpod_annotation/riverpod_annotation.dart';
// part 'http_service.g.dart';
// @riverpod
// Future<dynamic> httpGet(HttpGetRef ref,
// {required String url,
// required String source,
// required String lang,
// required bool resDom,
// Map<String, String>? headers,
// bool useUserAgent = false}) async {
// bool hasCloudflaree = hasCloudflare(source);
// if (resDom) {
// Document? dom;
// if (hasCloudflaree) {
// dom = await ref.read(cloudflareBypassDomProvider(
// url: url, source: source, useUserAgent: useUserAgent)
// .future);
// } else {
// dom = await httpResToDom(
// url: url,
// headers: headers ??
// ref.watch(headersProvider(source: source, lang: lang)));
// }
// return dom;
// } else {
// String? resHtml;
// if (hasCloudflaree) {
// resHtml = await ref.read(cloudflareBypassHtmlProvider(
// url: url, source: source, useUserAgent: useUserAgent)
// .future);
// } else {
// try {
// final response = await http.get(Uri.parse(url),
// headers: headers ??
// ref.watch(headersProvider(source: source, lang: lang)));
// resHtml = response.body;
// } catch (e) {
// rethrow;
// }
// }
// return resHtml;
// }
// }
// Future<Document> httpResToDom(
// {required String url, required Map<String, String>? headers}) async {
// final response = await http.get(Uri.parse(url), headers: headers);
// return Document.html(response.body);
// }

View file

@ -1,8 +1,7 @@
import 'dart:convert';
import 'package:mangayomi/main.dart';
import 'package:mangayomi/models/settings.dart';
import 'package:mangayomi/services/http_service/cloudflare/providers/cookie_providers.dart';
import 'package:mangayomi/services/cloudflare/cookie.dart';
import 'package:mangayomi/sources/utils/utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'headers.g.dart';
@ -25,7 +24,7 @@ Map<String, String> headers(HeadersRef ref,
if (sourceM.hasCloudflare!) {
final userAgent = isar.settings.getSync(227)!.userAgent!;
final cookie = ref.watch(cookieStateProvider(sourceM.id.toString()));
final cookie = CookieState(idSource: sourceM.id.toString()).get();
newHeaders.addAll({'User-Agent': userAgent, "Cookie": cookie});
}

View file

@ -1,5 +1,5 @@
syntax = "proto3";
package rust_js;
package boa_js;
message ReadRequest {
string code_script = 1;

View file

@ -2,8 +2,8 @@ use crate::bridge::{RustOperation, RustRequest, RustResponse};
use boa_engine::{Context, Source};
use prost::Message;
pub async fn eval_js_sync(rust_request: RustRequest) -> RustResponse {
use crate::messages::rust_js::{ReadRequest, ReadResponse};
pub async fn eval_js(rust_request: RustRequest) -> RustResponse {
use crate::messages::boa_js::{ReadRequest, ReadResponse};
match rust_request.operation {
RustOperation::Create => RustResponse::default(),

View file

@ -6,7 +6,7 @@ mod bridge;
mod imagecrop;
mod messages;
mod with_request;
mod js;
mod boa_js;
/// This `hub` crate is the entry point for the Rust logic.
/// Always use non-blocking async functions such as `tokio::fs::File::open`.

View file

@ -4,7 +4,7 @@
use crate::bridge::{RustRequestUnique, RustResponse, RustResponseUnique};
use crate::imagecrop;
use crate::js;
use crate::boa_js;
use crate::messages;
pub async fn handle_request(request_unique: RustRequestUnique) -> RustResponseUnique {
@ -18,8 +18,8 @@ pub async fn handle_request(request_unique: RustRequestUnique) -> RustResponseUn
messages::crop_borders::ID => {
imagecrop::start_croping(rust_request).await // ADD THIS BLOCK
}
messages::rust_js::ID => {
js::eval_js_sync(rust_request).await // ADD THIS BLOCK
messages::boa_js::ID => {
boa_js::eval_js(rust_request).await // ADD THIS BLOCK
}
_ => RustResponse::default(),
};