Skip to content

Commit

Permalink
#1731 Refactor tag autocomplete to fix visibility
Browse files Browse the repository at this point in the history
  • Loading branch information
To-om committed Jan 28, 2021
1 parent 5331e4c commit 64e50f1
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 24 deletions.
2 changes: 0 additions & 2 deletions frontend/app/scripts/services/api/TagSrv.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@
var getTags = function(objectType, term) { // TODO remove objectType parameter (not used anymore)
var defer = $q.defer();
QuerySrv.call('v0', [
{ _name: 'listTag' },
{ _name: 'autoComplete', freeTag: term, limit: 10 },
{ _name: 'text' }
], {name: 'tags-auto-complete'})
.then(function(data) {
defer.resolve(_.map(_.unique(data), function(tag) {
Expand Down
34 changes: 14 additions & 20 deletions thehive/app/org/thp/thehive/controllers/v0/TagCtrl.scala
Original file line number Diff line number Diff line change
Expand Up @@ -104,8 +104,9 @@ case class TagHint(freeTag: Option[String], namespace: Option[String], predicate

@Singleton
class PublicTag @Inject() (tagSrv: TagSrv, organisationSrv: OrganisationSrv) extends PublicData {
override val entityName: String = "tag"
override val initialQuery: Query = Query.init[Traversal.V[Tag]]("listTag", (graph, _) => tagSrv.startTraversal(graph))
override val entityName: String = "tag"
override val initialQuery: Query =
Query.init[Traversal.V[Tag]]("listTag", (graph, authContext) => tagSrv.startTraversal(graph).visible(authContext))
override val pageQuery: ParamQuery[OutputParam] = Query.withParam[OutputParam, Traversal.V[Tag], IteratorOutput](
"page",
(range, tagSteps, _) => tagSteps.page(range.from, range.to, withTotal = true)
Expand All @@ -120,15 +121,16 @@ class PublicTag @Inject() (tagSrv: TagSrv, organisationSrv: OrganisationSrv) ext
Query[Traversal.V[Tag], Traversal.V[Tag]]("fromCase", (tagSteps, _) => tagSteps.fromCase),
Query[Traversal.V[Tag], Traversal.V[Tag]]("fromObservable", (tagSteps, _) => tagSteps.fromObservable),
Query[Traversal.V[Tag], Traversal.V[Tag]]("fromAlert", (tagSteps, _) => tagSteps.fromAlert),
Query.withParam[TagHint, Traversal.V[Tag], Traversal.V[Tag]](
Query.initWithParam[TagHint, Traversal[String, Vertex, Converter[String, Vertex]]](
"autoComplete",
(tagHint, tags, authContext) =>
(tagHint, graph, authContext) =>
tagHint
.freeTag
.fold(tags.autoComplete(tagHint.namespace, tagHint.predicate, tagHint.value)(authContext))(
tags.autoComplete(organisationSrv, _)(authContext)
.fold(tagSrv.startTraversal(graph).autoComplete(tagHint.namespace, tagHint.predicate, tagHint.value)(authContext).visible(authContext))(
tagSrv.startTraversal(graph).autoComplete(organisationSrv, _)(authContext)
)
.merge(tagHint.limit)(_.limit(_))
.displayName
),
Query[Traversal.V[Tag], Traversal[String, Vertex, Converter[String, Vertex]]]("text", (tagSteps, _) => tagSteps.displayName),
Query.output[String, Traversal[String, Vertex, Converter[String, Vertex]]]
Expand All @@ -139,20 +141,12 @@ class PublicTag @Inject() (tagSrv: TagSrv, organisationSrv: OrganisationSrv) ext
.property("value", UMapping.string.optional)(_.field.readonly)
.property("description", UMapping.string.optional)(_.field.readonly)
.property("text", UMapping.string)(
_.select(_.displayName) // FIXME add filter
// .filter((_, tags) =>
// tags
// .graphMap[String, String, Converter.Identity[String]](
// { v =>
// val namespace = UMapping.string.getProperty(v, "namespace")
// val predicate = UMapping.string.getProperty(v, "predicate")
// val value = UMapping.string.optional.getProperty(v, "value")
// Tag(namespace, predicate, value, None, "#000000").toString
// },
// Converter.identity[String]
// )
// )
// .converter(_ => Converter.identity[String])
_.select(_.displayName)
.filter[String] {
case (_, tags, authContext, Right(predicate)) => tags.freetags(organisationSrv)(authContext).has(_.predicate, predicate)
case (_, tags, _, Left(true)) => tags
case (_, tags, _, Left(false)) => tags.empty
}
.readonly
)
.build
Expand Down
8 changes: 6 additions & 2 deletions thehive/app/org/thp/thehive/services/TagSrv.scala
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,16 @@ object TagOps {

def fromAlert: Traversal.V[Tag] = traversal.filter(_.in[AlertTag])

def autoComplete(organisationSrv: OrganisationSrv, freeTag: String)(implicit authContext: AuthContext): Traversal.V[Tag] = {
def freetags(organisationSrv: OrganisationSrv)(implicit authContext: AuthContext): Traversal.V[Tag] = {
val freeTagNamespace: String = s"_freetags_${organisationSrv.currentId(traversal.graph, authContext).value}"
traversal
.has(_.namespace, freeTagNamespace)
.has(_.predicate, TextP.containing(freeTag))
}

def autoComplete(organisationSrv: OrganisationSrv, freeTag: String)(implicit authContext: AuthContext): Traversal.V[Tag] =
freetags(organisationSrv)
.has(_.predicate, TextP.containing(freeTag))

def autoComplete(namespace: Option[String], predicate: Option[String], value: Option[String])(implicit
authContext: AuthContext
): Traversal.V[Tag] = {
Expand Down

0 comments on commit 64e50f1

Please sign in to comment.