Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,15 +30,15 @@ The MIRACL Trust Android SDK provides the following functionalities:

```kotlin
dependencies {
implementation("com.miracl:trust-sdk-android:1.9.0")
implementation("com.miracl:trust-sdk-android:1.10.0")
}
```

Groovy:

```groovy
dependencies {
implementation "com.miracl:trust-sdk-android:1.9.0"
implementation "com.miracl:trust-sdk-android:1.10.0"
}
```

Expand Down
18 changes: 18 additions & 0 deletions miracl-sdk/api/miracl-sdk.api
Original file line number Diff line number Diff line change
Expand Up @@ -28,24 +28,36 @@ public final class com/miracl/trust/MIRACLTrust {
public synthetic fun <init> (Landroid/content/Context;Lcom/miracl/trust/configuration/Configuration;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public final fun abortAuthenticationSession (Lcom/miracl/trust/session/AuthenticationSessionDetails;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun abortCrossDeviceSession (Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun abortCrossDeviceSession (Lcom/miracl/trust/session/CrossDeviceSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun abortSigningSession (Lcom/miracl/trust/session/SigningSessionDetails;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun authenticate (Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun authenticate (Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun authenticate (Lcom/miracl/trust/model/User;Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun authenticate (Lcom/miracl/trust/model/User;Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun authenticateWithAppLink (Lcom/miracl/trust/model/User;Landroid/net/Uri;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun authenticateWithAppLink (Lcom/miracl/trust/model/User;Landroid/net/Uri;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun authenticateWithNotificationPayload (Ljava/util/Map;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun authenticateWithNotificationPayload (Ljava/util/Map;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun authenticateWithQRCode (Lcom/miracl/trust/model/User;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun authenticateWithQRCode (Lcom/miracl/trust/model/User;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun configure (Landroid/content/Context;Lcom/miracl/trust/configuration/Configuration;)V
public final fun delete (Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun delete (Lcom/miracl/trust/model/User;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun generateQuickCode (Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun generateQuickCode (Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getActivationToken (Landroid/net/Uri;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun getActivationToken (Landroid/net/Uri;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getActivationToken (Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun getActivationToken (Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getAuthenticationSessionDetailsFromAppLink (Landroid/net/Uri;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun getAuthenticationSessionDetailsFromNotificationPayload (Ljava/util/Map;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun getAuthenticationSessionDetailsFromQRCode (Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun getCrossDeviceSessionFromAppLink (Landroid/net/Uri;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun getCrossDeviceSessionFromAppLink (Landroid/net/Uri;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getCrossDeviceSessionFromNotificationPayload (Ljava/util/Map;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun getCrossDeviceSessionFromNotificationPayload (Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun getCrossDeviceSessionFromQRCode (Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun getCrossDeviceSessionFromQRCode (Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static final fun getInstance ()Lcom/miracl/trust/MIRACLTrust;
public final fun getProjectId ()Ljava/lang/String;
public final fun getSigningSessionDetailsFromAppLink (Landroid/net/Uri;Lcom/miracl/trust/delegate/ResultHandler;)V
Expand All @@ -56,13 +68,19 @@ public final class com/miracl/trust/MIRACLTrust {
public final fun getUsers (Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun register (Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun register (Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun register (Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun register$default (Lcom/miracl/trust/MIRACLTrust;Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;ILjava/lang/Object;)V
public static synthetic fun register$default (Lcom/miracl/trust/MIRACLTrust;Ljava/lang/String;Ljava/lang/String;Lcom/miracl/trust/delegate/PinProvider;Ljava/lang/String;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun sendVerificationEmail (Ljava/lang/String;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun sendVerificationEmail (Ljava/lang/String;Lcom/miracl/trust/session/AuthenticationSessionDetails;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun sendVerificationEmail (Ljava/lang/String;Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun sendVerificationEmail (Ljava/lang/String;Lcom/miracl/trust/session/CrossDeviceSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public static synthetic fun sendVerificationEmail$default (Lcom/miracl/trust/MIRACLTrust;Ljava/lang/String;Lcom/miracl/trust/session/CrossDeviceSession;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object;
public final fun setProjectId (Ljava/lang/String;)V
public final fun sign (Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun sign (Lcom/miracl/trust/session/CrossDeviceSession;Lcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun sign ([BLcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final synthetic fun sign ([BLcom/miracl/trust/model/User;Lcom/miracl/trust/delegate/PinProvider;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;
public final fun sign ([BLcom/miracl/trust/model/User;Lcom/miracl/trust/session/SigningSessionDetails;Lcom/miracl/trust/delegate/PinProvider;Lcom/miracl/trust/delegate/ResultHandler;)V
public final fun updateProjectSettings (Ljava/lang/String;Ljava/lang/String;)V
}
Expand Down
2 changes: 1 addition & 1 deletion miracl-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ plugins {
alias libs.plugins.jreleaser
}

version = '1.9.0'
version = '1.10.0'

android {
namespace 'com.miracl.trust'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,11 @@ import android.net.Uri
import androidx.test.platform.app.InstrumentationRegistry
import com.miracl.trust.BuildConfig
import com.miracl.trust.MIRACLError
import com.miracl.trust.MIRACLResult
import com.miracl.trust.MIRACLSuccess
import com.miracl.trust.MIRACLTrust
import com.miracl.trust.configuration.Configuration
import com.miracl.trust.delegate.PinProvider
import com.miracl.trust.model.User
import com.miracl.trust.registration.RegistrationException
import com.miracl.trust.utilities.MIRACLService
import com.miracl.trust.utilities.USER_ID
import com.miracl.trust.utilities.WRONG_FORMAT_PIN
Expand All @@ -34,56 +32,48 @@ class AppLinkAuthenticationTest {
private lateinit var user: User

@Before
fun setUp() = runTest {
fun setUp() = runTest(testCoroutineDispatcher) {
val configuration = Configuration.Builder(projectId, projectUrl)
.coroutineContext(testCoroutineDispatcher)
.build()

MIRACLTrust.configure(InstrumentationRegistry.getInstrumentation().context, configuration)
miraclTrust = MIRACLTrust.getInstance()
miraclTrust.resultHandlerDispatcher = testCoroutineDispatcher

pin = randomNumericPin()
pinProvider = PinProvider { pinConsumer -> pinConsumer.consume(pin) }
val activationToken = MIRACLService.obtainActivationToken()

var registrationResult: MIRACLResult<User, RegistrationException>? = null
miraclTrust.register(
val registrationResult = miraclTrust.register(
userId = USER_ID,
activationToken = activationToken,
pinProvider = pinProvider,
pushNotificationsToken = null,
resultHandler = { result -> registrationResult = result }
)
testCoroutineDispatcher.scheduler.advanceUntilIdle()
Assert.assertTrue(registrationResult is MIRACLSuccess)

user = (registrationResult as MIRACLSuccess).value
}

@Test
fun testSuccessfulAppLinkAuthentication() = runTest {
fun testSuccessfulAppLinkAuthentication() = runTest(testCoroutineDispatcher) {
// Arrange
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, pinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, pinProvider)

// Assert
Assert.assertTrue(result is MIRACLSuccess)
}

@Test
fun testAppLinkAuthenticationFailOnInvalidAccessId() {
fun testAppLinkAuthenticationFailOnInvalidAccessId() = runTest(testCoroutineDispatcher) {
// Arrange
val appLink = Uri.parse("https://mcl.mpin.io/mobile/auth#invalidAccessId")
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, pinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, pinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -94,15 +84,13 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnEmptyPin() = runTest {
fun testAppLinkAuthenticationFailOnEmptyPin() = runTest(testCoroutineDispatcher) {
// Arrange
val emptyPinProvider = PinProvider { it.consume(null) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, emptyPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, emptyPinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -113,15 +101,13 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnShorterPin() = runTest {
fun testAppLinkAuthenticationFailOnShorterPin() = runTest(testCoroutineDispatcher) {
// Arrange
val shorterPinProvider = PinProvider { it.consume(randomNumericPin(pin.length - 1)) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, shorterPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, shorterPinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -132,15 +118,13 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnLongerPin() = runTest {
fun testAppLinkAuthenticationFailOnLongerPin() = runTest(testCoroutineDispatcher) {
// Arrange
val longerPinProvider = PinProvider { it.consume(randomNumericPin(pin.length + 1)) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, longerPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, longerPinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -151,15 +135,13 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnWrongFormatPin() = runTest {
fun testAppLinkAuthenticationFailOnWrongFormatPin() = runTest(testCoroutineDispatcher) {
// Arrange
val wrongFormatPinProvider = PinProvider { it.consume(WRONG_FORMAT_PIN) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, wrongFormatPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, wrongFormatPinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -170,15 +152,13 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnWrongPin() = runTest {
fun testAppLinkAuthenticationFailOnWrongPin() = runTest(testCoroutineDispatcher) {
// Arrange
val wrongPinProvider = PinProvider { it.consume(generateWrongPin(pin)) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

// Act
miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
val result = miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand All @@ -189,38 +169,33 @@ class AppLinkAuthenticationTest {
}

@Test
fun testAppLinkAuthenticationFailOnRevokedUser() = runTest {
fun testAppLinkAuthenticationFailOnRevokedUser() = runTest(testCoroutineDispatcher) {
// Arrange
val wrongPinProvider = PinProvider { it.consume(generateWrongPin(pin)) }
val appLink = Uri.parse(MIRACLService.obtainAccessId().qrURL)
var result: MIRACLResult<Unit, AuthenticationException>? = null

miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
var result = miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider)
Assert.assertTrue(result is MIRACLError)
Assert.assertEquals(
AuthenticationException.UnsuccessfulAuthentication,
(result as MIRACLError).value
)

miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
result = miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider)
Assert.assertTrue(result is MIRACLError)
Assert.assertEquals(
AuthenticationException.UnsuccessfulAuthentication,
(result as MIRACLError).value
)

miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
result = miraclTrust.authenticateWithAppLink(user, appLink, wrongPinProvider)
Assert.assertTrue(result is MIRACLError)
Assert.assertEquals(AuthenticationException.Revoked, (result as MIRACLError).value)

Assert.assertTrue(miraclTrust.getUser(user.userId)!!.revoked)

// Act
miraclTrust.authenticateWithAppLink(user, appLink, pinProvider) { result = it }
testCoroutineDispatcher.scheduler.advanceUntilIdle()
result = miraclTrust.authenticateWithAppLink(user, appLink, pinProvider)

// Assert
Assert.assertTrue(result is MIRACLError)
Expand Down
Loading