Skip to content

Commit 5f9a3bc

Browse files
mattcreasertylerjroachvincetranEdison Zhang
authored
feat(auth): Add Passwordless features to Amplify (#2952)
Co-authored-by: Tyler Roach <[email protected]> Co-authored-by: Vincent Tran <[email protected]> Co-authored-by: Edison Zhang <[email protected]>
1 parent 43f6e90 commit 5f9a3bc

File tree

188 files changed

+12037
-2575
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

188 files changed

+12037
-2575
lines changed

aws-auth-cognito/api/aws-auth-cognito.api

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ public final class com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin : com/
1010
public static final field AWS_COGNITO_AUTH_LOG_NAMESPACE Ljava/lang/String;
1111
public static final field Companion Lcom/amplifyframework/auth/cognito/AWSCognitoAuthPlugin$Companion;
1212
public fun <init> ()V
13+
public fun associateWebAuthnCredential (Landroid/app/Activity;Lcom/amplifyframework/auth/options/AuthAssociateWebAuthnCredentialsOptions;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
14+
public fun associateWebAuthnCredential (Landroid/app/Activity;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
15+
public fun autoSignIn (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
1316
public final fun clearFederationToIdentityPool (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
1417
public fun configure (Lorg/json/JSONObject;Landroid/content/Context;)V
1518
public fun confirmResetPassword (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthConfirmResetPasswordOptions;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
@@ -20,6 +23,8 @@ public final class com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin : com/
2023
public fun confirmSignUp (Ljava/lang/String;Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
2124
public fun confirmUserAttribute (Lcom/amplifyframework/auth/AuthUserAttributeKey;Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
2225
public fun deleteUser (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
26+
public fun deleteWebAuthnCredential (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthDeleteWebAuthnCredentialOptions;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
27+
public fun deleteWebAuthnCredential (Ljava/lang/String;Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
2328
public final fun federateToIdentityPool (Ljava/lang/String;Lcom/amplifyframework/auth/AuthProvider;Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
2429
public final fun federateToIdentityPool (Ljava/lang/String;Lcom/amplifyframework/auth/AuthProvider;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
2530
public fun fetchAuthSession (Lcom/amplifyframework/auth/options/AuthFetchSessionOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
@@ -36,6 +41,8 @@ public final class com/amplifyframework/auth/cognito/AWSCognitoAuthPlugin : com/
3641
public fun getVersion ()Ljava/lang/String;
3742
public fun handleWebUISignInResponse (Landroid/content/Intent;)V
3843
public fun initialize (Landroid/content/Context;)V
44+
public fun listWebAuthnCredentials (Lcom/amplifyframework/auth/options/AuthListWebAuthnCredentialsOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
45+
public fun listWebAuthnCredentials (Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
3946
public fun rememberDevice (Lcom/amplifyframework/core/Action;Lcom/amplifyframework/core/Consumer;)V
4047
public fun resendSignUpCode (Ljava/lang/String;Lcom/amplifyframework/auth/options/AuthResendSignUpCodeOptions;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
4148
public fun resendSignUpCode (Ljava/lang/String;Lcom/amplifyframework/core/Consumer;Lcom/amplifyframework/core/Consumer;)V
@@ -238,7 +245,8 @@ public class com/amplifyframework/auth/cognito/exceptions/service/TooManyRequest
238245
}
239246

240247
public class com/amplifyframework/auth/cognito/exceptions/service/UserCancelledException : com/amplifyframework/auth/exceptions/ServiceException {
241-
public fun <init> (Ljava/lang/String;Ljava/lang/String;)V
248+
public fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)V
249+
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
242250
}
243251

244252
public class com/amplifyframework/auth/cognito/exceptions/service/UserLambdaValidationException : com/amplifyframework/auth/exceptions/ServiceException {
@@ -257,6 +265,21 @@ public class com/amplifyframework/auth/cognito/exceptions/service/UsernameExists
257265
public fun <init> (Ljava/lang/Throwable;)V
258266
}
259267

268+
public final class com/amplifyframework/auth/cognito/exceptions/service/WebAuthnNotEnabledException : com/amplifyframework/auth/exceptions/ServiceException {
269+
}
270+
271+
public final class com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnCredentialAlreadyExistsException : com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnFailedException {
272+
}
273+
274+
public class com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnFailedException : com/amplifyframework/auth/AuthException {
275+
}
276+
277+
public final class com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnNotSupportedException : com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnFailedException {
278+
}
279+
280+
public final class com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnRpMismatchException : com/amplifyframework/auth/cognito/exceptions/webauthn/WebAuthnFailedException {
281+
}
282+
260283
public final class com/amplifyframework/auth/cognito/helpers/FlutterFactory {
261284
public static final field INSTANCE Lcom/amplifyframework/auth/cognito/helpers/FlutterFactory;
262285
public final fun createAWSCognitoAuthSession (ZLcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;Lcom/amplifyframework/auth/result/AuthSessionResult;)Lcom/amplifyframework/auth/cognito/AWSCognitoAuthSession;
@@ -295,9 +318,11 @@ public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfi
295318
public final fun component1 ()Ljava/util/Map;
296319
public final fun component2 ()Ljava/util/List;
297320
public final fun component3 ()Ljava/lang/String;
298-
public final fun copy (Ljava/util/Map;Ljava/util/List;Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
299-
public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
321+
public final fun component4 ()Ljava/lang/ref/WeakReference;
322+
public final fun copy (Ljava/util/Map;Ljava/util/List;Ljava/lang/String;Ljava/lang/ref/WeakReference;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
323+
public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;Ljava/util/Map;Ljava/util/List;Ljava/lang/String;Ljava/lang/ref/WeakReference;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
300324
public fun equals (Ljava/lang/Object;)Z
325+
public final fun getCallingActivity ()Ljava/lang/ref/WeakReference;
301326
public final fun getFriendlyDeviceName ()Ljava/lang/String;
302327
public final fun getMetadata ()Ljava/util/Map;
303328
public final fun getUserAttributes ()Ljava/util/List;
@@ -309,6 +334,7 @@ public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfi
309334
public fun <init> ()V
310335
public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions;
311336
public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthConfirmSignInOptions;
337+
public final fun callingActivity (Landroid/app/Activity;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
312338
public final fun friendlyDeviceName (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
313339
public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignInOptions$CognitoBuilder;
314340
public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthConfirmSignInOptions$Builder;
@@ -347,6 +373,41 @@ public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthConfi
347373
public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthConfirmSignUpOptions;
348374
}
349375

376+
public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions : com/amplifyframework/auth/options/AuthListWebAuthnCredentialsOptions {
377+
public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Companion;
378+
public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder;
379+
public final fun component1 ()Ljava/lang/String;
380+
public final fun component2 ()Ljava/lang/Integer;
381+
public final fun copy (Ljava/lang/String;Ljava/lang/Integer;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
382+
public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;Ljava/lang/String;Ljava/lang/Integer;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
383+
public static final fun defaults ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
384+
public fun equals (Ljava/lang/Object;)Z
385+
public final fun getMaxResults ()Ljava/lang/Integer;
386+
public final fun getNextToken ()Ljava/lang/String;
387+
public fun hashCode ()I
388+
public fun toString ()Ljava/lang/String;
389+
}
390+
391+
public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder : com/amplifyframework/auth/options/AuthListWebAuthnCredentialsOptions$Builder {
392+
public fun <init> ()V
393+
public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
394+
public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthListWebAuthnCredentialsOptions;
395+
public final fun getMaxResults ()Ljava/lang/Integer;
396+
public final fun getNextToken ()Ljava/lang/String;
397+
public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder;
398+
public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthListWebAuthnCredentialsOptions$Builder;
399+
public final fun maxResults (Ljava/lang/Integer;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder;
400+
public final fun nextToken (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder;
401+
public final synthetic fun setMaxResults (Ljava/lang/Integer;)V
402+
public final synthetic fun setNextToken (Ljava/lang/String;)V
403+
}
404+
405+
public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Companion {
406+
public final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions$Builder;
407+
public final fun defaults ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
408+
public final synthetic fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthListWebAuthnCredentialsOptions;
409+
}
410+
350411
public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions : com/amplifyframework/auth/options/AuthResendSignUpCodeOptions {
351412
public static final field Companion Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$Companion;
352413
public static final fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthResendSignUpCodeOptions$CognitoBuilder;
@@ -429,7 +490,9 @@ public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignI
429490
public static fun builder ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
430491
public fun equals (Ljava/lang/Object;)Z
431492
public fun getAuthFlowType ()Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
493+
public fun getCallingActivity ()Ljava/lang/ref/WeakReference;
432494
public fun getMetadata ()Ljava/util/Map;
495+
public fun getPreferredFirstFactor ()Lcom/amplifyframework/auth/AuthFactorType;
433496
public fun hashCode ()I
434497
public fun toString ()Ljava/lang/String;
435498
}
@@ -439,9 +502,11 @@ public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignI
439502
public fun authFlowType (Lcom/amplifyframework/auth/cognito/options/AuthFlowType;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
440503
public fun build ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions;
441504
public synthetic fun build ()Lcom/amplifyframework/auth/options/AuthSignInOptions;
505+
public fun callingActivity (Landroid/app/Activity;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
442506
public fun getThis ()Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
443507
public synthetic fun getThis ()Lcom/amplifyframework/auth/options/AuthSignInOptions$Builder;
444508
public fun metadata (Ljava/util/Map;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
509+
public fun preferredFirstFactor (Lcom/amplifyframework/auth/AuthFactorType;)Lcom/amplifyframework/auth/cognito/options/AWSCognitoAuthSignInOptions$CognitoBuilder;
445510
}
446511

447512
public final class com/amplifyframework/auth/cognito/options/AWSCognitoAuthSignOutOptions : com/amplifyframework/auth/options/AuthSignOutOptions {
@@ -586,6 +651,7 @@ public final class com/amplifyframework/auth/cognito/options/AuthFlowType : java
586651
public static final field CUSTOM_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
587652
public static final field CUSTOM_AUTH_WITHOUT_SRP Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
588653
public static final field CUSTOM_AUTH_WITH_SRP Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
654+
public static final field USER_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
589655
public static final field USER_PASSWORD_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
590656
public static final field USER_SRP_AUTH Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
591657
public static fun valueOf (Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/options/AuthFlowType;
@@ -615,6 +681,19 @@ public final class com/amplifyframework/auth/cognito/options/FederateToIdentityP
615681
public final fun invoke (Lkotlin/jvm/functions/Function1;)Lcom/amplifyframework/auth/cognito/options/FederateToIdentityPoolOptions;
616682
}
617683

684+
public final class com/amplifyframework/auth/cognito/result/AWSCognitoAuthListWebAuthnCredentialsResult : com/amplifyframework/auth/result/AuthListWebAuthnCredentialsResult {
685+
public fun <init> (Ljava/util/List;Ljava/lang/String;)V
686+
public final fun component1 ()Ljava/util/List;
687+
public final fun component2 ()Ljava/lang/String;
688+
public final fun copy (Ljava/util/List;Ljava/lang/String;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthListWebAuthnCredentialsResult;
689+
public static synthetic fun copy$default (Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthListWebAuthnCredentialsResult;Ljava/util/List;Ljava/lang/String;ILjava/lang/Object;)Lcom/amplifyframework/auth/cognito/result/AWSCognitoAuthListWebAuthnCredentialsResult;
690+
public fun equals (Ljava/lang/Object;)Z
691+
public fun getCredentials ()Ljava/util/List;
692+
public final fun getNextToken ()Ljava/lang/String;
693+
public fun hashCode ()I
694+
public fun toString ()Ljava/lang/String;
695+
}
696+
618697
public abstract class com/amplifyframework/auth/cognito/result/AWSCognitoAuthSignOutResult : com/amplifyframework/auth/result/AuthSignOutResult {
619698
public abstract fun getSignedOutLocally ()Z
620699
}

aws-auth-cognito/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ group = properties["POM_GROUP"].toString()
2626

2727
android {
2828
namespace = "com.amplifyframework.auth.cognito"
29+
defaultConfig {
30+
consumerProguardFiles += file("consumer-rules.pro")
31+
}
2932
}
3033

3134
dependencies {
@@ -37,6 +40,7 @@ dependencies {
3740
implementation(libs.androidx.appcompat)
3841
implementation(libs.androidx.security)
3942
implementation(libs.androidx.browser)
43+
implementation(libs.androidx.credentials)
4044

4145
implementation(libs.aws.http)
4246
implementation(libs.aws.cognitoidentity)
@@ -61,6 +65,7 @@ dependencies {
6165
testImplementation(libs.test.kotlin.reflection)
6266
testImplementation(libs.test.kotest.assertions)
6367
testImplementation(libs.test.kotest.assertions.json)
68+
testImplementation(libs.test.turbine)
6469

6570
androidTestImplementation(libs.gson)
6671
//noinspection GradleDependency
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# CredentialManager rules
2+
-if class androidx.credentials.CredentialManager
3+
-keep class androidx.credentials.playservices.** {
4+
*;
5+
}

aws-auth-cognito/src/androidTest/java/com/amplifyframework/auth/cognito/AWSCognitoAuthPluginEmailMFATests.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package com.amplifyframework.auth.cognito
1818
import android.content.Context
1919
import androidx.test.core.app.ApplicationProvider
2020
import com.amplifyframework.api.aws.AWSApiPlugin
21+
import com.amplifyframework.api.graphql.GraphQLOperation
2122
import com.amplifyframework.api.graphql.SimpleGraphQLRequest
2223
import com.amplifyframework.auth.AuthUserAttribute
2324
import com.amplifyframework.auth.AuthUserAttributeKey
@@ -51,6 +52,7 @@ class AWSCognitoAuthPluginEmailMFATests {
5152
private var authPlugin = AWSCognitoAuthPlugin()
5253
private var apiPlugin = AWSApiPlugin()
5354
private lateinit var synchronousAuth: SynchronousAuth
55+
private var subscription: GraphQLOperation<MfaInfo>? = null
5456
private var mfaCode = ""
5557
private var latch: CountDownLatch? = null
5658

@@ -64,8 +66,8 @@ class AWSCognitoAuthPluginEmailMFATests {
6466
apiPlugin.configure(config, context)
6567
synchronousAuth = SynchronousAuth.delegatingTo(authPlugin)
6668

67-
apiPlugin.subscribe(
68-
SimpleGraphQLRequest<MfaInfo>(
69+
subscription = apiPlugin.subscribe(
70+
SimpleGraphQLRequest(
6971
Assets.readAsString("create-mfa-subscription.graphql"),
7072
MfaInfo::class.java,
7173
null
@@ -83,6 +85,7 @@ class AWSCognitoAuthPluginEmailMFATests {
8385

8486
@After
8587
fun tearDown() {
88+
subscription?.cancel()
8689
mfaCode = ""
8790
synchronousAuth.deleteUser()
8891
}

0 commit comments

Comments
 (0)