diff options
author | Z.J. van de Weg <git@zjvandeweg.nl> | 2016-12-15 20:19:42 +0100 |
---|---|---|
committer | Z.J. van de Weg <git@zjvandeweg.nl> | 2016-12-16 12:31:51 +0100 |
commit | 0045996728308bcb7643618ab48efb7e04e7d4bf (patch) | |
tree | 91041209a3f78164afb0598f82ec9fc14667f968 | |
parent | 99d8d6f0d48e28f5ba798d1d4461071a01435054 (diff) | |
download | gitlab-ce-0045996728308bcb7643618ab48efb7e04e7d4bf.tar.gz |
Add auto configure of commands
-rw-r--r-- | app/controllers/projects/mattermost_controller.rb | 19 | ||||
-rw-r--r-- | app/models/project_services/mattermost_slash_commands_service.rb | 4 | ||||
-rw-r--r-- | app/models/service.rb | 4 | ||||
-rw-r--r-- | lib/mattermost/command.rb | 16 | ||||
-rw-r--r-- | lib/mattermost/session.rb | 2 | ||||
-rw-r--r-- | lib/mattermost/team.rb | 19 | ||||
-rw-r--r-- | spec/lib/mattermost/team_spec.rb | 19 |
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 |