Add auto configure of commands
This commit is contained in:
parent
99d8d6f0d4
commit
0045996728
7 changed files with 50 additions and 33 deletions
|
@ -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
|
||||
|
|
|
@ -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],
|
||||
|
|
|
@ -54,10 +54,6 @@ class Service < ActiveRecord::Base
|
|||
template
|
||||
end
|
||||
|
||||
def auto_config?
|
||||
false
|
||||
end
|
||||
|
||||
def category
|
||||
read_attribute(:category).to_sym
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
19
spec/lib/mattermost/team_spec.rb
Normal file
19
spec/lib/mattermost/team_spec.rb
Normal file
|
@ -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
|
Loading…
Reference in a new issue