Skip to content

Commit fb98b7d

Browse files
Merge pull request #656 from threefoldtech/development_cleanup_kyc
integrate idenfy
2 parents 37043c7 + 9766046 commit fb98b7d

21 files changed

Lines changed: 772 additions & 602 deletions

app/ios/Podfile

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,19 @@ post_install do |installer|
3838
installer.pods_project.targets.each do |target|
3939
flutter_additional_ios_build_settings(target)
4040
end
41-
end
41+
installer.pods_project.targets.each do |target|
42+
if target.name == "lottie-ios"
43+
target.build_configurations.each do |config|
44+
config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
45+
end
46+
end
47+
if target.name == "idenfy_sdk_flutter"
48+
target.build_configurations.each do |config|
49+
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'
50+
config.build_settings['ENABLE_BITCODE'] = 'NO'
51+
end
52+
end
53+
flutter_additional_ios_build_settings(target)
54+
end
55+
56+
end

app/ios/Podfile.lock

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
PODS:
2+
- audio_session (0.0.1):
3+
- Flutter
24
- device_info_plus (0.0.1):
35
- Flutter
46
- Flutter (1.0.0)
@@ -11,8 +13,16 @@ PODS:
1113
- OrderedSet (~> 5.0)
1214
- flutter_pkid (0.0.1):
1315
- Flutter
16+
- idenfy_sdk_flutter (2.5.3):
17+
- Flutter
18+
- iDenfySDK/iDenfyLiveness (= 8.4.5)
19+
- iDenfySDK/iDenfyLiveness (8.4.5):
20+
- lottie-ios (= 4.4.3)
21+
- just_audio (0.0.1):
22+
- Flutter
1423
- local_auth (0.0.1):
1524
- Flutter
25+
- lottie-ios (4.4.3)
1626
- MTBBarcodeScanner (5.0.11)
1727
- open_filex (0.0.2):
1828
- Flutter
@@ -32,26 +42,33 @@ PODS:
3242
- shared_preferences_foundation (0.0.1):
3343
- Flutter
3444
- FlutterMacOS
35-
- ShuftiPro-Onsite (1.2.9)
36-
- shuftipro_onsite_sdk (1.0.2):
37-
- Flutter
38-
- ShuftiPro-Onsite (~> 1.2.0)
3945
- smart_auth (0.0.1):
4046
- Flutter
41-
- sodium_libs (2.2.0):
47+
- sodium_libs (2.2.1):
48+
- Flutter
49+
- sqflite (0.0.3):
4250
- Flutter
51+
- FlutterMacOS
4352
- uni_links (0.0.1):
4453
- Flutter
4554
- url_launcher_ios (0.0.1):
4655
- Flutter
56+
- video_player_avfoundation (0.0.1):
57+
- Flutter
58+
- FlutterMacOS
59+
- wakelock_plus (0.0.1):
60+
- Flutter
4761
- webview_flutter_wkwebview (0.0.1):
4862
- Flutter
4963

