summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/application_controller.rb6
-rw-r--r--app/controllers/projects_controller.rb2
-rw-r--r--app/models/network.rb23
-rw-r--r--app/models/project.rb7
-rw-r--r--app/models/user.rb4
-rw-r--r--app/models/user_session.rb22
-rw-r--r--app/services/create_project_service.rb10
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