diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/application_controller.rb | 6 | ||||
-rw-r--r-- | app/controllers/projects_controller.rb | 2 | ||||
-rw-r--r-- | app/models/network.rb | 23 | ||||
-rw-r--r-- | app/models/project.rb | 7 | ||||
-rw-r--r-- | app/models/user.rb | 4 | ||||
-rw-r--r-- | app/models/user_session.rb | 22 | ||||
-rw-r--r-- | app/services/create_project_service.rb | 10 |
7 files changed, 34 insertions, 40 deletions
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 9852736..8700317 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -12,6 +12,12 @@ class ApplicationController < ActionController::Base def current_user @current_user ||= session[:current_user] + + # Backward compatibility. Until 7.13 user session doesn't contain access_token + # Users with old session should be logged out + return nil if @current_user && @current_user.access_token.nil? + + @current_user end def sign_in(user) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 5916df4..f228870 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -79,7 +79,7 @@ class ProjectsController < ApplicationController def destroy project.destroy - Network.new.disable_ci(project.gitlab_id, current_user.private_token) + Network.new.disable_ci(project.gitlab_id, current_user.access_token) EventService.new.remove_project(current_user, project) diff --git a/app/models/network.rb b/app/models/network.rb index 8431f75..8ba467d 100644 --- a/app/models/network.rb +++ b/app/models/network.rb @@ -16,18 +16,6 @@ class Network build_response(response) end - def authenticate_by_token(api_opts) - opts = { - query: api_opts - } - - endpoint = File.join(url, API_PREFIX, 'user.json') - response = self.class.get(endpoint, default_opts.merge(opts)) - - build_response(response) - end - - def projects(api_opts, scope = :owned) # Dont load archived projects api_opts.merge!(archived: false) @@ -74,12 +62,13 @@ class Network build_response(response) end - def enable_ci(project_id, api_opts, token) + def enable_ci(project_id, data, api_opts) opts = { - body: api_opts.to_json + body: data.to_json, + query: api_opts } - query = "projects/#{project_id}/services/gitlab-ci.json?private_token=#{token}" + query = "projects/#{project_id}/services/gitlab-ci.json" endpoint = File.join(url, API_PREFIX, query) response = self.class.put(endpoint, default_opts.merge(opts)) @@ -93,8 +82,8 @@ class Network end end - def disable_ci(project_id, token) - query = "projects/#{project_id}/services/gitlab-ci.json?private_token=#{token}" + def disable_ci(project_id, access_token) + query = "projects/#{project_id}/services/gitlab-ci.json?access_token=#{access_token}" endpoint = File.join(url, API_PREFIX, query) response = self.class.delete(endpoint, default_opts) diff --git a/app/models/project.rb b/app/models/project.rb index f103a88..4ec9495 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -84,7 +84,12 @@ ls -la end def from_gitlab(user, scope = :owned, options) - opts = { private_token: user.private_token } + opts = if user.access_token + { access_token: user.access_token } + else + { private_token: user.private_token } + end + opts.merge! options projects = Network.new.projects(opts.compact, scope) diff --git a/app/models/user.rb b/app/models/user.rb index 471e124..138e5e4 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -57,7 +57,7 @@ class User def can_manage_project?(project_gitlab_id) opts = { - private_token: self.private_token, + access_token: self.access_token, } Rails.cache.fetch(cache_key('manage', project_gitlab_id, sync_at)) do @@ -78,7 +78,7 @@ class User def project_info(project_gitlab_id) opts = { - private_token: self.private_token, + access_token: self.access_token, } Rails.cache.fetch(cache_key("project_info", project_gitlab_id, sync_at)) do diff --git a/app/models/user_session.rb b/app/models/user_session.rb index d1c0711..90592d1 100644 --- a/app/models/user_session.rb +++ b/app/models/user_session.rb @@ -4,29 +4,17 @@ class UserSession extend ActiveModel::Naming def authenticate(auth_opts) - authenticate_via(auth_opts) do |network, options| - network.authenticate(options) - end - end - - def authenticate_by_token(auth_opts) - result = authenticate_via(auth_opts) do |network, options| - network.authenticate_by_token(options) - end - - result - end - - private - - def authenticate_via(options, &block) - user = block.call(Network.new, options) + network = Network.new + user = network.authenticate(auth_opts) if user + user["access_token"] = auth_opts[:access_token] return User.new(user) else nil end + + user rescue nil end diff --git a/app/services/create_project_service.rb b/app/services/create_project_service.rb index 0ffa059..652d7bd 100644 --- a/app/services/create_project_service.rb +++ b/app/services/create_project_service.rb @@ -7,12 +7,18 @@ class CreateProjectService Project.transaction do @project.save! - opts = { + data = { token: @project.token, project_url: project_route.gsub(":project_id", @project.id.to_s), } - unless Network.new.enable_ci(@project.gitlab_id, opts, current_user.private_token) + auth_opts = if current_user.access_token + { access_token: current_user.access_token } + else + { private_token: current_user.private_token } + end + + unless Network.new.enable_ci(@project.gitlab_id, data, auth_opts) raise ActiveRecord::Rollback end end |