Commit 26d15a89 authored by Valery Sizov's avatar Valery Sizov

Fix Mattermost integration

parent dbadf5a5
---
title: Fix Mattermost integration
merge_request:
author:
...@@ -36,11 +36,12 @@ module Mattermost ...@@ -36,11 +36,12 @@ module Mattermost
def with_session def with_session
with_lease do with_lease do
raise Mattermost::NoSessionError unless create create
begin begin
yield self yield self
rescue Errno::ECONNREFUSED rescue Errno::ECONNREFUSED => e
Rails.logger.error(e.message + "\n" + e.backtrace.join("\n"))
raise Mattermost::NoSessionError raise Mattermost::NoSessionError
ensure ensure
destroy destroy
...@@ -85,10 +86,12 @@ module Mattermost ...@@ -85,10 +86,12 @@ module Mattermost
private private
def create def create
return unless oauth_uri raise Mattermost::NoSessionError unless oauth_uri
return unless token_uri raise Mattermost::NoSessionError unless token_uri
@token = request_token @token = request_token
raise Mattermost::NoSessionError unless @token
@headers = { @headers = {
Authorization: "Bearer #{@token}" Authorization: "Bearer #{@token}"
} }
...@@ -106,11 +109,16 @@ module Mattermost ...@@ -106,11 +109,16 @@ module Mattermost
@oauth_uri = nil @oauth_uri = nil
response = get("/api/v3/oauth/gitlab/login", follow_redirects: false) response = get("/api/v3/oauth/gitlab/login", follow_redirects: false)
return unless 300 <= response.code && response.code < 400 return unless (300...400) === response.code
redirect_uri = response.headers['location'] redirect_uri = response.headers['location']
return unless redirect_uri return unless redirect_uri
oauth_cookie = parse_cookie(response)
@headers = {
Cookie: oauth_cookie.to_cookie_string
}
@oauth_uri = URI.parse(redirect_uri) @oauth_uri = URI.parse(redirect_uri)
end end
...@@ -124,7 +132,7 @@ module Mattermost ...@@ -124,7 +132,7 @@ module Mattermost
def request_token def request_token
response = get(token_uri, follow_redirects: false) response = get(token_uri, follow_redirects: false)
if 200 <= response.code && response.code < 400 if (200...400) === response.code
response.headers['token'] response.headers['token']
end end
end end
...@@ -156,5 +164,11 @@ module Mattermost ...@@ -156,5 +164,11 @@ module Mattermost
rescue Errno::ECONNREFUSED => e rescue Errno::ECONNREFUSED => e
raise Mattermost::ConnectionError.new(e.message) raise Mattermost::ConnectionError.new(e.message)
end end
def parse_cookie(response)
cookie_hash = CookieHash.new
response.get_fields('Set-Cookie').each { |c| cookie_hash.add_cookies(c) }
cookie_hash
end
end end
end end
...@@ -20,9 +20,10 @@ describe Mattermost::Session, type: :request do ...@@ -20,9 +20,10 @@ describe Mattermost::Session, type: :request do
describe '#with session' do describe '#with session' do
let(:location) { 'http://location.tld' } let(:location) { 'http://location.tld' }
let(:cookie_header) {'MMOAUTH=taskik8az7rq8k6rkpuas7htia; Path=/;'}
let!(:stub) do let!(:stub) do
WebMock.stub_request(:get, "#{mattermost_url}/api/v3/oauth/gitlab/login") WebMock.stub_request(:get, "#{mattermost_url}/api/v3/oauth/gitlab/login")
.to_return(headers: { 'location' => location }, status: 307) .to_return(headers: { 'location' => location, 'Set-Cookie' => cookie_header }, status: 307)
end end
context 'without oauth uri' do context 'without oauth uri' do
...@@ -34,9 +35,9 @@ describe Mattermost::Session, type: :request do ...@@ -34,9 +35,9 @@ describe Mattermost::Session, type: :request do
context 'with oauth_uri' do context 'with oauth_uri' do
let!(:doorkeeper) do let!(:doorkeeper) do
Doorkeeper::Application.create( Doorkeeper::Application.create(
name: "GitLab Mattermost", name: 'GitLab Mattermost',
redirect_uri: "#{mattermost_url}/signup/gitlab/complete\n#{mattermost_url}/login/gitlab/complete", redirect_uri: "#{mattermost_url}/signup/gitlab/complete\n#{mattermost_url}/login/gitlab/complete",
scopes: "") scopes: '')
end end
context 'without token_uri' do context 'without token_uri' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment