summaryrefslogtreecommitdiff
path: root/app/models/project_services
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-12-20 11:32:31 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2016-12-20 11:32:31 +0100
commit0d224376cfaf61d6c9050367c0098ba87dfe8c58 (patch)
treeeac7276123b1fa45e3d11ed3aede881b0366b18e /app/models/project_services
parentf7b7e918fef6567d26e7fe17894e5df14c58f37c (diff)
parentdeb74f73d9432c90649142cf8333c5cd5d0984ea (diff)
downloadgitlab-ce-0d224376cfaf61d6c9050367c0098ba87dfe8c58.tar.gz
Merge remote-tracking branch 'origin/master' into zj-mattermost-slash-config
Diffstat (limited to 'app/models/project_services')
-rw-r--r--app/models/project_services/chat_service.rb21
-rw-r--r--app/models/project_services/chat_slash_commands_service.rb56
-rw-r--r--app/models/project_services/mattermost_slash_commands_service.rb28
-rw-r--r--app/models/project_services/slack_slash_commands_service.rb28
4 files changed, 85 insertions, 48 deletions
diff --git a/app/models/project_services/chat_service.rb b/app/models/project_services/chat_service.rb
deleted file mode 100644
index 574788462de..00000000000
--- a/app/models/project_services/chat_service.rb
+++ /dev/null
@@ -1,21 +0,0 @@
-# Base class for Chat services
-# This class is not meant to be used directly, but only to inherit from.
-class ChatService < Service
- default_value_for :category, 'chat'
-
- has_many :chat_names, foreign_key: :service_id
-
- def valid_token?(token)
- self.respond_to?(:token) &&
- self.token.present? &&
- ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
- end
-
- def supported_events
- []
- end
-
- def trigger(params)
- raise NotImplementedError
- end
-end
diff --git a/app/models/project_services/chat_slash_commands_service.rb b/app/models/project_services/chat_slash_commands_service.rb
new file mode 100644
index 00000000000..0bc160af604
--- /dev/null
+++ b/app/models/project_services/chat_slash_commands_service.rb
@@ -0,0 +1,56 @@
+# Base class for Chat services
+# This class is not meant to be used directly, but only to inherrit from.
+class ChatSlashCommandsService < Service
+ default_value_for :category, 'chat'
+
+ prop_accessor :token
+
+ has_many :chat_names, foreign_key: :service_id, dependent: :destroy
+
+ def valid_token?(token)
+ self.respond_to?(:token) &&
+ self.token.present? &&
+ ActiveSupport::SecurityUtils.variable_size_secure_compare(token, self.token)
+ end
+
+ def supported_events
+ []
+ end
+
+ def can_test?
+ false
+ end
+
+ def fields
+ [
+ { type: 'text', name: 'token', placeholder: '' }
+ ]
+ end
+
+ def trigger(params)
+ return unless valid_token?(params[:token])
+
+ user = find_chat_user(params)
+ unless user
+ url = authorize_chat_name_url(params)
+ return presenter.authorize_chat_name(url)
+ end
+
+ Gitlab::ChatCommands::Command.new(project, user,
+ params).execute
+ end
+
+ private
+
+ def find_chat_user(params)
+ ChatNames::FindUserService.new(self, params).execute
+ end
+
+ def authorize_chat_name_url(params)
+ ChatNames::AuthorizeUserService.new(self, params).execute
+ end
+
+ def presenter
+ Gitlab::ChatCommands::Presenter.new
+ end
+end
diff --git a/app/models/project_services/mattermost_slash_commands_service.rb b/app/models/project_services/mattermost_slash_commands_service.rb
index accf59bea18..572a02b01d4 100644
--- a/app/models/project_services/mattermost_slash_commands_service.rb
+++ b/app/models/project_services/mattermost_slash_commands_service.rb
@@ -1,4 +1,4 @@
-class MattermostSlashCommandsService < ChatService
+class MattermostSlashCommandsService < ChatSlashCommandsService
include TriggersHelper
prop_accessor :token
@@ -19,12 +19,6 @@ class MattermostSlashCommandsService < ChatService
'mattermost_slash_commands'
end
- def fields
- [
- { type: 'text', name: 'token', placeholder: '' }
- ]
- end
-
def configure!(user, params)
token = Mattermost::Command.new(user).
create(command(params))
@@ -36,18 +30,6 @@ class MattermostSlashCommandsService < ChatService
Mattermost::Team.new(user).all
end
- def trigger(params)
- return nil unless valid_token?(params[:token])
-
- user = find_chat_user(params)
- unless user
- url = authorize_chat_name_url(params)
- return Mattermost::Presenter.authorize_chat_name(url)
- end
-
- Gitlab::ChatCommands::Command.new(project, user, params).execute
- end
-
private
def command(params)
@@ -62,12 +44,4 @@ class MattermostSlashCommandsService < ChatService
method: 'P',
user_name: 'GitLab')
end
-
- def find_chat_user(params)
- ChatNames::FindUserService.new(self, params).execute
- end
-
- def authorize_chat_name_url(params)
- ChatNames::AuthorizeUserService.new(self, params).execute
- end
end
diff --git a/app/models/project_services/slack_slash_commands_service.rb b/app/models/project_services/slack_slash_commands_service.rb
new file mode 100644
index 00000000000..cb19ebf4cad
--- /dev/null
+++ b/app/models/project_services/slack_slash_commands_service.rb
@@ -0,0 +1,28 @@
+class SlackSlashCommandsService < ChatSlashCommandsService
+ include TriggersHelper
+
+ def title
+ 'Slack Command'
+ end
+
+ def description
+ "Perform common operations on GitLab in Slack"
+ end
+
+ def to_param
+ 'slack_slash_commands'
+ end
+
+ def trigger(params)
+ # Format messages to be Slack-compatible
+ super.tap do |result|
+ result[:text] = format(result[:text])
+ end
+ end
+
+ private
+
+ def format(text)
+ Slack::Notifier::LinkFormatter.format(text) if text
+ end
+end