For #25374: Skip action validation for control messages
(cherry picked from commit 98e3b8bf52
)
This commit is contained in:
parent
ed304886b2
commit
6f41e851ba
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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")
|
||||
|
|
Loading…
Reference in New Issue