For #25374: Skip action validation for control messages

(cherry picked from commit 98e3b8bf52)
This commit is contained in:
Arturo Mejia 2022-05-24 17:45:23 -04:00
parent ed304886b2
commit 6f41e851ba
2 changed files with 35 additions and 19 deletions

View File

@ -51,7 +51,7 @@ class NimbusMessagingStorage(
val storageMetadata = metadataStorage.getMetadata()
return nimbusMessages.mapNotNull { (key, value) ->
val action = sanitizeAction(key, value.action, nimbusActions) ?: return@mapNotNull null
val action = sanitizeAction(key, value.action, nimbusActions, value.isControl) ?: return@mapNotNull null
Message(
id = key,
data = value,
@ -124,20 +124,26 @@ class NimbusMessagingStorage(
internal fun sanitizeAction(
messageId: String,
unsafeAction: String,
nimbusActions: Map<String, String>
nimbusActions: Map<String, String>,
isControl: Boolean
): String? {
return if (unsafeAction.startsWith("http")) {
unsafeAction
} else {
val safeAction = nimbusActions[unsafeAction]
if (safeAction.isNullOrBlank() || safeAction.isEmpty()) {
if (!malFormedMap.containsKey(unsafeAction)) {
reportMalformedMessage(messageId)
}
malFormedMap[unsafeAction] = messageId
return null
return when {
unsafeAction.startsWith("http") -> {
unsafeAction
}
isControl -> "CONTROL_ACTION"
else -> {
val safeAction = nimbusActions[unsafeAction]
if (safeAction.isNullOrBlank() || safeAction.isEmpty()) {
if (!malFormedMap.containsKey(unsafeAction)) {
reportMalformedMessage(messageId)
}
malFormedMap[unsafeAction] = messageId
return null
}
safeAction
}
safeAction
}
}

View File

@ -237,9 +237,9 @@ class NimbusMessagingStorageTest {
fun `GIVEN a malformed action WHEN calling sanitizeAction THEN return null`() {
val actionsMap = mapOf("action-1" to "action-1-url")
val notFoundAction = storage.sanitizeAction("messageId", "no-found-action", actionsMap)
val emptyAction = storage.sanitizeAction("messageId", "", actionsMap)
val blankAction = storage.sanitizeAction("messageId", " ", actionsMap)
val notFoundAction = storage.sanitizeAction("messageId", "no-found-action", actionsMap, false)
val emptyAction = storage.sanitizeAction("messageId", "", actionsMap, false)
val blankAction = storage.sanitizeAction("messageId", " ", actionsMap, false)
assertNull(notFoundAction)
assertNull(emptyAction)
@ -253,7 +253,7 @@ class NimbusMessagingStorageTest {
storage.malFormedMap["malformed-action"] = "messageId"
val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap)
val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap, false)
assertNull(action)
assertFalse(malformedWasReported)
@ -263,7 +263,7 @@ class NimbusMessagingStorageTest {
fun `GIVEN a non-previously stored malformed action WHEN calling sanitizeAction THEN return null and report malFormed`() {
val actionsMap = mapOf("action-1" to "action-1-url")
val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap)
val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap, false)
assertNull(action)
assertTrue(storage.malFormedMap.containsKey("malformed-action"))
@ -282,11 +282,21 @@ class NimbusMessagingStorageTest {
fun `GIVEN a valid action WHEN calling sanitizeAction THEN return the action`() {
val actionsMap = mapOf("action-1" to "action-1-url")
val validAction = storage.sanitizeAction("messageId", "action-1", actionsMap)
val validAction = storage.sanitizeAction("messageId", "action-1", actionsMap, false)
assertEquals("action-1-url", validAction)
}
@Test
fun `GIVEN a valid action for control message WHEN calling sanitizeAction THEN return a empty action`() {
val actionsMap = mapOf("action-1" to "action-1-url")
val validAction = storage.sanitizeAction("messageId", "", actionsMap, true)
assertEquals("CONTROL_ACTION", validAction)
assertFalse(malformedWasReported)
}
@Test
fun `GIVEN a trigger action WHEN calling sanitizeTriggers THEN return null`() {
val triggersMap = mapOf("trigger-1" to "trigger-1-expression")