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
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ internal class BuildSubjectUseCase @Inject constructor(
) = FingerprintSample(
fromDomainToModuleApi(result.finger),
result.template,
result.templateQualityScore,
result.format,
referenceId,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,26 +72,27 @@ internal class FingerprintMatcherUseCaseTest {

@Test
fun `Skips matching if there are no probes`() = runTest {
val results = useCase.invoke(
MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = emptyList(),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
project
).toList()
val results = useCase
.invoke(
MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = emptyList(),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
project,
).toList()

coVerify(exactly = 0) { bioSdkWrapper.match(any(), any(), any()) }

assertThat(results).containsExactly(
MatcherUseCase.MatcherState.Success(
matchResultItems = emptyList(),
totalCandidates = 0,
matcherName = ""
)
matcherName = "",
),
)
}

Expand All @@ -101,32 +102,33 @@ internal class FingerprintMatcherUseCaseTest {
coEvery { enrolmentRecordRepository.loadFaceIdentities(any(), any(), any(), project, onCandidateLoaded) } returns emptyList()
coEvery { bioSdkWrapper.match(any(), any(), any()) } returns listOf()

val results = useCase.invoke(
MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = listOf(
MatchParams.FingerprintSample(
IFingerIdentifier.LEFT_3RD_FINGER,
"format",
byteArrayOf(1, 2, 3),
val results = useCase
.invoke(
MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = listOf(
MatchParams.FingerprintSample(
IFingerIdentifier.LEFT_3RD_FINGER,
"format",
byteArrayOf(1, 2, 3),
),
),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
project
).toList()
project,
).toList()

coVerify(exactly = 0) { bioSdkWrapper.match(any(), any(), any()) }

assertThat(results).containsExactly(
MatcherUseCase.MatcherState.Success(
matchResultItems = emptyList(),
totalCandidates = 0,
matcherName = ""
)
matcherName = "",
),
)
}

Expand All @@ -140,7 +142,7 @@ internal class FingerprintMatcherUseCaseTest {
any(),
any(),
project,
onCandidateLoaded
onCandidateLoaded,
)
} returns listOf(
FingerprintIdentity(
Expand All @@ -161,26 +163,27 @@ internal class FingerprintMatcherUseCaseTest {
)
coEvery { bioSdkWrapper.match(any(), any(), any()) } returns listOf()

useCase.invoke(
matchParams = MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = listOf(
MatchParams.FingerprintSample(
IFingerIdentifier.LEFT_3RD_FINGER,
"format",
byteArrayOf(1, 2, 3),
useCase
.invoke(
matchParams = MatchParams(
probeReferenceId = "referenceId",
probeFingerprintSamples = listOf(
MatchParams.FingerprintSample(
IFingerIdentifier.LEFT_3RD_FINGER,
"format",
byteArrayOf(1, 2, 3),
),
),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
fingerprintSDK = SECUGEN_SIM_MATCHER,
flowType = FlowType.VERIFY,
queryForCandidates = SubjectQuery(),
biometricDataSource = BiometricDataSource.Simprints,
),
project
).toList()
project,
).toList()

coVerify { bioSdkWrapper.match(any(), any(), any()) }
}

private fun fingerprintSample(finger: IFingerIdentifier) = FingerprintSample(finger, byteArrayOf(1), 42, "format", "referenceId")
private fun fingerprintSample(finger: IFingerIdentifier) = FingerprintSample(finger, byteArrayOf(1), "format", "referenceId")
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import java.util.UUID
data class FingerprintSample(
val fingerIdentifier: IFingerIdentifier,
val template: ByteArray,
val templateQualityScore: Int,
val format: String,
val referenceId: String,
val id: String = UUID.randomUUID().toString(),
Expand All @@ -23,15 +22,13 @@ data class FingerprintSample(

if (fingerIdentifier != other.fingerIdentifier) return false
if (!template.contentEquals(other.template)) return false
if (templateQualityScore != other.templateQualityScore) return false

return true
}

override fun hashCode(): Int {
var result = fingerIdentifier.hashCode()
result = 31 * result + template.contentHashCode()
result = 31 * result + templateQualityScore
return result
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,5 @@ class DbFingerprintSample : RealmObject {
var referenceId = ""
var fingerIdentifier: Int = -1
var template: ByteArray = byteArrayOf()
var templateQualityScore: Int = -1
var format: String = ""
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.simprints.infra.enrolment.records.repository.commcare
import android.content.Context
import android.database.Cursor
import android.net.Uri
import androidx.core.net.toUri
import com.fasterxml.jackson.core.type.TypeReference
import com.fasterxml.jackson.databind.module.SimpleModule
import com.simprints.core.DispatcherIO
Expand Down Expand Up @@ -41,9 +42,9 @@ internal class CommCareIdentityDataSource @Inject constructor(
@ApplicationContext private val context: Context,
@DispatcherIO private val dispatcher: CoroutineDispatcher,
) : IdentityDataSource {
private fun getCaseMetadataUri(packageName: String): Uri = Uri.parse("content://$packageName.case/casedb/case")
private fun getCaseMetadataUri(packageName: String): Uri = "content://$packageName.case/casedb/case".toUri()

private fun getCaseDataUri(packageName: String): Uri = Uri.parse("content://$packageName.case/casedb/data")
private fun getCaseDataUri(packageName: String): Uri = "content://$packageName.case/casedb/data".toUri()

override suspend fun loadFingerprintIdentities(
query: SubjectQuery,
Expand All @@ -65,7 +66,6 @@ internal class CommCareIdentityDataSource @Inject constructor(
fingerprintReference.templates.map { fingerprintTemplate ->
FingerprintSample(
fingerIdentifier = fingerprintTemplate.finger,
templateQualityScore = fingerprintTemplate.quality,
template = encoder.base64ToBytes(fingerprintTemplate.template),
format = fingerprintReference.format,
referenceId = fingerprintReference.id,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ internal fun DbFingerprintSample.fromDbToDomain(): FingerprintSample = Fingerpri
id = id,
fingerIdentifier = IFingerIdentifier.entries[fingerIdentifier],
template = template,
templateQualityScore = templateQualityScore,
format = format,
referenceId = referenceId,
)
Expand All @@ -18,6 +17,5 @@ internal fun FingerprintSample.fromDomainToDb(): DbFingerprintSample = DbFingerp
sample.referenceId = referenceId
sample.fingerIdentifier = fingerIdentifier.ordinal
sample.template = template
sample.templateQualityScore = templateQualityScore
sample.format = format
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ internal fun List<FingerprintSample>.toApi(encoder: EncodingUtils): ApiFingerpri
first().referenceId,
map {
ApiFingerprintTemplate(
it.templateQualityScore,
encoder.byteArrayToBase64(it.template),
it.fingerIdentifier.toApi(),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.annotation.Keep

@Keep
internal data class ApiFingerprintTemplate(
val quality: Int,
val template: String,
val finger: ApiFinger,
)
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,12 @@ class CommCareIdentityDataSourceTest {
fingerprints = listOf(
FingerprintSample(
fingerIdentifier = LEFT_THUMB,
templateQualityScore = 99,
template = byteArrayOf(),
format = "ISO_19794_2",
referenceId = "referenceId",
),
FingerprintSample(
fingerIdentifier = LEFT_INDEX_FINGER,
templateQualityScore = 88,
template = byteArrayOf(),
format = "ISO_19794_2",
referenceId = "referenceId",
Expand All @@ -71,14 +69,12 @@ class CommCareIdentityDataSourceTest {
fingerprints = listOf(
FingerprintSample(
fingerIdentifier = LEFT_THUMB,
templateQualityScore = 77,
template = byteArrayOf(),
format = "ISO_19794_2",
referenceId = "referenceId",
),
FingerprintSample(
fingerIdentifier = LEFT_INDEX_FINGER,
templateQualityScore = 66,
template = byteArrayOf(),
format = "ISO_19794_2",
referenceId = "referenceId",
Expand Down Expand Up @@ -245,7 +241,6 @@ class CommCareIdentityDataSourceTest {
expected.fingerprints
.zip(actual.fingerprints) { expectedFingerprint, actualFingerprint ->
expectedFingerprint.fingerIdentifier == actualFingerprint.fingerIdentifier &&
expectedFingerprint.templateQualityScore == actualFingerprint.templateQualityScore &&
expectedFingerprint.template.contentEquals(
actualFingerprint.template,
) &&
Expand Down Expand Up @@ -338,7 +333,6 @@ class CommCareIdentityDataSourceTest {
expected.fingerprints
.zip(actual.fingerprints) { expectedFingerprint, actualFingerprint ->
expectedFingerprint.fingerIdentifier == actualFingerprint.fingerIdentifier &&
expectedFingerprint.templateQualityScore == actualFingerprint.templateQualityScore &&
expectedFingerprint.template.contentEquals(
actualFingerprint.template,
) &&
Expand Down Expand Up @@ -425,7 +419,6 @@ class CommCareIdentityDataSourceTest {
expected.fingerprints
.zip(actual.fingerprints) { expectedFingerprint, actualFingerprint ->
expectedFingerprint.fingerIdentifier == actualFingerprint.fingerIdentifier &&
expectedFingerprint.templateQualityScore == actualFingerprint.templateQualityScore &&
expectedFingerprint.template.contentEquals(
actualFingerprint.template,
) &&
Expand Down Expand Up @@ -573,7 +566,6 @@ class CommCareIdentityDataSourceTest {
expected.fingerprints
.zip(actual.fingerprints) { expectedFingerprint, actualFingerprint ->
expectedFingerprint.fingerIdentifier == actualFingerprint.fingerIdentifier &&
expectedFingerprint.templateQualityScore == actualFingerprint.templateQualityScore &&
expectedFingerprint.template.contentEquals(
actualFingerprint.template,
) &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -408,5 +408,5 @@ class EnrolmentRecordLocalDataSourceImplTest {
private fun getRandomFingerprintSample(
id: String = UUID.randomUUID().toString(),
referenceId: String = "referenceId",
) = FingerprintSample(IFingerIdentifier.LEFT_3RD_FINGER, Random.nextBytes(64), 42, "fingerprintTemplateFormat", referenceId, id)
) = FingerprintSample(IFingerIdentifier.LEFT_3RD_FINGER, Random.nextBytes(64), "fingerprintTemplateFormat", referenceId, id)
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@ class DbSubjectTest {
val fingerprintSample = FingerprintSample(
IFingerIdentifier.RIGHT_3RD_FINGER,
Random.nextBytes(64),
30,
"NEC_1",
REFERENCE_ID,
)
Expand Down Expand Up @@ -68,7 +67,6 @@ class DbSubjectTest {
val fingerprintSample = DbFingerprintSample().apply {
fingerIdentifier = IFingerIdentifier.RIGHT_3RD_FINGER.ordinal
template = Random.nextBytes(64)
templateQualityScore = 30
format = "NEC_1"
referenceId = REFERENCE_ID
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,6 @@ class EnrolmentRecordRemoteDataSourceImplTest {
FingerprintSample(
IFingerIdentifier.LEFT_3RD_FINGER,
FINGERPRINT_TEMPLATE,
50,
"ISO_19794_2",
"5289df73-7df5-3326-bcdd-22597afb1fac",
),
Expand All @@ -91,7 +90,6 @@ class EnrolmentRecordRemoteDataSourceImplTest {
id = "5289df73-7df5-3326-bcdd-22597afb1fac",
templates = listOf(
ApiFingerprintTemplate(
quality = 50,
template = BASE64_FINGERPRINT_TEMPLATE,
finger = ApiFinger.LEFT_3RD_FINGER,
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import androidx.annotation.Keep
import com.fasterxml.jackson.annotation.JsonSubTypes
import com.fasterxml.jackson.annotation.JsonTypeInfo
import com.simprints.core.domain.fingerprint.IFingerIdentifier
import com.simprints.infra.events.event.domain.models.subject.BiometricReference
import com.simprints.infra.events.event.domain.models.subject.FaceTemplate
import com.simprints.infra.events.event.domain.models.subject.FingerprintTemplate
import com.simprints.infra.eventsync.event.remote.models.subject.biometricref.face.ApiFaceReference
Expand Down Expand Up @@ -40,15 +39,6 @@ internal enum class ApiBiometricReferenceType {
FingerprintReference,
}

internal fun BiometricReference.fromDomainToApi() = when (this) {
is DomainFaceReference -> {
ApiFaceReference(id, templates.map { it.fromDomainToApi() }, format, metadata)
}
is DomainFingerprintReference -> {
ApiFingerprintReference(id, templates.map { it.fromDomainToApi() }, format, metadata)
}
}

internal fun ApiBiometricReference.fromApiToDomain() = when (this.type) {
ApiBiometricReferenceType.FaceReference -> (this as ApiFaceReference).fromApiToDomain()
ApiBiometricReferenceType.FingerprintReference -> (this as ApiFingerprintReference).fromApiToDomain()
Expand All @@ -63,6 +53,4 @@ internal fun FaceTemplate.fromDomainToApi() = ApiFaceTemplate(template)
internal fun ApiFingerprintReference.fromApiToDomain() =
DomainFingerprintReference(id, templates.map { it.fromApiToDomain() }, format, metadata)

internal fun ApiFingerprintTemplate.fromApiToDomain() = FingerprintTemplate(quality, template, IFingerIdentifier.valueOf(finger.name))

internal fun FingerprintTemplate.fromDomainToApi() = ApiFingerprintTemplate(quality, template, finger)
internal fun ApiFingerprintTemplate.fromApiToDomain() = FingerprintTemplate(template, IFingerIdentifier.valueOf(finger.name))
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import com.simprints.core.domain.fingerprint.IFingerIdentifier

@Keep
internal data class ApiFingerprintTemplate(
val quality: Int,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't we need to send the template quality to BFSID?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we send it as part of the FingerprintCaptureEvent payload
it is sent as part of the session in json format
quality is still exist in ApiFingerprintCapturePayload

val template: String,
val finger: IFingerIdentifier,
)
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,6 @@ class SubjectFactory @Inject constructor(
FingerprintSample(
captureResult.identifier,
sample.template,
sample.templateQualityScore,
sample.format,
fingerprintResponse.referenceId,
)
Expand All @@ -133,7 +132,6 @@ class SubjectFactory @Inject constructor(
): FingerprintSample = FingerprintSample(
fingerIdentifier = template.finger,
template = encodingUtils.base64ToBytes(template.template),
templateQualityScore = template.quality,
format = format,
referenceId = referenceId,
)
Expand Down
Loading