WIP
This commit is contained in:
parent
0cf23fde7c
commit
61d09a7b15
|
@ -12,13 +12,17 @@ class Projects::MattermostsController < Projects::ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@service.configure!(current_user, configure_params)
|
result, message = @service.configure(current_user, configure_params)
|
||||||
|
|
||||||
|
if result
|
||||||
flash[:notice] = 'This service is now configured'
|
flash[:notice] = 'This service is now configured'
|
||||||
redirect_to edit_namespace_project_service_path(@project.namespace, @project, service)
|
redirect_to edit_namespace_project_service_path(
|
||||||
rescue => e
|
@project.namespace, @project, service)
|
||||||
flash[:alert] = e.message
|
else
|
||||||
redirect_to new_namespace_project_mattermost_path(@project.namespace, @project)
|
flash[:alert] = message || 'Failed to configure service'
|
||||||
|
redirect_to new_namespace_project_mattermost_path(
|
||||||
|
@project.namespace, @project)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
@ -31,9 +35,6 @@ class Projects::MattermostsController < Projects::ApplicationController
|
||||||
|
|
||||||
def teams
|
def teams
|
||||||
@teams ||= @service.list_teams(current_user)
|
@teams ||= @service.list_teams(current_user)
|
||||||
rescue => e
|
|
||||||
@teams = []
|
|
||||||
flash[:alert] = e.message
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def service
|
def service
|
||||||
|
|
|
@ -294,8 +294,4 @@ module ApplicationHelper
|
||||||
def page_class
|
def page_class
|
||||||
"issue-boards-page" if current_controller?(:boards)
|
"issue-boards-page" if current_controller?(:boards)
|
||||||
end
|
end
|
||||||
|
|
||||||
def pretty_url(url)
|
|
||||||
url.gsub(/\A.*?:\/\//, '')
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -148,14 +148,6 @@ module ProjectsHelper
|
||||||
).html_safe
|
).html_safe
|
||||||
end
|
end
|
||||||
|
|
||||||
def mattermost_teams_options(teams)
|
|
||||||
teams_options = teams.map do |id, options|
|
|
||||||
[options['display_name'] || options['name'], id]
|
|
||||||
end
|
|
||||||
|
|
||||||
teams_options.compact.unshift(['Select team...', '0'])
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def repo_children_classes(field)
|
def repo_children_classes(field)
|
||||||
|
|
|
@ -19,15 +19,19 @@ class MattermostSlashCommandsService < ChatSlashCommandsService
|
||||||
'mattermost_slash_commands'
|
'mattermost_slash_commands'
|
||||||
end
|
end
|
||||||
|
|
||||||
def configure!(user, params)
|
def configure(user, params)
|
||||||
token = Mattermost::Command.new(user).
|
token = Mattermost::Command.new(user).
|
||||||
create(command(params))
|
create(command(params))
|
||||||
|
|
||||||
update!(active: true, token: token)
|
update(active: true, token: token) if token
|
||||||
|
rescue => Mattermost::Error => e
|
||||||
|
false, e.message
|
||||||
end
|
end
|
||||||
|
|
||||||
def list_teams(user)
|
def list_teams(user)
|
||||||
Mattermost::Team.new(user).all
|
Mattermost::Team.new(user).all
|
||||||
|
rescue => Mattermost::Error => e
|
||||||
|
[]
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
|
@ -29,13 +29,13 @@ module Mattermost
|
||||||
def json_response(response)
|
def json_response(response)
|
||||||
json_response = JSON.parse(response.body)
|
json_response = JSON.parse(response.body)
|
||||||
|
|
||||||
if response.success?
|
unless response.success?
|
||||||
json_response
|
raise ClientError(json_response['message'] || 'Undefined error')
|
||||||
elsif json_response['message']
|
|
||||||
raise ClientError(json_response['message'])
|
|
||||||
else
|
|
||||||
raise ClientError('Undefined error')
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
json_response
|
||||||
|
rescue JSON::JSONError => e
|
||||||
|
raise ClientError('Cannot parse response')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -3,15 +3,11 @@ module Mattermost
|
||||||
|
|
||||||
class NoSessionError < Error
|
class NoSessionError < Error
|
||||||
def message
|
def message
|
||||||
'No session could be set up, is Mattermost configured with Single Sign on?'
|
'No session could be set up, is Mattermost configured with Single Sign On?'
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class ConnectionError < Error
|
class ConnectionError < Error; end
|
||||||
def message
|
|
||||||
'Could not connect. Is Mattermost up?'
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
# This class' prime objective is to obtain a session token on a Mattermost
|
# This class' prime objective is to obtain a session token on a Mattermost
|
||||||
# instance with SSO configured where this GitLab instance is the provider.
|
# instance with SSO configured where this GitLab instance is the provider.
|
||||||
|
@ -74,12 +70,16 @@ module Mattermost
|
||||||
|
|
||||||
def get(path, options = {})
|
def get(path, options = {})
|
||||||
self.class.get(path, options.merge(headers: @headers))
|
self.class.get(path, options.merge(headers: @headers))
|
||||||
rescue Errno::ECONNREFUSED
|
rescue HTTParty::Error => e
|
||||||
raise ConnectionError
|
raise ConnectionError(e.message)
|
||||||
|
rescue Errno::ECONNREFUSED => e
|
||||||
|
raise ConnectionError(e.message)
|
||||||
end
|
end
|
||||||
|
|
||||||
def post(path, options = {})
|
def post(path, options = {})
|
||||||
self.class.post(path, options.merge(headers: @headers))
|
self.class.post(path, options.merge(headers: @headers))
|
||||||
|
rescue HTTParty::Error => e
|
||||||
|
raise ConnectionError(e.message)
|
||||||
rescue Errno::ECONNREFUSED
|
rescue Errno::ECONNREFUSED
|
||||||
raise ConnectionError
|
raise ConnectionError
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,19 +1,17 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Mattermost::Command do
|
describe Mattermost::Command do
|
||||||
let(:session) { double("session") }
|
|
||||||
let(:hash) { { 'token' => 'token' } }
|
let(:hash) { { 'token' => 'token' } }
|
||||||
|
let(:user) { create(:user) }
|
||||||
|
|
||||||
describe '.create' do
|
|
||||||
before do
|
before do
|
||||||
allow(session).to receive(:post).and_return(hash)
|
Mattermost::Session.base_uri("http://mattermost.example.com")
|
||||||
allow(hash).to receive(:parsed_response).and_return(hash)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'gets the teams' do
|
describe '#create' do
|
||||||
expect(session).to receive(:post)
|
it 'creates a command' do
|
||||||
|
described_class.new(user).
|
||||||
described_class.create(session, 'abc', url: 'http://trigger.com')
|
create(team_id: 'abc', url: 'http://trigger.com')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
require 'spec_helper'
|
require 'spec_helper'
|
||||||
|
|
||||||
describe Mattermost::Team do
|
describe Mattermost::Team do
|
||||||
describe '.team_admin' do
|
describe '#all' do
|
||||||
let(:session) { double("session") }
|
let(:session) { double("session") }
|
||||||
|
|
||||||
let(:response) do
|
let(:response) do
|
||||||
|
|
Loading…
Reference in New Issue