From 2ed2ef921026cbde5dddda89177bfa50e2993ecd Mon Sep 17 00:00:00 2001 From: Dmitriy Zaporozhets Date: Fri, 11 Sep 2015 13:38:37 +0200 Subject: [PATCH] Remove network from CI --- app/controllers/ci/application_controller.rb | 27 ---- app/controllers/ci/projects_controller.rb | 6 +- app/models/ci/network.rb | 122 ------------------- app/models/ci/project.rb | 6 +- app/services/ci/create_project_service.rb | 6 +- lib/api/services.rb | 4 +- lib/ci/api/projects.rb | 2 +- spec/models/ci/network_spec.rb | 54 -------- 8 files changed, 12 insertions(+), 215 deletions(-) delete mode 100644 app/models/ci/network.rb delete mode 100644 spec/models/ci/network_spec.rb diff --git a/app/controllers/ci/application_controller.rb b/app/controllers/ci/application_controller.rb index 9a32efaee7d..a5868da377f 100644 --- a/app/controllers/ci/application_controller.rb +++ b/app/controllers/ci/application_controller.rb @@ -4,14 +4,8 @@ module Ci "app/helpers/ci" end - include Ci::UserSessionsHelper - - rescue_from Ci::Network::UnauthorizedError, with: :invalid_token - before_filter :default_headers helper_method :gl_project - protect_from_forgery - private def authenticate_public_page! @@ -75,27 +69,6 @@ module Ci } end - def check_config - redirect_to oauth2_ci_help_path unless valid_config? - end - - def valid_config? - server = GitlabCi.config.gitlab_server - - if server.blank? || server.url.blank? || server.app_id.blank? || server.app_secret.blank? - false - else - true - end - rescue Settingslogic::MissingSetting, NoMethodError - false - end - - def invalid_token - reset_session - redirect_to ci_root_path - end - def gl_project ::Project.find(@project.gitlab_id) end diff --git a/app/controllers/ci/projects_controller.rb b/app/controllers/ci/projects_controller.rb index c30c5d9590b..9074972e94a 100644 --- a/app/controllers/ci/projects_controller.rb +++ b/app/controllers/ci/projects_controller.rb @@ -27,7 +27,7 @@ module Ci @projects = Ci::Project.where(gitlab_id: @gl_projects.map(&:id)).ordered_by_last_commit_date @total_count = @gl_projects.size - + @gl_projects = @gl_projects.where.not(id: @projects.map(&:gitlab_id)) respond_to do |format| @@ -35,8 +35,6 @@ module Ci pager_json("ci/projects/gitlab", @total_count) end end - rescue Ci::Network::UnauthorizedError - raise rescue @error = 'Failed to fetch GitLab projects' end @@ -82,8 +80,8 @@ module Ci end def destroy + project.gl_project.gitlab_ci_service.update_attributes(active: false) project.destroy - Ci::Network.new.disable_ci(project.gitlab_id, current_user.authenticate_options) Ci::EventService.new.remove_project(current_user, project) diff --git a/app/models/ci/network.rb b/app/models/ci/network.rb deleted file mode 100644 index 1a54213f4f1..00000000000 --- a/app/models/ci/network.rb +++ /dev/null @@ -1,122 +0,0 @@ -module Ci - class Network - class UnauthorizedError < StandardError; end - - include HTTParty - - API_PREFIX = '/api/v3/' - - def authenticate(api_opts) - opts = { - query: api_opts - } - - endpoint = File.join(url, API_PREFIX, 'user') - 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) - - opts = { - query: api_opts - } - - query = if scope == :owned - 'projects/owned.json' - else - 'projects.json' - end - - endpoint = File.join(url, API_PREFIX, query) - response = self.class.get(endpoint, default_opts.merge(opts)) - - build_response(response) - end - - def project(api_opts, project_id) - opts = { - query: api_opts - } - - query = "projects/#{project_id}.json" - - endpoint = File.join(url, API_PREFIX, query) - response = self.class.get(endpoint, default_opts.merge(opts)) - - build_response(response) - end - - def project_hooks(api_opts, project_id) - opts = { - query: api_opts - } - - query = "projects/#{project_id}/hooks.json" - - endpoint = File.join(url, API_PREFIX, query) - response = self.class.get(endpoint, default_opts.merge(opts)) - - build_response(response) - end - - def enable_ci(project_id, data, api_opts) - opts = { - body: data.to_json, - query: api_opts - } - - query = "projects/#{project_id}/services/gitlab-ci.json" - endpoint = File.join(url, API_PREFIX, query) - response = self.class.put(endpoint, default_opts.merge(opts)) - - case response.code - when 200 - true - when 401 - raise UnauthorizedError - else - nil - end - end - - def disable_ci(project_id, api_opts) - opts = { - query: api_opts - } - - query = "projects/#{project_id}/services/gitlab-ci.json" - - endpoint = File.join(url, API_PREFIX, query) - response = self.class.delete(endpoint, default_opts.merge(opts)) - - build_response(response) - end - - private - - def url - Gitlab.config.gitlab.url - end - - def default_opts - { - headers: { "Content-Type" => "application/json" }, - } - end - - def build_response(response) - case response.code - when 200 - response.parsed_response - when 401 - raise UnauthorizedError - else - nil - end - end - end -end diff --git a/app/models/ci/project.rb b/app/models/ci/project.rb index c9e5707f218..2cf1783616f 100644 --- a/app/models/ci/project.rb +++ b/app/models/ci/project.rb @@ -31,7 +31,7 @@ module Ci include Ci::ProjectStatus - belongs_to :gl_project, class_name: 'Project', foreign_key: :gitlab_id + belongs_to :gl_project, class_name: '::Project', foreign_key: :gitlab_id has_many :commits, ->() { order(:committed_at) }, dependent: :destroy, class_name: 'Ci::Commit' has_many :builds, through: :commits, dependent: :destroy, class_name: 'Ci::Build' @@ -92,11 +92,13 @@ module Ci project end + # TODO: remove def from_gitlab(user, scope = :owned, options) opts = user.authenticate_options opts.merge! options - projects = Ci::Network.new.projects(opts.compact, scope) + raise 'Implement me of fix' + #projects = Ci::Network.new.projects(opts.compact, scope) if projects projects.map { |pr| OpenStruct.new(pr) } diff --git a/app/services/ci/create_project_service.rb b/app/services/ci/create_project_service.rb index 81bbc29bb4f..0419612d521 100644 --- a/app/services/ci/create_project_service.rb +++ b/app/services/ci/create_project_service.rb @@ -13,9 +13,9 @@ module Ci project_url: project_route.gsub(":project_id", @project.id.to_s), } - unless Ci::Network.new.enable_ci(@project.gitlab_id, data, {private_token: current_user.private_token}) - raise ActiveRecord::Rollback - end + gl_project = ::Project.find(@project.gitlab_id) + gl_project.build_missing_services + gl_project.gitlab_ci_service.update_attributes(data.merge(active: true)) end if forked_project diff --git a/lib/api/services.rb b/lib/api/services.rb index 73645cedea4..6d2322bb464 100644 --- a/lib/api/services.rb +++ b/lib/api/services.rb @@ -20,7 +20,7 @@ module API end required_attributes! validators.map(&:attributes).flatten.uniq - attrs = attributes_for_keys service_attributes + attrs = attributes_for_keys service_attributes if project_service.update_attributes(attrs.merge(active: true)) true @@ -41,7 +41,7 @@ module API attrs = service_attributes.inject({}) do |hash, key| hash.merge!(key => nil) end - + if project_service.update_attributes(attrs.merge(active: false)) true else diff --git a/lib/ci/api/projects.rb b/lib/ci/api/projects.rb index bdcacecf6ab..556de3bff9f 100644 --- a/lib/ci/api/projects.rb +++ b/lib/ci/api/projects.rb @@ -18,7 +18,7 @@ module Ci project = Ci::Project.find(params[:project_id]) unauthorized! unless current_user.can_manage_project?(project.gitlab_id) - + web_hook = project.web_hooks.new({ url: params[:web_hook] }) if web_hook.save diff --git a/spec/models/ci/network_spec.rb b/spec/models/ci/network_spec.rb deleted file mode 100644 index 551eb08ab33..00000000000 --- a/spec/models/ci/network_spec.rb +++ /dev/null @@ -1,54 +0,0 @@ -require 'spec_helper' - -describe Network do - let(:network) { Network.new } - - describe :enable_ci do - subject { network.enable_ci '', '', '' } - - context 'on success' do - before do - response = double - allow(response).to receive(:code) { 200 } - allow(network.class).to receive(:put) { response } - end - - it { is_expected.to be_truthy } - end - - context 'on failure' do - before do - response = double - allow(response).to receive(:code) { 404 } - allow(network.class).to receive(:put) { response } - end - - it { is_expected.to be_nil } - end - end - - describe :disable_ci do - let(:response) { double } - subject { network.disable_ci '', '' } - - context 'on success' do - let(:parsed_response) { 'parsed' } - before do - allow(response).to receive(:code) { 200 } - allow(response).to receive(:parsed_response) { parsed_response } - allow(network.class).to receive(:delete) { response } - end - - it { is_expected.to equal(parsed_response) } - end - - context 'on failure' do - before do - allow(response).to receive(:code) { 404 } - allow(network.class).to receive(:delete) { response } - end - - it { is_expected.to be_nil } - end - end -end