summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZ.J. van de Weg <git@zjvandeweg.nl>2016-12-09 10:37:36 +0100
committerZ.J. van de Weg <git@zjvandeweg.nl>2016-12-09 10:37:36 +0100
commitbd97816bd2d13b0697ae3e7d98d483451bae04ca (patch)
treee6c5a40a6a7caaa6f5e1faafd5e8f4ac2dd43a45
parent10167c0e1c3d1ca15faddeacc1c8ed907cd8dc93 (diff)
downloadgitlab-ce-zj-create-slack-service.tar.gz
Create Slack Slash command servicezj-create-slack-service
-rw-r--r--app/models/project.rb1
-rw-r--r--app/models/project_services/slack_slash_commands_service.rb49
-rw-r--r--app/models/service.rb1
3 files changed, 51 insertions, 0 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 590885c0177..fefdd62eecd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -94,6 +94,7 @@ class Project < ActiveRecord::Base
has_one :asana_service, dependent: :destroy
has_one :gemnasium_service, dependent: :destroy
has_one :mattermost_slash_commands_service, dependent: :destroy
+ has_one :slack_slash_commands_service, dependent: :destroy
has_one :slack_service, dependent: :destroy
has_one :buildkite_service, dependent: :destroy
has_one :bamboo_service, dependent: :destroy
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..9c66f95eef9
--- /dev/null
+++ b/app/models/project_services/slack_slash_commands_service.rb
@@ -0,0 +1,49 @@
+class SlackSlashCommandsService < ChatService
+ include TriggersHelper
+
+ prop_accessor :token
+
+ def can_test?
+ false
+ end
+
+ def title
+ 'Slack Slash Command'
+ end
+
+ def description
+ "Perform common operations on GitLab in Slack"
+ end
+
+ def to_param
+ 'slack_slash_commands'
+ end
+
+ def fields
+ [
+ { type: 'text', name: 'token', placeholder: '' }
+ ]
+ 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 Gitlab::ChatCommands::Presenters::Access.new(url).authorize
+ 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
+end
diff --git a/app/models/service.rb b/app/models/service.rb
index 0c36acfc1b7..96ce4bd6368 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -220,6 +220,7 @@ class Service < ActiveRecord::Base
pushover
redmine
slack
+ slack_slash_commands
teamcity
]
end