From 7eb6b58631b2eb29a1c060197ff15ae3db2fad9a Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 14 Aug 2023 18:14:17 +0300 Subject: [PATCH 01/10] Disable native auto-capturing of network logs --- example/ios/Podfile | 2 ++ example/ios/Podfile.lock | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/example/ios/Podfile b/example/ios/Podfile index 3a216ba41..36236acbe 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -31,6 +31,8 @@ target 'Runner' do use_frameworks! use_modular_headers! + pod 'Instabug', :podspec => 'https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec' + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 39dc35834..ecdfc5b92 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -8,17 +8,19 @@ PODS: DEPENDENCIES: - Flutter (from `Flutter`) + - Instabug (from `https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec`) - instabug_flutter (from `.symlinks/plugins/instabug_flutter/ios`) - OCMock (= 3.6) SPEC REPOS: trunk: - - Instabug - OCMock EXTERNAL SOURCES: Flutter: :path: Flutter + Instabug: + :podspec: https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec instabug_flutter: :path: ".symlinks/plugins/instabug_flutter/ios" @@ -28,6 +30,6 @@ SPEC CHECKSUMS: instabug_flutter: 4ac2812a7091470121b05722eadd76e450acca6d OCMock: 5ea90566be239f179ba766fd9fbae5885040b992 -PODFILE CHECKSUM: 637e800c0a0982493b68adb612d2dd60c15c8e5c +PODFILE CHECKSUM: 5fc85464b0c6b65f07a762e27aca369882901744 -COCOAPODS: 1.11.3 +COCOAPODS: 1.12.1 From eae0cef90123079fd0dfff39368c589731649ebc Mon Sep 17 00:00:00 2001 From: AbdElHamid Nasser Date: Sun, 10 Sep 2023 06:02:41 +0300 Subject: [PATCH 02/10] docs: Add docs to obfuscateLog Add docs to obfuscateLog in network_manager.dart --- lib/src/utils/network_manager.dart | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/src/utils/network_manager.dart b/lib/src/utils/network_manager.dart index e212fb0ed..6404fb9e7 100644 --- a/lib/src/utils/network_manager.dart +++ b/lib/src/utils/network_manager.dart @@ -14,6 +14,24 @@ class NetworkManager { _obfuscateLogCallback = callback; } + /// Registers a callback to selectively obfuscate network log data. + /// + /// Use this method to set a callback function that determines whether + /// specific network log data should undergo obfuscation before being recorded + /// or logged. + /// + /// The [callback] function takes a [NetworkData] object as its argument and + /// should return a modified [NetworkData] object with sensitive information + /// obfuscated. + /// + /// Example: + /// + /// ```dart + /// NetworkLogger.obfuscateLog((data) { + /// // Implement custom logic to obfuscate sensitive data here. + /// // Modify 'data' as needed and return it. + /// }); + /// ``` FutureOr obfuscateLog(NetworkData data) { if (_obfuscateLogCallback == null) { return data; From 2fcd8e1798f9b5ca698890505c4c30ab8797092b Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Sun, 10 Sep 2023 15:06:58 +0300 Subject: [PATCH 03/10] chore: move obfuscateLog docs to network logger --- lib/src/utils/network_manager.dart | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/lib/src/utils/network_manager.dart b/lib/src/utils/network_manager.dart index 6404fb9e7..e212fb0ed 100644 --- a/lib/src/utils/network_manager.dart +++ b/lib/src/utils/network_manager.dart @@ -14,24 +14,6 @@ class NetworkManager { _obfuscateLogCallback = callback; } - /// Registers a callback to selectively obfuscate network log data. - /// - /// Use this method to set a callback function that determines whether - /// specific network log data should undergo obfuscation before being recorded - /// or logged. - /// - /// The [callback] function takes a [NetworkData] object as its argument and - /// should return a modified [NetworkData] object with sensitive information - /// obfuscated. - /// - /// Example: - /// - /// ```dart - /// NetworkLogger.obfuscateLog((data) { - /// // Implement custom logic to obfuscate sensitive data here. - /// // Modify 'data' as needed and return it. - /// }); - /// ``` FutureOr obfuscateLog(NetworkData data) { if (_obfuscateLogCallback == null) { return data; From 96aca292b7df0dafac4da4152c3ce8cf58b40dee Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 4 Sep 2023 12:10:29 +0300 Subject: [PATCH 04/10] feat: add omitLog API --- lib/src/modules/network_logger.dart | 8 ++++++++ lib/src/utils/network_manager.dart | 15 +++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/src/modules/network_logger.dart b/lib/src/modules/network_logger.dart index 7220fd785..442599a12 100644 --- a/lib/src/modules/network_logger.dart +++ b/lib/src/modules/network_logger.dart @@ -43,7 +43,15 @@ class NetworkLogger { _manager.setObfuscateLogCallback(callback); } + static void omitLog(OmitLogCallback callback) { + _manager.setOmitLogCallback(callback); + } + Future networkLog(NetworkData data) async { + final omit = await _manager.omitLog(data); + + if (omit) return; + final obfuscated = await _manager.obfuscateLog(data); await _host.networkLog(obfuscated.toJson()); diff --git a/lib/src/utils/network_manager.dart b/lib/src/utils/network_manager.dart index e212fb0ed..7aaf8f563 100644 --- a/lib/src/utils/network_manager.dart +++ b/lib/src/utils/network_manager.dart @@ -3,17 +3,24 @@ import 'dart:async'; import 'package:instabug_flutter/instabug_flutter.dart'; typedef ObfuscateLogCallback = FutureOr Function(NetworkData data); +typedef OmitLogCallback = FutureOr Function(NetworkData data); /// Mockable [NetworkManager] responsible for processing network logs /// before they are sent to the native SDKs. class NetworkManager { ObfuscateLogCallback? _obfuscateLogCallback; + OmitLogCallback? _omitLogCallback; // ignore: use_setters_to_change_properties void setObfuscateLogCallback(ObfuscateLogCallback callback) { _obfuscateLogCallback = callback; } + // ignore: use_setters_to_change_properties + void setOmitLogCallback(OmitLogCallback callback) { + _omitLogCallback = callback; + } + FutureOr obfuscateLog(NetworkData data) { if (_obfuscateLogCallback == null) { return data; @@ -21,4 +28,12 @@ class NetworkManager { return _obfuscateLogCallback!(data); } + + FutureOr omitLog(NetworkData data) { + if (_omitLogCallback == null) { + return false; + } + + return _omitLogCallback!(data); + } } From fe3ea927cab986564b777a0bbc296e76e31a8460 Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 4 Sep 2023 12:32:45 +0300 Subject: [PATCH 05/10] test: add tests for network manager's omitLog --- test/network_manager_test.dart | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/test/network_manager_test.dart b/test/network_manager_test.dart index e47fa222b..31776c7ea 100644 --- a/test/network_manager_test.dart +++ b/test/network_manager_test.dart @@ -47,4 +47,33 @@ void main() { expect(result, equals(obfuscated)); }); + + test('[omitLog] should return false when no omit log callback', () async { + const expected = false; + + final result = await manager.omitLog(data); + + expect(result, equals(expected)); + }); + + test( + '[omitLog] should use omit callback when [setOmitLogCallback] has set a callback', + () async { + const omit = true; + final completer = Completer(); + FutureOr callback(NetworkData data) { + completer.complete(data); + return omit; + } + + manager.setOmitLogCallback(callback); + + final result = await manager.omitLog(data); + + expect(completer.isCompleted, isTrue); + + expect(await completer.future, data); + + expect(result, equals(omit)); + }); } From 26e847905ad21ea9133dcd80fcdc961cd078ab76 Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 4 Sep 2023 12:42:44 +0300 Subject: [PATCH 06/10] test: add tests for network logger's omitLog --- test/network_logger_test.dart | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/test/network_logger_test.dart b/test/network_logger_test.dart index 6b6c8d6e9..e5a04e236 100644 --- a/test/network_logger_test.dart +++ b/test/network_logger_test.dart @@ -51,6 +51,7 @@ void main() { test('[networkLog] should call 1 host method on iOS', () async { when(mBuildInfo.isAndroid).thenReturn(false); when(mManager.obfuscateLog(data)).thenReturn(data); + when(mManager.omitLog(data)).thenReturn(false); await logger.networkLog(data); @@ -66,6 +67,7 @@ void main() { test('[networkLog] should call 2 host methods on Android', () async { when(mBuildInfo.isAndroid).thenReturn(true); when(mManager.obfuscateLog(data)).thenReturn(data); + when(mManager.omitLog(data)).thenReturn(false); await logger.networkLog(data); @@ -83,6 +85,7 @@ void main() { when(mBuildInfo.isAndroid).thenReturn(true); when(mManager.obfuscateLog(data)).thenReturn(obfuscated); + when(mManager.omitLog(data)).thenReturn(false); await logger.networkLog(data); @@ -99,6 +102,28 @@ void main() { ).called(1); }); + test('[networkLog] should not log data if it should be omitted', () async { + const omit = true; + + when(mBuildInfo.isAndroid).thenReturn(true); + when(mManager.obfuscateLog(data)).thenReturn(data); + when(mManager.omitLog(data)).thenReturn(omit); + + await logger.networkLog(data); + + verify( + mManager.omitLog(data), + ).called(1); + + verifyNever( + mInstabugHost.networkLog(data.toJson()), + ); + + verifyNever( + mApmHost.networkLogAndroid(data.toJson()), + ); + }); + test('[obfuscateLog] should set obfuscation callback on manager', () async { FutureOr callback(NetworkData data) => data; @@ -108,4 +133,14 @@ void main() { mManager.setObfuscateLogCallback(callback), ).called(1); }); + + test('[omitLog] should set omission callback on manager', () async { + FutureOr callback(NetworkData data) => true; + + NetworkLogger.omitLog(callback); + + verify( + mManager.setOmitLogCallback(callback), + ).called(1); + }); } From e52196429ff0ee65e711cd4e8cba1c0c51896c3b Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Tue, 5 Sep 2023 16:20:42 +0300 Subject: [PATCH 07/10] chore: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 354f53d30..fae23dd81 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ ### Added - Add network logs obfuscation support using the new `NetworkLogger.obfuscateLog` API ([#380](https://github.com/Instabug/Instabug-Flutter/pull/380)). +- Add network logs omission support using the new `NetworkLogger.omitLog` API ([#382](https://github.com/Instabug/Instabug-Flutter/pull/382)). ### Changed From d98504462101655397fbd33e6eca3191784aae16 Mon Sep 17 00:00:00 2001 From: AbdElHamid Nasser Date: Sun, 10 Sep 2023 05:54:54 +0300 Subject: [PATCH 08/10] docs: Add docs to omitLog Add docs to omitLog in network_manager.dart --- lib/src/utils/network_manager.dart | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/src/utils/network_manager.dart b/lib/src/utils/network_manager.dart index 7aaf8f563..1703cc5be 100644 --- a/lib/src/utils/network_manager.dart +++ b/lib/src/utils/network_manager.dart @@ -29,6 +29,24 @@ class NetworkManager { return _obfuscateLogCallback!(data); } + /// Registers a callback to selectively omit network log data. + /// + /// Use this method to set a callback function that determines whether + /// specific network log data should be excluded before recording or displaying it. + /// + /// The [callback] function takes a [NetworkData] object as its argument and + /// should return a boolean value indicating whether the data should be omitted + /// (true) or included (false). + /// + /// Example: + /// + /// ```dart + /// NetworkLogger.omitLog((data) { + /// // Implement logic to decide whether to omit the data. + /// // For example, check if it contains a specific keyword and return false, otherwise return true. + /// return someCondition ? true : false; + /// }); + /// ``` FutureOr omitLog(NetworkData data) { if (_omitLogCallback == null) { return false; From 0ffbed092952108c1e99a19c632b6d0652a06d8e Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Sun, 10 Sep 2023 15:11:33 +0300 Subject: [PATCH 09/10] chore: move omitLog docs to network logger --- lib/src/modules/network_logger.dart | 18 ++++++++++++++++++ lib/src/utils/network_manager.dart | 18 ------------------ 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/src/modules/network_logger.dart b/lib/src/modules/network_logger.dart index 442599a12..83a88538c 100644 --- a/lib/src/modules/network_logger.dart +++ b/lib/src/modules/network_logger.dart @@ -43,6 +43,24 @@ class NetworkLogger { _manager.setObfuscateLogCallback(callback); } + /// Registers a callback to selectively omit network log data. + /// + /// Use this method to set a callback function that determines whether + /// specific network log data should be excluded before recording it. + /// + /// The [callback] function takes a [NetworkData] object as its argument and + /// should return a boolean value indicating whether the data should be omitted + /// (`true`) or included (`false`). + /// + /// Example: + /// + /// ```dart + /// NetworkLogger.omitLog((data) { + /// // Implement logic to decide whether to omit the data. + /// // For example, ignore requests to a specific URL: + /// return data.url.startsWith('https://example.com'); + /// }); + /// ``` static void omitLog(OmitLogCallback callback) { _manager.setOmitLogCallback(callback); } diff --git a/lib/src/utils/network_manager.dart b/lib/src/utils/network_manager.dart index 1703cc5be..7aaf8f563 100644 --- a/lib/src/utils/network_manager.dart +++ b/lib/src/utils/network_manager.dart @@ -29,24 +29,6 @@ class NetworkManager { return _obfuscateLogCallback!(data); } - /// Registers a callback to selectively omit network log data. - /// - /// Use this method to set a callback function that determines whether - /// specific network log data should be excluded before recording or displaying it. - /// - /// The [callback] function takes a [NetworkData] object as its argument and - /// should return a boolean value indicating whether the data should be omitted - /// (true) or included (false). - /// - /// Example: - /// - /// ```dart - /// NetworkLogger.omitLog((data) { - /// // Implement logic to decide whether to omit the data. - /// // For example, check if it contains a specific keyword and return false, otherwise return true. - /// return someCondition ? true : false; - /// }); - /// ``` FutureOr omitLog(NetworkData data) { if (_omitLogCallback == null) { return false; From 4fa98d86312b52a3a3c08e86444129e44a487196 Mon Sep 17 00:00:00 2001 From: Ahmed Mahmoud Date: Mon, 11 Sep 2023 16:17:46 +0300 Subject: [PATCH 10/10] chore: remove ios snapshot --- example/ios/Podfile | 2 -- example/ios/Podfile.lock | 8 +++----- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/example/ios/Podfile b/example/ios/Podfile index 36236acbe..3a216ba41 100644 --- a/example/ios/Podfile +++ b/example/ios/Podfile @@ -31,8 +31,6 @@ target 'Runner' do use_frameworks! use_modular_headers! - pod 'Instabug', :podspec => 'https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec' - flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index ecdfc5b92..39dc35834 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -8,19 +8,17 @@ PODS: DEPENDENCIES: - Flutter (from `Flutter`) - - Instabug (from `https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec`) - instabug_flutter (from `.symlinks/plugins/instabug_flutter/ios`) - OCMock (= 3.6) SPEC REPOS: trunk: + - Instabug - OCMock EXTERNAL SOURCES: Flutter: :path: Flutter - Instabug: - :podspec: https://ios-releases.instabug.com/custom/disable_automatic_capturing_of_network_logs/11.13.3/Instabug.podspec instabug_flutter: :path: ".symlinks/plugins/instabug_flutter/ios" @@ -30,6 +28,6 @@ SPEC CHECKSUMS: instabug_flutter: 4ac2812a7091470121b05722eadd76e450acca6d OCMock: 5ea90566be239f179ba766fd9fbae5885040b992 -PODFILE CHECKSUM: 5fc85464b0c6b65f07a762e27aca369882901744 +PODFILE CHECKSUM: 637e800c0a0982493b68adb612d2dd60c15c8e5c -COCOAPODS: 1.12.1 +COCOAPODS: 1.11.3