You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.2 KiB
Dart
41 lines
1.2 KiB
Dart
import 'dart:convert';
|
|
import 'dart:io';
|
|
|
|
import 'package:http/http.dart' as http;
|
|
import 'package:http/io_client.dart';
|
|
import 'package:http/retry.dart' as retry;
|
|
|
|
import 'package:fluffychat/config/isrg_x1.dart';
|
|
import 'package:fluffychat/utils/platform_infos.dart';
|
|
|
|
/// Custom Client to add an additional certificate. This is for the isrg X1
|
|
/// certificate which is needed for LetsEncrypt certificates. It is shipped
|
|
/// on Android since OS version 7.1. As long as we support older versions we
|
|
/// still have to ship this certificate by ourself.
|
|
class CustomHttpClient {
|
|
static HttpClient customHttpClient(String? cert) {
|
|
final context = SecurityContext.defaultContext;
|
|
|
|
try {
|
|
if (cert != null) {
|
|
final bytes = utf8.encode(cert);
|
|
context.setTrustedCertificatesBytes(bytes);
|
|
}
|
|
} on TlsException catch (e) {
|
|
if (e.osError != null &&
|
|
e.osError!.message.contains('CERT_ALREADY_IN_HASH_TABLE')) {
|
|
} else {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
return HttpClient(context: context);
|
|
}
|
|
|
|
static http.Client createHTTPClient() => retry.RetryClient(
|
|
PlatformInfos.isAndroid
|
|
? IOClient(customHttpClient(ISRG_X1))
|
|
: http.Client(),
|
|
);
|
|
}
|