Commit c84350ab authored by Douwe Maan's avatar Douwe Maan Committed by Valery Sizov

Fix bug causing Bitbucket importer to crash when OAuth application had been removed.

parent ce6fd30d
...@@ -9,6 +9,18 @@ v 7.13.2 ...@@ -9,6 +9,18 @@ v 7.13.2
- Show the first tab automatically on MergeRequests#new - Show the first tab automatically on MergeRequests#new
- Add rake task 'gitlab:update_commit_count' (Daniel Gerhardt) - Add rake task 'gitlab:update_commit_count' (Daniel Gerhardt)
- Fix Gmail Actions - Fix Gmail Actions
- Fix full screen mode for snippet comments (Daniel Gerhardt)
- Fix 404 error in files view after deleting the last file in a repository (Stan Hu)
- Fix the "Reload with full diff" URL button (Stan Hu)
- Fix label read access for unauthenticated users (Daniel Gerhardt)
- Fix access to disabled features for unauthenticated users (Daniel Gerhardt)
- Fix OAuth provider bug where GitLab would not go return to the redirect_uri after sign-in (Stan Hu)
- Fix file upload dialog for comment editing (Daniel Gerhardt)
- Set OmniAuth full_host parameter to ensure redirect URIs are correct (Stan Hu)
- Expire Rails cache entries after two weeks to prevent endless Redis growth
- Add support for destroying project milestones (Stan Hu)
- Add fetch command to the MR page
- Fix bug causing Bitbucket importer to crash when OAuth application had been removed.
v 7.13.1 v 7.13.1
- Fix: Label modifications are not reflected in existing notes and in the issue list - Fix: Label modifications are not reflected in existing notes and in the issue list
......
...@@ -3,6 +3,7 @@ class Import::BitbucketController < Import::BaseController ...@@ -3,6 +3,7 @@ class Import::BitbucketController < Import::BaseController
before_action :bitbucket_auth, except: :callback before_action :bitbucket_auth, except: :callback
rescue_from OAuth::Error, with: :bitbucket_unauthorized rescue_from OAuth::Error, with: :bitbucket_unauthorized
rescue_from Gitlab::BitbucketImport::Client::Unauthorized, with: :bitbucket_unauthorized
def callback def callback
request_token = session.delete(:oauth_request_token) request_token = session.delete(:oauth_request_token)
......
module Gitlab module Gitlab
module BitbucketImport module BitbucketImport
class Client class Client
class Unauthorized < StandardError; end
attr_reader :consumer, :api attr_reader :consumer, :api
def initialize(access_token = nil, access_token_secret = nil) def initialize(access_token = nil, access_token_secret = nil)
...@@ -46,23 +48,23 @@ module Gitlab ...@@ -46,23 +48,23 @@ module Gitlab
end end
def user def user
JSON.parse(api.get("/api/1.0/user").body) JSON.parse(get("/api/1.0/user").body)
end end
def issues(project_identifier) def issues(project_identifier)
JSON.parse(api.get("/api/1.0/repositories/#{project_identifier}/issues").body) JSON.parse(get("/api/1.0/repositories/#{project_identifier}/issues").body)
end end
def issue_comments(project_identifier, issue_id) def issue_comments(project_identifier, issue_id)
JSON.parse(api.get("/api/1.0/repositories/#{project_identifier}/issues/#{issue_id}/comments").body) JSON.parse(get("/api/1.0/repositories/#{project_identifier}/issues/#{issue_id}/comments").body)
end end
def project(project_identifier) def project(project_identifier)
JSON.parse(api.get("/api/1.0/repositories/#{project_identifier}").body) JSON.parse(get("/api/1.0/repositories/#{project_identifier}").body)
end end
def find_deploy_key(project_identifier, key) def find_deploy_key(project_identifier, key)
JSON.parse(api.get("/api/1.0/repositories/#{project_identifier}/deploy-keys").body).find do |deploy_key| JSON.parse(get("/api/1.0/repositories/#{project_identifier}/deploy-keys").body).find do |deploy_key|
deploy_key["key"].chomp == key.chomp deploy_key["key"].chomp == key.chomp
end end
end end
...@@ -82,11 +84,18 @@ module Gitlab ...@@ -82,11 +84,18 @@ module Gitlab
end end
def projects def projects
JSON.parse(api.get("/api/1.0/user/repositories").body).select { |repo| repo["scm"] == "git" } JSON.parse(get("/api/1.0/user/repositories").body).select { |repo| repo["scm"] == "git" }
end end
private private
def get(url)
response = api.get(url)
raise Unauthorized if (400..499).include?(response.code.to_i)
response
end
def config def config
Gitlab.config.omniauth.providers.find { |provider| provider.name == "bitbucket"} Gitlab.config.omniauth.providers.find { |provider| provider.name == "bitbucket"}
end end
......
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