summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZ.J. van de Weg <git@zjvandeweg.nl>2016-12-15 20:19:42 +0100
committerZ.J. van de Weg <git@zjvandeweg.nl>2016-12-16 12:31:51 +0100
commit0045996728308bcb7643618ab48efb7e04e7d4bf (patch)
tree91041209a3f78164afb0598f82ec9fc14667f968
parent99d8d6f0d48e28f5ba798d1d4461071a01435054 (diff)
downloadgitlab-ce-0045996728308bcb7643618ab48efb7e04e7d4bf.tar.gz
Add auto configure of commands
-rw-r--r--app/controllers/projects/mattermost_controller.rb19
-rw-r--r--app/models/project_services/mattermost_slash_commands_service.rb4
-rw-r--r--app/models/service.rb4
-rw-r--r--lib/mattermost/command.rb16
-rw-r--r--lib/mattermost/session.rb2
-rw-r--r--lib/mattermost/team.rb19
-rw-r--r--spec/lib/mattermost/team_spec.rb19
7 files changed, 50 insertions, 33 deletions
diff --git a/app/controllers/projects/mattermost_controller.rb b/app/controllers/projects/mattermost_controller.rb
index f50f921c7cf..f04189c8775 100644
--- a/app/controllers/projects/mattermost_controller.rb
+++ b/app/controllers/projects/mattermost_controller.rb
@@ -32,16 +32,13 @@ class Projects::MattermostController < Projects::ApplicationController
end
def teams
- # Mocking for frontend development
- @teams = [{"id"=>"qz8gdr1fopncueb8n9on8ohk3h", "create_at"=>1479992105904, "update_at"=>1479992105904, "delete_at"=>0, "display_name"=>"chatops", "name"=>"chatops", "email"=>"admin@example.com", "type"=>"O", "company_name"=>"", "allowed_domains"=>"", "invite_id"=>"gthxi47gj7rxtcx6zama63zd1w", "allow_open_invite"=>false}]
-
- # @teams =
- # begin
- # Mattermost::Mattermost.new(Gitlab.config.mattermost.host, current_user).with_session do
- # Mattermost::Team.all
- # end
- # rescue Mattermost::NoSessionError
- # @teams = []
- # end
+ @teams =
+ begin
+ Mattermost::Mattermost.new(Gitlab.config.mattermost.host, current_user).with_session do
+ Mattermost::Team.team_admin
+ end
+ rescue Mattermost::NoSessionError
+ []
+ end
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 c0e8e1a9324..e07cc0e4077 100644
--- a/app/models/project_services/mattermost_slash_commands_service.rb
+++ b/app/models/project_services/mattermost_slash_commands_service.rb
@@ -25,10 +25,6 @@ class MattermostSlashCommandsService < ChatService
]
end
- def auto_config?
- Gitlab.config.mattermost.enabled
- end
-
def configure(host, current_user, params)
token = Mattermost::Mattermost.new(host, current_user).with_session do
Mattermost::Commands.create(params[:team_id],
diff --git a/app/models/service.rb b/app/models/service.rb
index 9004d9caa19..e49a8fa2904 100644
--- a/app/models/service.rb
+++ b/app/models/service.rb
@@ -54,10 +54,6 @@ class Service < ActiveRecord::Base
template
end
- def auto_config?
- false
- end
-
def category
read_attribute(:category).to_sym
end
diff --git a/lib/mattermost/command.rb b/lib/mattermost/command.rb
index e159458a788..b6446935eb6 100644
--- a/lib/mattermost/command.rb
+++ b/lib/mattermost/command.rb
@@ -1,7 +1,7 @@
module Mattermost
- class Command
+ class Command < Session
def self.all(team_id)
- Mattermost::Mattermost.get("/teams/#{team_id}/commands/list_team_commands")
+ get("/teams/#{team_id}/commands/list_team_commands").parsed_response
end
# params should be a hash, which supplies _at least_:
@@ -9,18 +9,20 @@ module Mattermost
# - url => What is the URL to trigger here?
# - icon_url => Supply a link to the icon
def self.create(team_id, params)
- params = {
+ command = {
auto_complete: true,
auto_complete_desc: 'List all available commands',
auto_complete_hint: '[help]',
description: 'Perform common operations on GitLab',
display_name: 'GitLab',
method: 'P',
- user_name: 'GitLab'
- }..merge(params)
+ user_name: 'GitLab',
+ trigger: 'gitlab',
+ }.merge(params)
- Mattermost::Mattermost.post( "/teams/#{team_id}/commands/create", params.to_json).
- parsed_response['token']
+ response = post( "/teams/#{team_id}/commands/create", body: command.to_json)
+
+ response.parsed_response['token']
end
end
end
diff --git a/lib/mattermost/session.rb b/lib/mattermost/session.rb
index cc4cb1f4f12..15bf95a38c9 100644
--- a/lib/mattermost/session.rb
+++ b/lib/mattermost/session.rb
@@ -65,6 +65,7 @@ module Mattermost
return unless token_uri
self.class.headers("Cookie" => "MMAUTHTOKEN=#{request_token}")
+ self.class.headers("X-Requested-With" => 'XMLHttpRequest')
request_token
end
@@ -106,7 +107,6 @@ module Mattermost
def normalize_uri(uri)
uri << '/' unless uri.end_with?('/')
-
uri << 'api/v3'
end
end
diff --git a/lib/mattermost/team.rb b/lib/mattermost/team.rb
index 76e238a866e..54d029cb022 100644
--- a/lib/mattermost/team.rb
+++ b/lib/mattermost/team.rb
@@ -1,10 +1,17 @@
module Mattermost
- class Team < Mattermost
- # After normalization this returns an array of hashes
- #
- # [{"id"=>"paf573pj9t81urupw3fanozeda", "display_name"=>"my team", <snip>}]
- def self.all
- @all_teams ||= get('/teams/all').parsed_response.values
+ class Team < Session
+ def self.team_admin
+ body = get('/users/initial_load').parsed_response
+
+ return [] unless body['team_members']
+
+ team_ids = body['team_members'].map do |team|
+ team['team_id'] if team['roles'].split.include?('team_admin')
+ end.compact
+
+ body['teams'].select do |team|
+ team_ids.include?(team['id'])
+ end
end
end
end
diff --git a/spec/lib/mattermost/team_spec.rb b/spec/lib/mattermost/team_spec.rb
new file mode 100644
index 00000000000..a3b0831659f
--- /dev/null
+++ b/spec/lib/mattermost/team_spec.rb
@@ -0,0 +1,19 @@
+require 'spec_helper'
+
+describe Mattermost::Team do
+ let(:session) { Mattermost::Session.new('http://localhost:8065/', nil) }
+
+ describe '.all' do
+ let(:result) { {id: 'abc', display_name: 'team'} }
+ before do
+ WebMock.stub_request(:get, 'http://localhost:8065/api/v3/teams/all').
+ and_return({ abc: result }.to_json)
+ end
+
+ xit 'gets the teams' do
+ allow(session).to receive(:with_session) { yield }
+
+ expect(described_class.all).to eq(result)
+ end
+ end
+end