Skip to content

Commit 64ecba7

Browse files
committed
Updated passkey bridge for iOS
1 parent 79e7f08 commit 64ecba7

File tree

6 files changed

+62
-18
lines changed

6 files changed

+62
-18
lines changed

example/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ android {
5353

5454
multiDexEnabled true
5555
}
56-
56+
5757
buildTypes {
5858

5959
debug {

example/ios/Podfile.lock

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ PODS:
1010
- GoogleUtilities/UserDefaults (~> 8.0)
1111
- PromisesObjC (~> 2.4)
1212
- Flutter (1.0.0)
13-
- Gigya (1.7.5)
13+
- Gigya (1.7.6)
1414
- gigya_flutter_plugin (1.0.0):
1515
- Flutter
16-
- Gigya (>= 1.7.5)
16+
- Gigya (>= 1.7.6)
1717
- GigyaAuth (>= 1.1.2)
1818
- GigyaAuth (1.1.2):
1919
- Gigya (>= 1.6.0)
@@ -76,8 +76,8 @@ SPEC CHECKSUMS:
7676
AppAuth: d4f13a8fe0baf391b2108511793e4b479691fb73
7777
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
7878
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
79-
Gigya: 7ae1fdb9fed7f5958fb3b78d0048ca47774d0a1e
80-
gigya_flutter_plugin: 06463c1881218b333304b80ecee8201d98ce7abb
79+
Gigya: 4f318c2e24ce3f0c8bac8dc7715232bde47f9184
80+
gigya_flutter_plugin: d11e1b7dc93b0bf1661ad4c2c4a9a74d741fe971
8181
GigyaAuth: 32cd49aa9eb380275ad10d85543a90ce326fe4fb
8282
google_sign_in_ios: 7411fab6948df90490dc4620ecbcabdc3ca04017
8383
GoogleSignIn: ce8c89bb9b37fb624b92e7514cc67335d1e277e4

ios/Classes/GigyaSdkMethods.swift

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,6 @@ public enum GigyaSdkMethods: String {
2222
case webAuthnLogin
2323
case webAuthnRegister
2424
case webAuthnRevoke
25-
case passkeyLogin
26-
case passkeyRegister
2725
case passkeyRevoke
2826
case passkeyGetCredentials
2927

ios/Classes/GigyaSdkWrapper.swift

Lines changed: 46 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -528,10 +528,6 @@ public class GigyaSdkWrapper<T: GigyaAccountProtocol> :GigyaInstanceProtocol {
528528
}
529529
}
530530

531-
func passkeyLogin(result: @escaping FlutterResult) {
532-
webAuthnLogin(result: result)
533-
}
534-
535531
func webAuthnRegister(result: @escaping FlutterResult) {
536532
guard let viewController = getDisplayedViewController()
537533
else {
@@ -560,9 +556,6 @@ public class GigyaSdkWrapper<T: GigyaAccountProtocol> :GigyaInstanceProtocol {
560556
}
561557
}
562558

563-
func passkeyRegister(result: @escaping FlutterResult) {
564-
webAuthnRegister(result: result)
565-
}
566559

567560
func webAuthnRevoke(result: @escaping FlutterResult) {
568561
if #available(iOS 16.0.0, *) {
@@ -586,12 +579,54 @@ public class GigyaSdkWrapper<T: GigyaAccountProtocol> :GigyaInstanceProtocol {
586579
}
587580
}
588581

589-
fun passkeyRevoke(arguments: [String: Any], result: @escaping FlutterResult) {
590-
582+
func passkeyRevoke(arguments: [String: Any], result: @escaping FlutterResult) {
583+
if #available(iOS 16.0.0, *) {
584+
guard let id = arguments["id"] as? String
585+
else {
586+
result(FlutterError(code: PluginErrors.missingParameterError, message: PluginErrors.missingParameterMessage, details: nil))
587+
return
588+
}
589+
590+
Task {
591+
guard let revokeResult = await sdk?.webAuthn.revoke(id: id)
592+
else {
593+
result(FlutterError(code: PluginErrors.generalError, message: PluginErrors.generalErrorMessage, details: nil))
594+
return
595+
}
596+
597+
switch revokeResult {
598+
case .success(let data):
599+
let json = data.mapValues { $0.value }.asJson
600+
result(json)
601+
case .failure(let error):
602+
result(PluginErrors.wrapNetworkError(error: error))
603+
}
604+
}
605+
} else {
606+
result(FlutterError(code: PluginErrors.unsupportedError, message: PluginErrors.unsupportedErrorMessage, details: nil))
607+
}
591608
}
592609

593-
fun passkeyGetCredentials(result: @escaping FlutterResult) {
594-
610+
func passkeyGetCredentials(result: @escaping FlutterResult) {
611+
if #available(iOS 16.0.0, *) {
612+
Task {
613+
guard let revokeResult = await sdk?.webAuthn.getCredentials()
614+
else {
615+
result(FlutterError(code: PluginErrors.generalError, message: PluginErrors.generalErrorMessage, details: nil))
616+
return
617+
}
618+
619+
switch revokeResult {
620+
case .success(let data):
621+
let json = data.mapValues { $0.value }.asJson
622+
result(json)
623+
case .failure(let error):
624+
result(PluginErrors.wrapNetworkError(error: error))
625+
}
626+
}
627+
} else {
628+
result(FlutterError(code: PluginErrors.unsupportedError, message: PluginErrors.unsupportedErrorMessage, details: nil))
629+
}
595630
}
596631
}
597632

ios/Classes/SwiftGigyaFlutterPluginTyped.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,10 @@ public class SwiftGigyaFlutterPluginTyped<T: GigyaAccountProtocol> : NSObject, F
139139
sdk?.webAuthnRegister(result: result)
140140
case .webAuthnRevoke:
141141
sdk?.webAuthnRevoke(result: result)
142+
case .passkeyRevoke:
143+
sdk?.passkeyRevoke(arguments: args, result: result)
144+
case .passkeyGetCredentials:
145+
sdk?.passkeyGetCredentials(result: result)
142146
case .otpLogin:
143147
sdk?.otpLogin(arguments: args, result: result)
144148
case .otpUpdate:

lib/src/services/web_authentication_service/method_channel_web_authentication_service.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'dart:convert';
2+
import 'dart:io';
23

34
import 'package:flutter/services.dart' show MethodChannel, PlatformException;
45
import 'package:gigya_flutter_plugin/gigya_flutter_plugin.dart';
@@ -33,6 +34,9 @@ class MethodChannelWebAuthenticationService extends WebAuthenticationService {
3334

3435
@override
3536
Future<Map<String, dynamic>> passkeyLogin() async {
37+
if (Platform.isIOS) {
38+
return login();
39+
}
3640
try {
3741
final Map<String, dynamic>? result =
3842
await _channel.invokeMapMethod<String, dynamic>(
@@ -72,6 +76,9 @@ class MethodChannelWebAuthenticationService extends WebAuthenticationService {
7276

7377
@override
7478
Future<Map<String, dynamic>> passkeyRegister() async {
79+
if (Platform.isIOS) {
80+
return register();
81+
}
7582
try {
7683
final String? json = await _channel.invokeMethod<String>(
7784
WebAuthnMethods.passkeyRegister.methodName,

0 commit comments

Comments
 (0)