Skip to content
Merged
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
6 changes: 4 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,10 @@ jobs:
TEST_DV_PROJECT_URL: ${{ vars.TEST_DV_PROJECT_URL }}
TEST_ECV_PROJECT_ID: ${{ vars.TEST_ECV_PROJECT_ID }}
TEST_ECV_PROJECT_URL: ${{ vars.TEST_ECV_PROJECT_URL }}
GMAIL_CREDENTIALS: ${{ secrets.GMAIL_CREDENTIALS }}
GMAIL_TOKEN: ${{ secrets.GMAIL_TOKEN }}
TEST_MAILPIT_URL: ${{ secrets.TEST_MAILPIT_URL }}
TEST_MAILPIT_USER: ${{ secrets.TEST_MAILPIT_USER }}
TEST_MAILPIT_PASS: ${{ secrets.TEST_MAILPIT_PASS }}
TEST_MAILPIT_EMAIL_ADDRESS: ${{ secrets.TEST_MAILPIT_EMAIL_ADDRESS }}
with:
api-level: 35
arch: "x86_64"
Expand Down
7 changes: 5 additions & 2 deletions miracl-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@ android {

buildConfigField "String", "ECV_PROJECT_ID", "\"${project.getProperties().get('miracltrust.ecvProjectId')}\""
buildConfigField "String", "ECV_PROJECT_URL", "\"${project.getProperties().get('miracltrust.ecvProjectUrl')}\""

buildConfigField "String", "MAILPIT_URL", "\"${project.getProperties().get('mailpit.url')}\""
buildConfigField "String", "MAILPIT_USER", "\"${project.getProperties().get('mailpit.user')}\""
buildConfigField "String", "MAILPIT_PASS", "\"${project.getProperties().get('mailpit.pass')}\""
buildConfigField "String", "MAILPIT_EMAIL_ADDRESS", "\"${project.getProperties().get('mailpit.emailAddress')}\""
}
}

Expand Down Expand Up @@ -154,8 +159,6 @@ dependencies {
androidTestRuntimeOnly(libs.jjwt.orgjson) {
exclude(group: 'org.json', module: 'json') // Provided by Android natively
}

androidTestImplementation project(':utilities')
}

