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
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,15 +29,15 @@ The MIRACL Trust Android SDK provides the following functionalities:

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

Groovy:

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

Expand Down
14 changes: 14 additions & 0 deletions miracl-sdk/api/miracl-sdk.api
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@ public final class com/miracl/trust/authentication/AuthenticationException$UserN

public final class com/miracl/trust/configuration/Configuration {
public synthetic fun <init> (Lcom/miracl/trust/configuration/Configuration$Builder;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/configuration/Configuration$Builder {
Expand Down Expand Up @@ -200,6 +201,7 @@ public final class com/miracl/trust/model/QuickCode : java/io/Serializable {
public final fun getCode ()Ljava/lang/String;
public final fun getExpireTime ()J
public final fun getTtlSeconds ()I
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/model/User {
Expand All @@ -208,6 +210,7 @@ public final class com/miracl/trust/model/User {
public final fun getProjectId ()Ljava/lang/String;
public final fun getRevoked ()Z
public final fun getUserId ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public abstract class com/miracl/trust/network/ApiException : java/lang/Exception {
Expand Down Expand Up @@ -253,6 +256,7 @@ public final class com/miracl/trust/network/ClientErrorData {
public final fun getCode ()Ljava/lang/String;
public final fun getContext ()Ljava/util/Map;
public final fun getInfo ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/network/HttpMethod : java/lang/Enum {
Expand All @@ -273,6 +277,7 @@ public abstract interface class com/miracl/trust/network/HttpRequestExecutor {
public abstract class com/miracl/trust/network/HttpRequestExecutorException : java/lang/Exception {
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V
public synthetic fun <init> (Ljava/lang/String;Ljava/lang/Throwable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/network/HttpRequestExecutorException$ExecutionError : com/miracl/trust/network/HttpRequestExecutorException {
Expand All @@ -291,6 +296,7 @@ public final class com/miracl/trust/registration/ActivationTokenErrorResponse {
public final fun getAccessId ()Ljava/lang/String;
public final fun getProjectId ()Ljava/lang/String;
public final fun getUserId ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public abstract class com/miracl/trust/registration/ActivationTokenException : java/lang/Exception {
Expand Down Expand Up @@ -320,6 +326,7 @@ public final class com/miracl/trust/registration/ActivationTokenResponse {
public final fun getActivationToken ()Ljava/lang/String;
public final fun getProjectId ()Ljava/lang/String;
public final fun getUserId ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/registration/EmailVerificationMethod : java/lang/Enum {
Expand Down Expand Up @@ -422,10 +429,12 @@ public final class com/miracl/trust/registration/VerificationException$Verificat
public final class com/miracl/trust/registration/VerificationResponse {
public final fun getBackoff ()J
public final fun getMethod ()Lcom/miracl/trust/registration/EmailVerificationMethod;
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/session/AuthenticationSessionDetails : com/miracl/trust/session/SessionDetails {
public final fun getAccessId ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public abstract class com/miracl/trust/session/AuthenticationSessionException : java/lang/Exception {
Expand Down Expand Up @@ -471,6 +480,7 @@ public final class com/miracl/trust/session/CrossDeviceSession {
public final fun getVerificationCustomText ()Ljava/lang/String;
public final fun getVerificationMethod ()Lcom/miracl/trust/session/VerificationMethod;
public final fun getVerificationUrl ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public abstract class com/miracl/trust/session/CrossDeviceSessionException : java/lang/Exception {
Expand Down Expand Up @@ -534,6 +544,7 @@ public final class com/miracl/trust/session/SigningSessionDetails : com/miracl/t
public final fun getSigningDescription ()Ljava/lang/String;
public final fun getSigningHash ()Ljava/lang/String;
public final fun getStatus ()Lcom/miracl/trust/session/SigningSessionStatus;
public fun toString ()Ljava/lang/String;
}

public abstract class com/miracl/trust/session/SigningSessionException : java/lang/Exception {
Expand Down Expand Up @@ -601,6 +612,7 @@ public final class com/miracl/trust/signing/Signature {
public final fun getTimestamp ()I
public final fun getU ()Ljava/lang/String;
public final fun getV ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public final synthetic class com/miracl/trust/signing/Signature$$serializer : kotlinx/serialization/internal/GeneratedSerializer {
Expand Down Expand Up @@ -666,6 +678,7 @@ public final class com/miracl/trust/signing/SigningException$UnsuccessfulAuthent
public final class com/miracl/trust/signing/SigningResult {
public final fun getSignature ()Lcom/miracl/trust/signing/Signature;
public final fun getTimestamp ()Ljava/util/Date;
public fun toString ()Ljava/lang/String;
}

public final class com/miracl/trust/storage/UserDto {
Expand All @@ -678,6 +691,7 @@ public final class com/miracl/trust/storage/UserDto {
public final fun getRevoked ()Z
public final fun getToken ()[B
public final fun getUserId ()Ljava/lang/String;
public fun toString ()Ljava/lang/String;
}

public abstract interface class com/miracl/trust/storage/UserStorage {
Expand Down
2 changes: 1 addition & 1 deletion miracl-sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ plugins {
alias libs.plugins.jreleaser
}

version = '1.8.1'
version = '1.9.0'

android {
namespace 'com.miracl.trust'
Expand Down
16 changes: 2 additions & 14 deletions miracl-sdk/src/main/java/com/miracl/trust/MIRACLTrust.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.miracl.trust

import android.content.Context
import android.net.Uri
import android.os.Build
import androidx.annotation.VisibleForTesting
import com.miracl.trust.authentication.*
import com.miracl.trust.authentication.AuthenticatorScopes
Expand All @@ -14,7 +13,6 @@ import com.miracl.trust.model.QuickCode
import com.miracl.trust.model.User
import com.miracl.trust.network.ApiRequestExecutor
import com.miracl.trust.network.ApiSettings
import com.miracl.trust.network.HttpsURLConnectionRequestExecutor
import com.miracl.trust.registration.*
import com.miracl.trust.session.*
import com.miracl.trust.session.SessionApiManager
Expand All @@ -26,7 +24,6 @@ import com.miracl.trust.storage.UserStorageException
import com.miracl.trust.storage.UserStorage
import com.miracl.trust.util.UrlValidator
import com.miracl.trust.util.json.KotlinxSerializationJsonUtil
import com.miracl.trust.util.log.DefaultLogger
import com.miracl.trust.util.log.Logger
import com.miracl.trust.util.log.LoggerConstants
import com.miracl.trust.util.toUserDto
Expand Down Expand Up @@ -91,7 +88,7 @@ public class MIRACLTrust private constructor(
@VisibleForTesting
internal var resultHandlerDispatcher: CoroutineDispatcher = Dispatchers.Main

private val deviceName: String = configuration.deviceName ?: Build.MODEL
private val deviceName: String = configuration.deviceName

/** Project ID setting for the application in MIRACL Trust platform. */
public var projectId: String = configuration.projectId
Expand All @@ -102,18 +99,9 @@ public class MIRACLTrust private constructor(
//region Initialization
init {
logger = configuration.logger
?: DefaultLogger(
configuration.loggingLevel ?: Logger.LoggingLevel.NONE
)

val httpRequestExecutor = configuration.httpRequestExecutor
?: HttpsURLConnectionRequestExecutor(
configuration.connectTimeout,
configuration.readTimeout
)

val apiRequestExecutor = ApiRequestExecutor(
httpRequestExecutor,
configuration.httpRequestExecutor,
KotlinxSerializationJsonUtil,
configuration.applicationInfo
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package com.miracl.trust.configuration

import android.os.Build
import com.miracl.trust.factory.ComponentFactory
import com.miracl.trust.network.HttpRequestExecutor
import com.miracl.trust.network.HttpsURLConnectionRequestExecutor
import com.miracl.trust.storage.UserStorage
import com.miracl.trust.util.UrlValidator
import com.miracl.trust.util.log.DefaultLogger
import com.miracl.trust.util.log.Logger
import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext
Expand All @@ -18,12 +21,12 @@ import kotlin.jvm.Throws
public class Configuration private constructor(
internal val projectId: String,
internal val projectUrl: String,
internal val deviceName: String,
internal val applicationInfo: String? = null,
internal val deviceName: String? = null,
internal val httpRequestExecutor: HttpRequestExecutor? = null,
internal val httpRequestExecutor: HttpRequestExecutor,
internal val componentFactory: ComponentFactory? = null,
internal val userStorage: UserStorage? = null,
internal val logger: Logger? = null,
internal val logger: Logger,
internal val loggingLevel: Logger.LoggingLevel? = null,
internal val miraclCoroutineContext: CoroutineContext,
internal val connectTimeout: Int,
Expand All @@ -39,18 +42,33 @@ public class Configuration private constructor(
this(
builder.projectId,
builder.projectUrl,
builder.deviceNameValue,
builder.applicationInfo,
builder.deviceName,
builder.httpRequestExecutor,
builder.httpRequestExecutorValue,
builder.componentFactory,
builder.userStorage,
builder.logger,
builder.loggerValue,
builder.loggingLevel,
builder.coroutineContext,
builder.connectTimeout,
builder.readTimeout
)

override fun toString(): String {
return "Configuration(" +
"projectId=$projectId, " +
"projectUrl=$projectUrl, " +
"deviceName=$deviceName, " +
"applicationInfo=$applicationInfo, " +
"httpRequestExecutor=$httpRequestExecutor, " +
"userStorage=${userStorage ?: "DefaultUserStorage"}, " +
"logger=$logger, " +
"loggingLevel=$loggingLevel, " +
"connectTimeout=$connectTimeout, " +
"readTimeout=$readTimeout" +
")"
}

/**
* Builds a [Configuration] object.
*
Expand All @@ -61,19 +79,19 @@ public class Configuration private constructor(
internal val projectId: String,
internal val projectUrl: String = DEFAULT_PLATFORM_URL
) {
internal var applicationInfo: String? = null
internal lateinit var deviceNameValue: String
private set
internal var deviceName: String? = null
internal var applicationInfo: String? = null
private set
internal var httpRequestExecutor: HttpRequestExecutor? = null
internal lateinit var httpRequestExecutorValue: HttpRequestExecutor
private set
internal var componentFactory: ComponentFactory? = null
private set
internal var coroutineContext: CoroutineContext = Dispatchers.IO
private set
internal var userStorage: UserStorage? = null
private set
internal var logger: Logger? = null
internal lateinit var loggerValue: Logger
private set
internal var loggingLevel: Logger.LoggingLevel? = null
private set
Expand All @@ -98,13 +116,13 @@ public class Configuration private constructor(
* Sets value of device name.
*/
public fun deviceName(deviceName: String): Builder =
apply { this.deviceName = deviceName }
apply { this.deviceNameValue = deviceName }

/**
* Provides implementation of the [HttpRequestExecutor] interface to be used by the SDK.
*/
public fun httpRequestExecutor(httpRequestExecutor: HttpRequestExecutor): Builder =
apply { this.httpRequestExecutor = httpRequestExecutor }
apply { this.httpRequestExecutorValue = httpRequestExecutor }

/**
* Provides implementation of the [UserStorage] interface to be used by the SDK.
Expand All @@ -116,7 +134,7 @@ public class Configuration private constructor(
* Provides implementation of the [Logger] interface to be used by the SDK.
*/
public fun logger(logger: Logger): Builder =
apply { this.logger = logger }
apply { this.loggerValue = logger }

/**
* Provides specific [Logger.LoggingLevel] to be used by the SDK default logger.
Expand Down Expand Up @@ -162,6 +180,21 @@ public class Configuration private constructor(
throw ConfigurationException.InvalidProjectUrl
}

if (!this::deviceNameValue.isInitialized) {
deviceNameValue = Build.MODEL
}

if (!this::httpRequestExecutorValue.isInitialized) {
httpRequestExecutorValue =
HttpsURLConnectionRequestExecutor(connectTimeout, readTimeout)
}

if (!this::loggerValue.isInitialized) {
val loggingLevel = loggingLevel ?: Logger.LoggingLevel.NONE
loggerValue = DefaultLogger(loggingLevel)
this.loggingLevel = loggingLevel
}

return Configuration(this)
}
}
Expand Down
6 changes: 5 additions & 1 deletion miracl-sdk/src/main/java/com/miracl/trust/model/QuickCode.kt
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,8 @@ public class QuickCode internal constructor(
public val code: String,
public val expireTime: Long,
public val ttlSeconds: Int
) : Serializable
) : Serializable {
override fun toString(): String {
return "QuickCode(code=<REDACTED>, expireTime=$expireTime, ttlSeconds=$ttlSeconds"
}
}
13 changes: 13 additions & 0 deletions miracl-sdk/src/main/java/com/miracl/trust/model/User.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,19 @@ public class User internal constructor(
) {
/** Hex encoded SHA256 representation of the mpinId property. */
public val hashedMpinId: String = mpinId.toSHA256()

override fun toString(): String {
return "User(" +
"userId=$userId, " +
"projectId=$projectId, " +
"revoked=$revoked, " +
"pinLength=$pinLength, " +
"hashedMpinId=$hashedMpinId, " +
"token=<REDACTED>, " +
"dtas=$dtas, " +
"publicKey=$publicKey" +
")"
}
}

internal fun User.isEmpty(): Boolean = dtas.isBlank() || mpinId.isEmpty() || token.isEmpty()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,6 @@ public sealed class ApiException(public val url: String, cause: Throwable? = nul
ApiException(url, cause)

override fun toString(): String {
return "${super.toString()} $url: ${
when (val cause = cause) {
is HttpRequestExecutorException.HttpError -> {
"${cause.responseCode} - ${cause.responseBody}"
}

else -> {
"${cause?.message}"
}
}
}"
return "${this.javaClass.simpleName}(url=$url, cause=$cause)"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,8 @@ public class ClientErrorData internal constructor(
public val code: String,
public val info: String,
public val context: Map<String, String>?
)
) {
override fun toString(): String {
return "ClientErrorData(code=$code, info=$info, context=$context)"
}
}
Loading