Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'lib/banzai')
-rw-r--r--lib/banzai/reference_parser/mentioned_user_parser.rb18
-rw-r--r--lib/banzai/reference_parser/mentioned_users_by_group_parser.rb33
-rw-r--r--lib/banzai/reference_parser/mentioned_users_by_project_parser.rb19
3 files changed, 70 insertions, 0 deletions
diff --git a/lib/banzai/reference_parser/mentioned_user_parser.rb b/lib/banzai/reference_parser/mentioned_user_parser.rb
new file mode 100644
index 00000000000..4b1bcb3ca09
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_user_parser.rb
@@ -0,0 +1,18 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUserParser < BaseParser
+ self.reference_type = :user
+
+ def references_relation
+ User
+ end
+
+ # any user can be mentioned by username
+ def can_read_reference?(user, ref_attr, node)
+ true
+ end
+ end
+ end
+end
diff --git a/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb b/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb
new file mode 100644
index 00000000000..d4ff6a12cd0
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_users_by_group_parser.rb
@@ -0,0 +1,33 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUsersByGroupParser < BaseParser
+ GROUP_ATTR = 'data-group'
+
+ self.reference_type = :user
+
+ def self.data_attribute
+ @data_attribute ||= GROUP_ATTR
+ end
+
+ def references_relation
+ Group
+ end
+
+ def nodes_visible_to_user(user, nodes)
+ groups = lazy { grouped_objects_for_nodes(nodes, Group, GROUP_ATTR) }
+
+ nodes.select do |node|
+ node.has_attribute?(GROUP_ATTR) && can_read_group_reference?(node, user, groups)
+ end
+ end
+
+ def can_read_group_reference?(node, user, groups)
+ node_group = groups[node]
+
+ node_group && can?(user, :read_group, node_group)
+ end
+ end
+ end
+end
diff --git a/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb b/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb
new file mode 100644
index 00000000000..79258d81cc3
--- /dev/null
+++ b/lib/banzai/reference_parser/mentioned_users_by_project_parser.rb
@@ -0,0 +1,19 @@
+# frozen_string_literal: true
+
+module Banzai
+ module ReferenceParser
+ class MentionedUsersByProjectParser < ProjectParser
+ PROJECT_ATTR = 'data-project'
+
+ self.reference_type = :user
+
+ def self.data_attribute
+ @data_attribute ||= PROJECT_ATTR
+ end
+
+ def references_relation
+ Project
+ end
+ end
+ end
+end