For #25374: Skip action validation for control messages

pull/543/head
Arturo Mejia 2 years ago committed by mergify[bot]
parent e0822a6e1e
commit 98e3b8bf52

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

@ -237,9 +237,9 @@ class NimbusMessagingStorageTest {
fun `GIVEN a malformed action WHEN calling sanitizeAction THEN return null`() { fun `GIVEN a malformed action WHEN calling sanitizeAction THEN return null`() {
val actionsMap = mapOf("action-1" to "action-1-url") val actionsMap = mapOf("action-1" to "action-1-url")
val notFoundAction = storage.sanitizeAction("messageId", "no-found-action", actionsMap) val notFoundAction = storage.sanitizeAction("messageId", "no-found-action", actionsMap, false)
val emptyAction = storage.sanitizeAction("messageId", "", actionsMap) val emptyAction = storage.sanitizeAction("messageId", "", actionsMap, false)
val blankAction = storage.sanitizeAction("messageId", " ", actionsMap) val blankAction = storage.sanitizeAction("messageId", " ", actionsMap, false)
assertNull(notFoundAction) assertNull(notFoundAction)
assertNull(emptyAction) assertNull(emptyAction)
@ -253,7 +253,7 @@ class NimbusMessagingStorageTest {
storage.malFormedMap["malformed-action"] = "messageId" storage.malFormedMap["malformed-action"] = "messageId"
val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap) val action = storage.sanitizeAction("messageId", "malformed-action", actionsMap, false)
assertNull(action) assertNull(action)
assertFalse(malformedWasReported) 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`() { 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 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) assertNull(action)
assertTrue(storage.malFormedMap.containsKey("malformed-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`() { fun `GIVEN a valid action WHEN calling sanitizeAction THEN return the action`() {
val actionsMap = mapOf("action-1" to "action-1-url") 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) 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 @Test
fun `GIVEN a trigger action WHEN calling sanitizeTriggers THEN return null`() { fun `GIVEN a trigger action WHEN calling sanitizeTriggers THEN return null`() {
val triggersMap = mapOf("trigger-1" to "trigger-1-expression") val triggersMap = mapOf("trigger-1" to "trigger-1-expression")

Loading…
Cancel
Save