Skip to content

Commit

Permalink
#333 - Added code to configure http/dio with client certs (mTLS)
Browse files Browse the repository at this point in the history
  • Loading branch information
Clon1998 committed Mar 31, 2024
1 parent 09e8f53 commit 26cc6d3
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 1 deletion.
9 changes: 8 additions & 1 deletion common/lib/network/dio_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,14 @@ HttpClient httpClient(HttpClientRef ref, String machineUUID, ClientType clientTy
}

HttpClient httpClientFromBaseOptions(BaseOptions options) {
final client = HttpClient()
var context = SecurityContext.defaultContext;

if (options.useTlsClientCertificate) {
context.useCertificateChainBytes(options.tlsClientCertificate!);
context.usePrivateKeyBytes(options.tlsClientPrivateKey!);
}

final client = HttpClient(context: context)
..idleTimeout = const Duration(seconds: 3)
..connectionTimeout = options.connectTimeout;

Expand Down
35 changes: 35 additions & 0 deletions common/lib/util/extensions/dio_options_extension.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
* All rights reserved.
*/

import 'dart:typed_data';

import 'package:common/network/json_rpc_client.dart';
import 'package:dio/dio.dart';
import 'package:hashlib/hashlib.dart';
Expand All @@ -11,6 +13,9 @@ const String _kMrClientType = 'mrClientType';
const String _kMrTrustUntrusted = 'mrTrustUntrusted';
const String _kMrPinnedCertificate = 'mrPinnedCertHash';

const String _kMrmTlsClientCertificate = 'mrTlsClientCertificate';
const String _kMrmTlsClientPrivateKey = 'mrTlsClientPrivateKey';

extension MobilerakerDioBaseOptions on BaseOptions {
set clientType(ClientType clientType) => extra[_kMrClientType] = clientType;

Expand All @@ -23,6 +28,16 @@ extension MobilerakerDioBaseOptions on BaseOptions {
set pinnedCertificateFingerPrint(HashDigest? value) => extra[_kMrPinnedCertificate] = value;

HashDigest? get pinnedCertificateFingerPrint => (extra[_kMrPinnedCertificate] as HashDigest?);

set tlsClientPrivateKey(Uint8List? value) => extra[_kMrmTlsClientPrivateKey] = value;

Uint8List? get tlsClientCertificate => (extra[_kMrmTlsClientCertificate] as Uint8List?);

set tlsClientCertificate(Uint8List? value) => extra[_kMrmTlsClientCertificate] = value;

Uint8List? get tlsClientPrivateKey => (extra[_kMrmTlsClientPrivateKey] as Uint8List?);

bool get useTlsClientCertificate => tlsClientCertificate != null && tlsClientPrivateKey != null;
}

extension MobilerakerDioOptions on Options {
Expand All @@ -37,6 +52,16 @@ extension MobilerakerDioOptions on Options {
set pinnedCertificateFingerPrint(HashDigest? value) => extra?[_kMrPinnedCertificate] = value;

HashDigest? get pinnedCertificateFingerPrint => (extra?[_kMrPinnedCertificate] as HashDigest?);

set tlsClientPrivateKey(Uint8List? value) => extra[_kMrmTlsClientPrivateKey] = value;

Uint8List? get tlsClientCertificate => (extra[_kMrmTlsClientCertificate] as Uint8List?);

set tlsClientCertificate(Uint8List? value) => extra[_kMrmTlsClientCertificate] = value;

Uint8List? get tlsClientPrivateKey => (extra[_kMrmTlsClientPrivateKey] as Uint8List?);

bool get useTlsClientCertificate => tlsClientCertificate != null && tlsClientPrivateKey != null;
}

extension MobilerakerDioRequestOptions on RequestOptions {
Expand All @@ -51,4 +76,14 @@ extension MobilerakerDioRequestOptions on RequestOptions {
set pinnedCertificateFingerPrint(HashDigest? value) => extra[_kMrPinnedCertificate] = value;

HashDigest? get pinnedCertificateFingerPrint => (extra[_kMrPinnedCertificate] as HashDigest?);

set tlsClientPrivateKey(Uint8List? value) => extra[_kMrmTlsClientPrivateKey] = value;

Uint8List? get tlsClientCertificate => (extra[_kMrmTlsClientCertificate] as Uint8List?);

set tlsClientCertificate(Uint8List? value) => extra[_kMrmTlsClientCertificate] = value;

Uint8List? get tlsClientPrivateKey => (extra[_kMrmTlsClientPrivateKey] as Uint8List?);

bool get useTlsClientCertificate => tlsClientCertificate != null && tlsClientPrivateKey != null;
}

0 comments on commit 26cc6d3

Please sign in to comment.