5064
DEPENDENCIES:
65+
- audio_session (from `.symlinks/plugins/audio_session/ios`)
5166
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
5267
- Flutter (from `Flutter`)
5368
- flutter_inappwebview (from `.symlinks/plugins/flutter_inappwebview/ios`)
5469
- flutter_pkid (from `.symlinks/plugins/flutter_pkid/ios`)
70+
- idenfy_sdk_flutter (from `.symlinks/plugins/idenfy_sdk_flutter/ios`)
71+
- just_audio (from `.symlinks/plugins/just_audio/ios`)
5572
- local_auth (from `.symlinks/plugins/local_auth/ios`)
5673
- open_filex (from `.symlinks/plugins/open_filex/ios`)
5774
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
@@ -60,20 +77,25 @@ DEPENDENCIES:
6077
- qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`)
6178
- screen_brightness_ios (from `.symlinks/plugins/screen_brightness_ios/ios`)
6279
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
63-
- shuftipro_onsite_sdk (from `.symlinks/plugins/shuftipro_onsite_sdk/ios`)
6480
- smart_auth (from `.symlinks/plugins/smart_auth/ios`)
6581
- sodium_libs (from `.symlinks/plugins/sodium_libs/ios`)
82+
- sqflite (from `.symlinks/plugins/sqflite/darwin`)
6683
- uni_links (from `.symlinks/plugins/uni_links/ios`)
6784
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
85+
- video_player_avfoundation (from `.symlinks/plugins/video_player_avfoundation/darwin`)
86+
- wakelock_plus (from `.symlinks/plugins/wakelock_plus/ios`)
6887
- webview_flutter_wkwebview (from `.symlinks/plugins/webview_flutter_wkwebview/ios`)
6988

7089
SPEC REPOS:
7190
trunk:
91+
- iDenfySDK
92+
- lottie-ios
7293
- MTBBarcodeScanner
7394
- OrderedSet
74-
- ShuftiPro-Onsite
7595

7696
EXTERNAL SOURCES:
97+
audio_session:
98+
:path: ".symlinks/plugins/audio_session/ios"
7799
device_info_plus:
78100
:path: ".symlinks/plugins/device_info_plus/ios"
79101
Flutter:
@@ -82,6 +104,10 @@ EXTERNAL SOURCES:
82104
:path: ".symlinks/plugins/flutter_inappwebview/ios"
83105
flutter_pkid:
84106
:path: ".symlinks/plugins/flutter_pkid/ios"
107+
idenfy_sdk_flutter:
108+
:path: ".symlinks/plugins/idenfy_sdk_flutter/ios"
109+
just_audio:
110+
:path: ".symlinks/plugins/just_audio/ios"
85111
local_auth:
86112
:path: ".symlinks/plugins/local_auth/ios"
87113
open_filex:
@@ -98,42 +124,52 @@ EXTERNAL SOURCES:
98124
:path: ".symlinks/plugins/screen_brightness_ios/ios"
99125
shared_preferences_foundation:
100126
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
101-
shuftipro_onsite_sdk:
102-
:path: ".symlinks/plugins/shuftipro_onsite_sdk/ios"
103127
smart_auth:
104128
:path: ".symlinks/plugins/smart_auth/ios"
105129
sodium_libs:
106130
:path: ".symlinks/plugins/sodium_libs/ios"
131+
sqflite:
132+
:path: ".symlinks/plugins/sqflite/darwin"
107133
uni_links:
108134
:path: ".symlinks/plugins/uni_links/ios"
109135
url_launcher_ios:
110136
:path: ".symlinks/plugins/url_launcher_ios/ios"
137+
video_player_avfoundation:
138+
:path: ".symlinks/plugins/video_player_avfoundation/darwin"
139+
wakelock_plus:
140+
:path: ".symlinks/plugins/wakelock_plus/ios"
111141
webview_flutter_wkwebview:
112142
:path: ".symlinks/plugins/webview_flutter_wkwebview/ios"
113143

114144
SPEC CHECKSUMS:
145+
audio_session: 088d2483ebd1dc43f51d253d4a1c517d9a2e7207
115146
device_info_plus: c6fb39579d0f423935b0c9ce7ee2f44b71b9fce6
116147
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
117148
flutter_inappwebview: 3d32228f1304635e7c028b0d4252937730bbc6cf
118149
flutter_pkid: 7808bd0baee7580afc1cebebf2a6f3b290e190c5
150+
idenfy_sdk_flutter: 3f53cc19cd757e9bb9f01d83386a6db84192dae9
151+
iDenfySDK: 4bba551e7e824daf7db2b3bac166a9fe339c4269
152+
just_audio: baa7252489dbcf47a4c7cc9ca663e9661c99aafa
119153
local_auth: 1740f55d7af0a2e2a8684ce225fe79d8931e808c
154+
lottie-ios: fcb5e73e17ba4c983140b7d21095c834b3087418
120155
MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb
121156
open_filex: 6e26e659846ec990262224a12ef1c528bb4edbe4
122157
OrderedSet: aaeb196f7fef5a9edf55d89760da9176ad40b93c
123158
package_info_plus: 115f4ad11e0698c8c1c5d8a689390df880f47e85
124-
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
159+
path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46
125160
permission_handler_apple: e76247795d700c14ea09e3a2d8855d41ee80a2e6
126161
qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e
127162
screen_brightness_ios: 7437207a2a9bc56553aa10f782afecf830b4c4e2
128-
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
129-
ShuftiPro-Onsite: 45989f1626cc7bb7d150954e6d4a3f0cc8a86db9
130-
shuftipro_onsite_sdk: 1e6ca562c98e8dfb7b8e56940d4d00cb5416d7af
163+
shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78
131164
smart_auth: 4bedbc118723912d0e45a07e8ab34039c19e04f2
132-
sodium_libs: 0486eb2c3172ce494406367d4b379042444b769d
165+
sodium_libs: 1faae17af662384acbd13e41867a0008cd2e2318
166+
sqflite: 673a0e54cc04b7d6dba8d24fb8095b31c3a99eec
133167
uni_links: d97da20c7701486ba192624d99bffaaffcfc298a
134-
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
168+
url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe
169+
video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3
170+
wakelock_plus: 8b09852c8876491e4b6d179e17dfe2a0b5f60d47
135171
webview_flutter_wkwebview: 2a23822e9039b7b1bc52e5add778e5d89ad488d1
136172

137-
PODFILE CHECKSUM: 2262097366c615de59b03ca3bf748d7aaad51773
173+
PODFILE CHECKSUM: f8ab9e5577c96127975d4ff88c95faaa16cd71bb
138174

139175
COCOAPODS: 1.14.3

app/ios/Runner/Info.plist

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
<plist version="1.0">
44
<dict>
5+
<key>NSCameraUsageDescription</key>
6+
<string>Required for document and facial capture</string>
57
<key>CFBundleDevelopmentRegion</key>
68
<string>$(DEVELOPMENT_LANGUAGE)</string>
79
<key>CFBundleDisplayName</key>
@@ -85,4 +87,4 @@
8587
<key>io.flutter.embedded_views_preview</key>
8688
<true/>
8789
</dict>
88-
</plist>
90+
</plist>

app/lib/app_config.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ void setFallbackConfigs() {
209209
print("Can't connect to FlagSmith, setting default configs... ");
210210

211211
Globals().isOpenKYCEnabled = false;
212+
Globals().maximumKYCRetries = 5;
213+
Globals().minimumTFChainBalanceForKYC = 0;
212214
Globals().debugMode = false;
213215
Globals().useNewWallet = false;
214216
Globals().newWalletUrl = '';
@@ -223,4 +225,5 @@ void setFallbackConfigs() {
223225
Globals().termsAndConditionsUrl = '';
224226
Globals().spendingLimit = 0;
225227
Globals().newsUrl = '';
228+
Globals().idenfyServiceUrl = '';
226229
}

app/lib/helpers/flags.dart

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,14 @@ class Flags {
7373
Globals().spendingLimit = int.parse(
7474
(await Flags().getFlagValueByFeatureName('spending-limit')).toString());
7575
Globals().newsUrl = (await Flags().getFlagValueByFeatureName('news-url'))!;
76+
Globals().idenfyServiceUrl =
77+
(await Flags().getFlagValueByFeatureName('idenfy-service-url'))!;
78+
Globals().maximumKYCRetries = int.parse(
79+
(await Flags().getFlagValueByFeatureName('max-kyc-retries'))
80+
.toString());
81+
Globals().minimumTFChainBalanceForKYC = int.parse(
82+
(await Flags().getFlagValueByFeatureName('min-tfchain-balance-for-kyc'))
83+
.toString());
7684
Globals().refreshBalance = int.parse(
7785
(await Flags().getFlagValueByFeatureName('refresh-balance'))
7886
.toString());

app/lib/helpers/globals.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ class Globals {
4444

4545
// FlagSmith configurations
4646
bool isOpenKYCEnabled = false;
47+
int maximumKYCRetries = 5;
48+
int minimumTFChainBalanceForKYC = 0;
4749
bool useNewWallet = false;
4850
String newWalletUrl = '';
4951
bool redoIdentityVerification = false;
@@ -61,6 +63,7 @@ class Globals {
6163
String relayUrl = '';
6264
String termsAndConditionsUrl = '';
6365
String newsUrl = '';
66+
String idenfyServiceUrl = '';
6467

6568
bool isCacheClearedWallet = false;
6669
bool isCacheClearedFarmer = false;

app/lib/helpers/kyc_helpers.dart

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import 'dart:convert';
22

33
import 'package:flutter_pkid/flutter_pkid.dart';
4+
import 'package:threebotlogin/models/idenfy.dart';
5+
import 'package:threebotlogin/services/idenfy_service.dart';
46
import 'package:threebotlogin/services/migration_service.dart';
57
import 'package:threebotlogin/services/pkid_service.dart';
68
import 'package:threebotlogin/services/tools_service.dart';
@@ -11,7 +13,7 @@ import 'globals.dart';
1113
Future<void> fetchPKidData() async {
1214
FlutterPkid client = await getPkidClient();
1315

14-
List<String> keyWords = ['email', 'phone', 'identity'];
16+
List<String> keyWords = ['email', 'phone'];
1517

1618
var futures = keyWords.map((keyword) async {
1719
var pKidResult = await client.getPKidDoc(keyword);
@@ -23,12 +25,15 @@ Future<void> fetchPKidData() async {
2325
var pKidResult = await Future.wait(futures);
2426
Map<int, dynamic> dataMap = pKidResult.asMap();
2527

26-
await handleKYCData(dataMap[0], dataMap[1], dataMap[2]);
28+
await handleKYCData(dataMap[0], dataMap[1]);
2729
}
2830

29-
Future<void> handleKYCData(Map<dynamic, dynamic> emailData,
30-
Map<dynamic, dynamic> phoneData, Map<dynamic, dynamic> identityData) async {
31-
await saveCorrectVerificationStates(emailData, phoneData, identityData);
31+
Future<void> handleKYCData(
32+
Map<dynamic, dynamic> emailData, Map<dynamic, dynamic> phoneData) async {
33+
final identityVerificationStatus = await getVerificationStatus();
34+
35+
await saveCorrectVerificationStates(
36+
emailData, phoneData, identityVerificationStatus);
3237

3338
bool? isEmailVerified = await getIsEmailVerified();
3439
bool? isPhoneVerified = await getIsPhoneVerified();
@@ -59,24 +64,19 @@ Future<void> handleKYCData(Map<dynamic, dynamic> emailData,
5964

6065
if (isIdentityVerified == true) {
6166
Globals().identityVerified.value = true;
62-
await saveIdentity(
63-
jsonDecode(identityData['identityName']),
64-
identityData['signedIdentityNameIdentifier'],
65-
identityData['identityCountry'],
66-
identityData['signedIdentityCountryIdentifier'],
67-
identityData['identityDOB'],
68-
identityData['signedIdentityDOBIdentifier'],
69-
jsonDecode(identityData['identityDocumentMeta']),
70-
identityData['signedIdentityDocumentMetaIdentifier'],
71-
identityData['identityGender'],
72-
identityData['signedIdentityGenderIdentifier'],
73-
identityData['referenceId']);
67+
final data = await getVerificationData();
68+
final firstName = utf8.decode(latin1.encode(data.orgFirstName!));
69+
final lastName = utf8.decode(latin1.encode(data.orgLastName!));
70+
await saveIdentity('$lastName $firstName', data.docIssuingCountry,
71+
data.docDob, data.docSex, data.idenfyRef);
7472
}
7573
}
7674

77-
Future<void> saveCorrectVerificationStates(Map<dynamic, dynamic> emailData,
78-
Map<dynamic, dynamic> phoneData, Map<dynamic, dynamic> identityData) async {
79-
if (identityData.containsKey('signedIdentityNameIdentifier')) {
75+
Future<void> saveCorrectVerificationStates(
76+
Map<dynamic, dynamic> emailData,
77+
Map<dynamic, dynamic> phoneData,
78+
VerificationStatus identityVerificationStatus) async {
79+
if (identityVerificationStatus.status == VerificationState.VERIFIED) {
8080
await setIsIdentityVerified(true);
8181
} else {
8282
await setIsIdentityVerified(false);

0 commit comments

Comments
 (0)