Skip to content
This repository has been archived by the owner on Nov 7, 2023. It is now read-only.

Commit

Permalink
refactor: option to disable bad ssl certificate error
Browse files Browse the repository at this point in the history
  • Loading branch information
zyrouge committed Nov 12, 2021
1 parent 6210112 commit a35ae29
Show file tree
Hide file tree
Showing 8 changed files with 71 additions and 4 deletions.
14 changes: 14 additions & 0 deletions lib/modules/app/state.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import 'dart:io';
import 'package:extensions/hetu/helpers/helpers.dart';
import '../database/database.dart';
import '../state/eventer.dart';

Expand All @@ -7,6 +8,19 @@ abstract class AppState {

static Future<void> initialize() async {
settings = ReactiveEventer<SettingsSchema>(SettingsBox.get());

settings.subscribe(
(final SettingsSchema current, final SettingsSchema previous) {
if (current.ignoreBadHttpCertificate !=
previous.ignoreBadHttpCertificate) {
HetuHttpClient.set(
HetuHttpClient(
ignoreSSLCertificate: current.ignoreBadHttpCertificate,
),
);
}
},
);
}

static bool get isDesktop =>
Expand Down
3 changes: 3 additions & 0 deletions lib/modules/database/schemas/settings/schema.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ const bool _mangaAutoFullscreen = true;
const int _animeTrackerWatchPercent = 80;
const bool _animeForceLandscape = true;
const bool _disableAnimations = false;
const bool _ignoreBadHttpCertificate = false;

@Entity()
class SettingsSchema {
Expand All @@ -41,6 +42,7 @@ class SettingsSchema {
final this.animeForceLandscape = _animeForceLandscape,
final this.disableAnimations = _disableAnimations,
final this.animeShortcuts_,
final this.ignoreBadHttpCertificate = _ignoreBadHttpCertificate,
});

int id = 0;
Expand All @@ -57,6 +59,7 @@ class SettingsSchema {
int animeTrackerWatchPercent;
bool animeForceLandscape;
bool disableAnimations;
bool ignoreBadHttpCertificate;

MangaDirections mangaReaderDirection;
String get mangaReaderDirection_ => mangaReaderDirection.name;
Expand Down
8 changes: 7 additions & 1 deletion lib/modules/extensions/extensions.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@ import 'dart:convert';
import 'dart:io';
import 'package:collection/collection.dart';
import 'package:extensions/extensions.dart';
import 'package:extensions/hetu/helpers/helpers.dart';
import 'package:http/http.dart' as http;
import 'package:path/path.dart' as path;
import '../../config/app.dart';
import '../../config/paths.dart';
import '../app/state.dart';
import '../helpers/logger.dart';

extension BaseExtensionUtils on BaseExtension {
Expand All @@ -21,7 +23,11 @@ abstract class ExtensionsManager {
static Map<String, MangaExtractor> mangas = <String, MangaExtractor>{};

static Future<void> initialize() async {
await ExtensionInternals.initialize();
await ExtensionInternals.initialize(
httpOptions: HetuHttpClient(
ignoreSSLCertificate: AppState.settings.value.ignoreBadHttpCertificate,
),
);

await _loadStore();
await _loadLocalExtensions();
Expand Down
1 change: 1 addition & 0 deletions lib/modules/translator/translations.dart
Original file line number Diff line number Diff line change
Expand Up @@ -156,4 +156,5 @@ abstract class TranslationSentences {
String goBack();
String previousEpisode();
String nextEpisode();
String ignoreBadHttpSslCertificates();
}
3 changes: 3 additions & 0 deletions lib/modules/translator/translations/en.dart
Original file line number Diff line number Diff line change
Expand Up @@ -456,4 +456,7 @@ class Sentences extends TranslationSentences {

@override
String nextEpisode() => 'Next episode';

@override
String ignoreBadHttpSslCertificates() => 'Ignore bad HTTP SSL certificates';
}
10 changes: 10 additions & 0 deletions lib/ui/pages/settings_page/setting_labels/developers.dart
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,16 @@ List<Widget> getSettingsDevelopers(
onChanged: (final bool val) async {
settings.disableAnimations = val;

await save();
},
),
MaterialSwitchTile(
title: Text(Translator.t.ignoreBadHttpSslCertificates()),
icon: const Icon(Icons.https),
value: settings.ignoreBadHttpCertificate,
onChanged: (final bool val) async {
settings.ignoreBadHttpCertificate = val;

await save();
},
),
Expand Down
6 changes: 5 additions & 1 deletion packages/extensions/lib/core/extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import './resolved.dart';
import '../../models/anime.dart';
import '../../models/base.dart';
import '../../models/manga.dart';
import '../hetu/helpers/http.dart';
import '../hetu/hetu.dart';
import '../utils/html_dom/html_dom.dart';

Expand All @@ -12,8 +13,11 @@ export './resolvable.dart';
export './resolved.dart';

abstract class ExtensionInternals {
static Future<void> initialize() async {
static Future<void> initialize({
required final HetuHttpClient httpOptions,
}) async {
await HtmlDOMManager.initialize();
HetuHttpClient.set(httpOptions);
}

static Future<void> dispose() async {
Expand Down
30 changes: 28 additions & 2 deletions packages/extensions/lib/hetu/helpers/http.dart
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import 'package:http/http.dart' as http;
import 'dart:io';
import 'package:http/http.dart';
import 'package:http/io_client.dart';
import '../../utils/http.dart';

const String httpDefinitions = '''
Expand All @@ -7,6 +9,30 @@ external fun httpUserAgent() -> str;
external fun ensureURL(url: str) -> str;
''';

late Client http;

class HetuHttpClient {
const HetuHttpClient({
required final this.ignoreSSLCertificate,
});

final bool ignoreSSLCertificate;

static late HetuHttpClient options;

static void set(final HetuHttpClient options) {
final HttpClient client = HttpClient();

if (options.ignoreSSLCertificate) {
client.badCertificateCallback =
(final X509Certificate cert, final String host, final int port) =>
true;
}

http = IOClient(client);
}
}

Future<Map<dynamic, dynamic>> fetch(
final Map<dynamic, dynamic> data,
) async {
Expand All @@ -15,7 +41,7 @@ Future<Map<dynamic, dynamic>> fetch(
(data['headers'] as Map<dynamic, dynamic>).cast<String, String>();
final String? body = data['body'] as String?;

final http.Response res;
final Response res;
switch (data['method']) {
case 'get':
res = await http
Expand Down

0 comments on commit a35ae29

Please sign in to comment.