apiValidation {
Expand Down
7 changes: 6 additions & 1 deletion miracl-sdk/gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,9 @@ miracltrust.dvProjectId=
miracltrust.dvProjectUrl=

miracltrust.ecvProjectId=
miracltrust.ecvProjectUrl=
miracltrust.ecvProjectUrl=

mailpit.url=
mailpit.user=
mailpit.pass=
mailpit.emailAddress=
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@

import static com.miracl.trust.utilities.UtilitiesKt.USER_ID;
import static com.miracl.trust.utilities.UtilitiesKt.USER_PIN_LENGTH;
import static com.miracl.trust.utilities.UtilitiesKt.createMailpitUserId;
import static com.miracl.trust.utilities.UtilitiesKt.getUnixTime;
import static com.miracl.trust.utilities.UtilitiesKt.randomHash;
import static com.miracl.trust.utilities.UtilitiesKt.randomNumericPin;

import android.content.Context;
import android.net.Uri;

import androidx.test.platform.app.InstrumentationRegistry;
Expand All @@ -31,9 +31,9 @@
import com.miracl.trust.signing.SigningException;
import com.miracl.trust.signing.SigningResult;
import com.miracl.trust.storage.UserStorageException;
import com.miracl.trust.utilities.GmailService;
import com.miracl.trust.utilities.JwtHelper;
import com.miracl.trust.utilities.MIRACLService;
import com.miracl.trust.utilities.MailpitService;
import com.miracl.trust.utilities.VerifySignatureResponse;

import org.junit.Assert;
Expand Down Expand Up @@ -78,21 +78,21 @@ public void testDefaultVerification() throws ConfigurationException {
miraclTrust.updateProjectSettings(BuildConfig.DV_PROJECT_ID, BuildConfig.DV_PROJECT_URL);

long timestamp = getUnixTime();
miraclTrust.sendVerificationEmail(USER_ID, result -> {
String userId = createMailpitUserId();
miraclTrust.sendVerificationEmail(userId, result -> {
Assert.assertTrue(result instanceof MIRACLSuccess);

Context context = InstrumentationRegistry.getInstrumentation().getContext();
String verificationUrl = GmailService.INSTANCE.getVerificationUrl(context, USER_ID, USER_ID, timestamp);
String verificationUrl = MailpitService.INSTANCE.getVerificationUrl(userId, timestamp);
Assert.assertNotNull(verificationUrl);

miraclTrust.getActivationToken(
Uri.parse(verificationUrl),
activationTokenResult -> {
Assert.assertTrue(activationTokenResult instanceof MIRACLSuccess);

String userId = ((MIRACLSuccess<ActivationTokenResponse, ActivationTokenException>)
activationTokenResult).getValue().getUserId();
Assert.assertEquals(USER_ID, userId);
ActivationTokenResponse activationTokenResponse =
((MIRACLSuccess<ActivationTokenResponse, ActivationTokenException>) activationTokenResult).getValue();
Assert.assertEquals(userId, activationTokenResponse.getUserId());
}
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ import com.miracl.trust.MIRACLTrust
import com.miracl.trust.configuration.Configuration
import com.miracl.trust.delegate.PinProvider
import com.miracl.trust.network.ApiException
import com.miracl.trust.utilities.GmailService
import com.miracl.trust.utilities.MIRACLService
import com.miracl.trust.utilities.MailpitService
import com.miracl.trust.utilities.USER_ID
import com.miracl.trust.utilities.createMailpitUserId
import com.miracl.trust.utilities.generateWrongPin
import com.miracl.trust.utilities.getUnixTime
import com.miracl.trust.utilities.randomNumericPin
Expand Down Expand Up @@ -63,12 +64,12 @@ class RegistrationTest {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val timestamp = getUnixTime()
val sendEmailResult = miraclTrust.sendVerificationEmail(USER_ID)
val userId = createMailpitUserId()
val sendEmailResult = miraclTrust.sendVerificationEmail(userId)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, USER_ID, timestamp)
val verificationUrl = MailpitService.getVerificationUrl(userId, timestamp)
Assert.assertNotNull(verificationUrl)

// Get activation token
Expand All @@ -77,10 +78,10 @@ class RegistrationTest {

// Register
val activationToken = (activationTokenResult as MIRACLSuccess).value.activationToken
val result = register(activationToken = activationToken)
val result = register(userId = userId, activationToken = activationToken)

Assert.assertTrue(result is MIRACLSuccess)
Assert.assertEquals(USER_ID, (result as MIRACLSuccess).value.userId)
Assert.assertEquals(userId, (result as MIRACLSuccess).value.userId)
Assert.assertEquals(dvProjectId, result.value.projectId)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,10 @@ import com.miracl.trust.model.User
import com.miracl.trust.session.AuthenticationSessionDetails
import com.miracl.trust.session.AuthenticationSessionException
import com.miracl.trust.util.secondsSince1970
import com.miracl.trust.utilities.GmailService
import com.miracl.trust.utilities.MIRACLService
import com.miracl.trust.utilities.MailpitService
import com.miracl.trust.utilities.USER_ID
import com.miracl.trust.utilities.createMailpitUserId
import com.miracl.trust.utilities.generateWrongPin
import com.miracl.trust.utilities.getUnixTime
import com.miracl.trust.utilities.randomNumericPin
Expand All @@ -27,7 +28,6 @@ import org.junit.Before
import org.junit.Test
import java.net.URL
import java.util.Date
import java.util.UUID

class VerificationTest {
private val projectId = BuildConfig.CUV_PROJECT_ID
Expand Down Expand Up @@ -58,16 +58,14 @@ class VerificationTest {
fun testDefaultVerification() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = getUnixTime()
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
Assert.assertNotNull(verificationUrl)

// Get activation token
Expand All @@ -80,8 +78,7 @@ class VerificationTest {
fun testDefaultVerificationBackoff() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

var sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)
Expand All @@ -97,8 +94,7 @@ class VerificationTest {
fun testDefaultVerificationWithSessionDetails() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val qrCode = MIRACLService.obtainAccessId(dvProjectId, dvProjectUrl).qrURL
var authenticationSessionDetailsResult:
Expand All @@ -122,8 +118,7 @@ class VerificationTest {
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
Assert.assertNotNull(verificationUrl)

// Get activation token
Expand All @@ -138,8 +133,7 @@ class VerificationTest {
fun testDefaultVerificationWithCrossDeviceSession() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val qrCode = MIRACLService.obtainAccessId(dvProjectId, dvProjectUrl).qrURL
val crossDeviceSessionResult = miraclTrust.getCrossDeviceSessionFromQRCode(qrCode)
Expand All @@ -155,8 +149,7 @@ class VerificationTest {
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
Assert.assertNotNull(verificationUrl)

// Get activation token
Expand All @@ -171,16 +164,14 @@ class VerificationTest {
fun testDefaultVerificationWithMpinId() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(dvProjectId, dvProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = System.currentTimeMillis() / 1000
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val verificationUrl = GmailService.getVerificationUrl(context, USER_ID, email, timestamp)
val verificationUrl = MailpitService.getVerificationUrl(email, timestamp)
Assert.assertNotNull(verificationUrl)

// Get activation token
Expand Down Expand Up @@ -210,16 +201,14 @@ class VerificationTest {
fun testEmailCodeVerification() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = System.currentTimeMillis() / 1000
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification code from the email
val context = InstrumentationRegistry.getInstrumentation().context
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
val code = MailpitService.getVerificationCode(email, timestamp)
Assert.assertNotNull(code)

// Get activation token
Expand All @@ -232,16 +221,14 @@ class VerificationTest {
fun testEmailCodeVerificationWithMpinId() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = System.currentTimeMillis() / 1000
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
// Fetch the verification code from the email
val code = MailpitService.getVerificationCode(email, timestamp)
Assert.assertNotNull(code)

// Get activation token
Expand Down Expand Up @@ -271,16 +258,14 @@ class VerificationTest {
fun testEmailCodeVerificationWithoutMpinId() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = System.currentTimeMillis() / 1000
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
// Fetch the verification code from the email
val code = MailpitService.getVerificationCode(email, timestamp)
Assert.assertNotNull(code)

// Get activation token
Expand Down Expand Up @@ -314,16 +299,14 @@ class VerificationTest {
fun testEmailCodeVerificationWithRevokedMpinId() = runTest(testCoroutineDispatcher) {
// Send verification email
miraclTrust.updateProjectSettings(evcProjectId, evcProjectUrl)
val addressParts = USER_ID.split("@")
val email = "${addressParts[0]}+${UUID.randomUUID()}@${addressParts[1]}"
val email = createMailpitUserId()

val timestamp = System.currentTimeMillis() / 1000
val sendEmailResult = miraclTrust.sendVerificationEmail(email)
Assert.assertTrue(sendEmailResult is MIRACLSuccess)

// Fetch the verification URL from the email
val context = InstrumentationRegistry.getInstrumentation().context
val code = GmailService.getVerificationCode(context, USER_ID, email, timestamp)
// Fetch the verification code from the email
val code = MailpitService.getVerificationCode(email, timestamp)
Assert.assertNotNull(code)

// Get activation token
Expand Down
Loading
Loading