Skip to content

Commit

Permalink
#1376 Fix tag parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Jun 13, 2020
1 parent fba9506 commit 8037795
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 7 deletions.
13 changes: 7 additions & 6 deletions thehive/app/org/thp/thehive/models/Tag.scala
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ object Tag {
val namespacePredicateValueColour: Regex = "([^\".:=]+)[.:]([\".=]+)=\"([^\"]+)\"#(\\p{XDigit}{6})".r
val namespacePredicateValue: Regex = "([^\".:=]+)[.:]([^\".=]+)=\"?([^\"]+)\"?".r
val namespacePredicate: Regex = "([^\".:=]+)[.:]([^\".=]+)".r
val PredicateValue: Regex = "([^\".:=]+)=\"([^\"]+)\"".r
val PredicateValue: Regex = "([^\".:=]+)[=:]\"?([^\"]+)\"?".r
val predicate: Regex = "([^\".:=]+)".r

def fromString(tagName: String, defaultNamespace: String, defaultColour: Int = 0): Tag = {
Expand All @@ -45,11 +45,12 @@ object Tag {
case Array(n) => n -> defaultColour
}
name match {
case namespacePredicateValue(namespace, predicate, value) => Tag(namespace, predicate, Some(value), None, colour)
case namespacePredicate(namespace, predicate) => Tag(namespace, predicate, None, None, colour)
case PredicateValue(predicate, value) => Tag(defaultNamespace, predicate, Some(value), None, colour)
case predicate(predicate) => Tag(defaultNamespace, predicate, None, None, colour)
case _ => Tag(defaultNamespace, name, None, None, colour)
case namespacePredicateValue(namespace, predicate, value) if value.exists(_ != '=') =>
Tag(namespace.trim, predicate.trim, Some(value.trim), None, colour)
case namespacePredicate(namespace, predicate) => Tag(namespace.trim, predicate.trim, None, None, colour)
case PredicateValue(predicate, value) => Tag(defaultNamespace, predicate.trim, Some(value.trim), None, colour)
case predicate(predicate) => Tag(defaultNamespace, predicate.trim, None, None, colour)
case _ => Tag(defaultNamespace, name, None, None, colour)
}
}
}
29 changes: 29 additions & 0 deletions thehive/test/org/thp/thehive/models/TagTest.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package org.thp.thehive.models

import play.api.test.PlaySpecification

class TagTest extends PlaySpecification {
val defaultNamespace: String = "_default_namespace_"
val defaultColor: Int = 0xffff00

def parseTag(s: String): Tag = Tag.fromString(s, defaultNamespace, defaultColor)
"tag" should {
"be parsed from key:value" in {
val tag = parseTag("Id:7SeUoB3IBABD+tMh2PjVJYg==")
tag must beEqualTo(Tag(defaultNamespace, "Id", Some("7SeUoB3IBABD+tMh2PjVJYg=="), None, defaultColor))
tag.toString must beEqualTo("Id=\"7SeUoB3IBABD+tMh2PjVJYg==\"")
}

"be parsed from key: value" in {
val tag = parseTag("domain: google.com")
tag must beEqualTo(Tag(defaultNamespace, "domain", Some("google.com"), None, defaultColor))
tag.toString must beEqualTo("domain=\"google.com\"")
}

"be parsed from key: a.b.c.d" in {
val tag = parseTag("ip: 8.8.8.8")
tag must beEqualTo(Tag(defaultNamespace, "ip", Some("8.8.8.8"), None, defaultColor))
tag.toString must beEqualTo("ip=\"8.8.8.8\"")
}
}
}

0 comments on commit 8037795

Please sign in to comment.