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/slack/manifest.rb')
-rw-r--r--lib/slack/manifest.rb114
1 files changed, 114 insertions, 0 deletions
diff --git a/lib/slack/manifest.rb b/lib/slack/manifest.rb
new file mode 100644
index 00000000000..de189f3bdf5
--- /dev/null
+++ b/lib/slack/manifest.rb
@@ -0,0 +1,114 @@
+# frozen_string_literal: true
+
+module Slack
+ module Manifest
+ class << self
+ delegate :to_json, to: :to_h
+
+ def share_url
+ "https://api.slack.com/apps?new_app=1&manifest_json=#{ERB::Util.url_encode(to_json)}"
+ end
+
+ def to_h
+ {
+ display_information: display_information,
+ features: features,
+ oauth_config: oauth_config,
+ settings: settings
+ }
+ end
+
+ private
+
+ def display_information
+ {
+ name: "GitLab (#{Gitlab.config.gitlab.host.first(26)})",
+ description: s_('SlackIntegration|Interact with GitLab without leaving your Slack workspace!'),
+ background_color: '#171321',
+ # Each element in this array will become a paragraph joined with `\r\n\r\n'.
+ long_description: [
+ format(
+ s_(
+ 'SlackIntegration|Generated for %{host} by GitLab %{version}.'
+ ),
+ host: Gitlab.config.gitlab.host,
+ version: Gitlab::VERSION
+ ),
+ s_(
+ 'SlackIntegration|- *Notifications:* Get notifications to your team\'s Slack channel about events ' \
+ 'happening inside your GitLab projects.'
+ ),
+ format(
+ s_(
+ 'SlackIntegration|- *Slash commands:* Quickly open, access, or close issues from Slack using the ' \
+ '`%{slash_command}` command. Streamline your GitLab deployments with ChatOps.'
+ ),
+ slash_command: '/gitlab'
+ )
+ ].join("\r\n\r\n")
+ }
+ end
+
+ def features
+ {
+ app_home: {
+ home_tab_enabled: true,
+ messages_tab_enabled: false,
+ messages_tab_read_only_enabled: true
+ },
+ bot_user: {
+ display_name: 'GitLab',
+ always_online: true
+ },
+ slash_commands: [
+ {
+ command: '/gitlab',
+ url: api_v4('slack/trigger'),
+ description: s_('SlackIntegration|GitLab slash commands'),
+ usage_hint: s_('SlackIntegration|your-project-name-or-alias command'),
+ should_escape: false
+ }
+ ]
+ }
+ end
+
+ def oauth_config
+ {
+ redirect_urls: [
+ Gitlab.config.gitlab.url
+ ],
+ scopes: {
+ bot: %w[
+ commands
+ chat:write
+ chat:write.public
+ ]
+ }
+ }
+ end
+
+ def settings
+ {
+ event_subscriptions: {
+ request_url: api_v4('integrations/slack/events'),
+ bot_events: %w[
+ app_home_opened
+ ]
+ },
+ interactivity: {
+ is_enabled: true,
+ request_url: api_v4('integrations/slack/interactions'),
+ message_menu_options_url: api_v4('integrations/slack/options')
+ },
+ org_deploy_enabled: false,
+ socket_mode_enabled: false,
+ token_rotation_enabled: false
+ }
+ end
+
+ def api_v4(path)
+ "#{Gitlab.config.gitlab.url}/api/v4/#{path}"
+ end
+ end
+ end
+end