Skip to content
Draft
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 @@ -153,10 +153,10 @@ class MessageHelper(
}
}
val personal = address.personal
return if (!personal.isNullOrEmpty() && !isSpoofAddress(personal)) {
personal
} else {
address.address
return when {
personal.isNullOrEmpty() -> address.address
isSpoofAddress(personal) -> "$personal <${address.address}>"
else -> personal
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class MessageHelperTest : RobolectricTest() {
}

@Test
fun toFriendly_spoofPreventionOverridesPersonal() {
fun toFriendly_spoofPreventionExpandsToShowBothPersonalAndAddress() {
val address = Address("test@testor.com", "potus@whitehouse.gov")
val friendly =
toFriendly(
Expand All @@ -143,7 +143,21 @@ class MessageHelperTest : RobolectricTest() {
messageListPreferencesManager.getConfig().contactNameColor,
contactRepository,
)
assertThat(friendly).isEqualTo("test@testor.com")
assertThat(friendly).isEqualTo("potus@whitehouse.gov <test@testor.com>")
}

@Test
fun toFriendly_firefoxRelayAddressShowsOriginalSenderAndRelayAddress() {
val address = Address("alias123@mozmail.com", "sender@example.com [via Relay]")
val friendly =
toFriendly(
address,
messageListPreferencesManager.getConfig().isShowCorrespondentNames,
messageListPreferencesManager.getConfig().isChangeContactNameColor,
messageListPreferencesManager.getConfig().contactNameColor,
contactRepository,
)
assertThat(friendly).isEqualTo("sender@example.com [via Relay] <alias123@mozmail.com>")
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,9 +61,9 @@ internal class RealMessageViewRecipientFormatter(
}

private fun buildDisplayName(address: Address): CharSequence {
return address.personal?.takeIf {
it.isNotBlank() && !it.equals(meText, ignoreCase = true) && !isSpoofAddress(it)
} ?: address.address
val personal = address.personal?.takeIf { it.isNotBlank() && !it.equals(meText, ignoreCase = true) }
?: return address.address
return if (isSpoofAddress(personal)) "$personal <${address.address}>" else personal
}

private fun isSpoofAddress(displayName: String): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -152,15 +152,27 @@ class MessageViewRecipientFormatterTest : RobolectricTest() {
}

@Test
fun `do not show display name that looks like an email address`() {
fun `spoof prevention expands to show both display name and actual address`() {
val recipientFormatter = createRecipientFormatter()

val displayName = recipientFormatter.getDisplayName(
Address("mallory@domain.example", "potus@whitehouse.gov"),
account,
)

assertThat(displayName).isEqualTo("mallory@domain.example")
assertThat(displayName).isEqualTo("potus@whitehouse.gov <mallory@domain.example>")
}

@Test
fun `firefox relay address shows original sender and relay address`() {
val recipientFormatter = createRecipientFormatter()

val displayName = recipientFormatter.getDisplayName(
Address("alias123@mozmail.com", "sender@example.com [via Relay]"),
account,
)

assertThat(displayName).isEqualTo("sender@example.com [via Relay] <alias123@mozmail.com>")
}

@Test
Expand Down
Loading