@@ -8,6 +8,7 @@ import com.bitwarden.fido.Origin
8
8
import com.bitwarden.fido.PublicKeyCredentialAuthenticatorAssertionResponse
9
9
import com.bitwarden.fido.UnverifiedAssetLink
10
10
import com.bitwarden.sdk.Fido2CredentialStore
11
+ import com.x8bit.bitwarden.R
11
12
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2AttestationResponse
12
13
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionRequest
13
14
import com.x8bit.bitwarden.data.autofill.fido2.model.Fido2CredentialAssertionResult
@@ -38,7 +39,6 @@ import io.mockk.slot
38
39
import io.mockk.unmockkStatic
39
40
import kotlinx.coroutines.test.runTest
40
41
import kotlinx.serialization.SerializationException
41
- import kotlinx.serialization.encodeToString
42
42
import kotlinx.serialization.json.Json
43
43
import org.junit.jupiter.api.AfterEach
44
44
import org.junit.jupiter.api.Assertions.assertEquals
@@ -342,7 +342,10 @@ class Fido2CredentialManagerTest {
342
342
)
343
343
344
344
assertEquals(
345
- Fido2RegisterCredentialResult .Error (" " .asText()),
345
+ Fido2RegisterCredentialResult .Error (
346
+ R .string.passkey_operation_failed_because_app_is_signed_incorrectly
347
+ .asText(),
348
+ ),
346
349
result,
347
350
)
348
351
}
@@ -366,32 +369,10 @@ class Fido2CredentialManagerTest {
366
369
)
367
370
368
371
assertEquals(
369
- Fido2RegisterCredentialResult .Error (" " .asText()),
370
- result,
371
- )
372
- }
373
-
374
- @Test
375
- fun `registerFido2Credential should return Error when toHostOrPathOrNull is null` () =
376
- runTest {
377
- val mockSigningInfo = mockk<SigningInfo > {
378
- every { apkContentsSigners } returns arrayOf(Signature (DEFAULT_APP_SIGNATURE ))
379
- every { hasMultipleSigners() } returns false
380
- }
381
- val mockFido2CredentialRequest = createMockFido2CreateCredentialRequest(
382
- number = 1 ,
383
- origin = " illegal empty spaces" ,
384
- signingInfo = mockSigningInfo,
385
- )
386
-
387
- val result = fido2CredentialManager.registerFido2Credential(
388
- userId = " mockUserId" ,
389
- fido2CreateCredentialRequest = mockFido2CredentialRequest,
390
- selectedCipherView = createMockCipherView(number = 1 ),
391
- )
392
-
393
- assertEquals(
394
- Fido2RegisterCredentialResult .Error (" " .asText()),
372
+ Fido2RegisterCredentialResult .Error (
373
+ R .string.passkey_operation_failed_because_app_signature_is_invalid
374
+ .asText(),
375
+ ),
395
376
result,
396
377
)
397
378
}
@@ -434,7 +415,10 @@ class Fido2CredentialManagerTest {
434
415
)
435
416
436
417
assertEquals(
437
- Fido2RegisterCredentialResult .Error (" " .asText()),
418
+ Fido2RegisterCredentialResult .Error (
419
+ R .string.passkey_registration_failed_due_to_an_internal_error
420
+ .asText(),
421
+ ),
438
422
result,
439
423
)
440
424
}
@@ -467,7 +451,10 @@ class Fido2CredentialManagerTest {
467
451
}
468
452
469
453
assertEquals(
470
- Fido2RegisterCredentialResult .Error (" " .asText()),
454
+ Fido2RegisterCredentialResult .Error (
455
+ R .string.passkey_operation_failed_because_host_url_is_not_present_in_request
456
+ .asText(),
457
+ ),
471
458
result,
472
459
)
473
460
}
@@ -520,7 +507,7 @@ class Fido2CredentialManagerTest {
520
507
assertEquals(
521
508
AuthenticateFido2CredentialRequest (
522
509
userId = " activeUserId" ,
523
- origin = DEFAULT_ORIGIN ,
510
+ origin = DEFAULT_WEB_ORIGIN ,
524
511
requestJson = """ {"publicKey": ${mockRequest.requestJson} }""" ,
525
512
clientData = ClientData .DefaultWithCustomHash (mockRequest.clientDataHash!! ),
526
513
selectedCipherView = mockCipherView,
@@ -570,14 +557,7 @@ class Fido2CredentialManagerTest {
570
557
assertEquals(
571
558
AuthenticateFido2CredentialRequest (
572
559
userId = " activeUserId" ,
573
- origin = Origin .Android (
574
- UnverifiedAssetLink (
575
- packageName = DEFAULT_PACKAGE_NAME ,
576
- sha256CertFingerprint = DEFAULT_CERT_FINGERPRINT ,
577
- host = DEFAULT_HOST ,
578
- assetLinkUrl = mockRequest.origin!! ,
579
- ),
580
- ),
560
+ origin = DEFAULT_WEB_ORIGIN ,
581
561
requestJson = """ {"publicKey": ${mockRequest.requestJson} }""" ,
582
562
clientData = ClientData .DefaultWithExtraData (
583
563
androidPackageName = " android:apk-key-hash:$DEFAULT_APP_SIGNATURE " ,
@@ -628,7 +608,7 @@ class Fido2CredentialManagerTest {
628
608
UnverifiedAssetLink (
629
609
DEFAULT_PACKAGE_NAME ,
630
610
DEFAULT_CERT_FINGERPRINT ,
631
- mockAssertionOptions.relyingPartyId!! ,
611
+ " https:// ${ mockAssertionOptions.relyingPartyId!! } " ,
632
612
" https://${mockAssertionOptions.relyingPartyId} " ,
633
613
),
634
614
),
@@ -666,7 +646,10 @@ class Fido2CredentialManagerTest {
666
646
}
667
647
668
648
assertEquals(
669
- Fido2CredentialAssertionResult .Error (" " .asText()),
649
+ Fido2CredentialAssertionResult .Error (
650
+ R .string.passkey_operation_failed_because_host_url_is_not_present_in_request
651
+ .asText(),
652
+ ),
670
653
result,
671
654
)
672
655
}
@@ -751,7 +734,10 @@ class Fido2CredentialManagerTest {
751
734
}
752
735
753
736
assertEquals(
754
- Fido2CredentialAssertionResult .Error (" " .asText()),
737
+ Fido2CredentialAssertionResult .Error (
738
+ R .string.passkey_authentication_failed_due_to_an_internal_error
739
+ .asText(),
740
+ ),
755
741
authResult,
756
742
)
757
743
}
@@ -781,7 +767,10 @@ class Fido2CredentialManagerTest {
781
767
}
782
768
783
769
assertEquals(
784
- Fido2CredentialAssertionResult .Error (" " .asText()),
770
+ Fido2CredentialAssertionResult .Error (
771
+ R .string.passkey_operation_failed_because_relying_party_cannot_be_identified
772
+ .asText(),
773
+ ),
785
774
result,
786
775
)
787
776
}
@@ -805,7 +794,7 @@ class Fido2CredentialManagerTest {
805
794
)
806
795
807
796
assertEquals(
808
- Fido2CredentialAssertionResult .Error (" " .asText()),
797
+ Fido2CredentialAssertionResult .Error (R .string.generic_error_message .asText()),
809
798
result,
810
799
)
811
800
@@ -819,14 +808,15 @@ private const val DEFAULT_PACKAGE_NAME = "com.x8bit.bitwarden"
819
808
private const val DEFAULT_APP_SIGNATURE = " 0987654321ABCDEF"
820
809
private const val DEFAULT_CERT_FINGERPRINT = " 30:39:38:37:36:35:34:33:32:31:41:42:43:44:45:46"
821
810
private const val DEFAULT_HOST = " bitwarden.com"
822
- private val DEFAULT_ORIGIN = Origin .Android (
811
+ private val DEFAULT_ANDROID_ORIGIN = Origin .Android (
823
812
UnverifiedAssetLink (
824
813
packageName = DEFAULT_PACKAGE_NAME ,
825
814
sha256CertFingerprint = DEFAULT_CERT_FINGERPRINT ,
826
815
host = DEFAULT_HOST ,
827
816
assetLinkUrl = " bitwarden.com" ,
828
817
),
829
818
)
819
+ private val DEFAULT_WEB_ORIGIN = Origin .Web (" bitwarden.com" )
830
820
private const val DEFAULT_ALLOW_LIST = """
831
821
{
832
822
"apps": [
0 commit comments