From 2b86c7eb9595bb41b5ac7b8fed511668dd4c8128 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Thu, 31 Dec 2020 16:47:16 +0800 Subject: [PATCH 01/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9turstie=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=9C=8D=E5=8A=A1=E5=99=A8=EF=BC=8C=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E6=97=B6=E8=B0=83=E7=94=A8drone=20url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/ci/cloud_account_manageable.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index ce60de3ba..f1d4dcfe9 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -153,6 +153,11 @@ module Ci::CloudAccountManageable end def drone_oauth_user!(url, state) + cloud_account = current_user.ci_cloud_account + if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE + url = "#{@cloud_account.drone_url}/login" + end + logger.info "[drone] drone_oauth_user url: #{url}" conn = Faraday.new(url: url) do |req| req.request :url_encoded From a84af1d74324acbe70929bf730c37d1c70ce52fc Mon Sep 17 00:00:00 2001 From: moshenglv Date: Thu, 31 Dec 2020 17:07:10 +0800 Subject: [PATCH 02/12] =?UTF-8?q?=E6=A0=B9=E6=8D=AE=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=88=9B=E5=BB=BA=E4=B8=8D=E5=90=8C=E7=9A=84CI?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E8=BF=9E=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 63e65a38f..49da04923 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,8 +4,7 @@ class UsersController < ApplicationController before_action :load_user, only: [:show, :homepage_info, :sync_token, :sync_gitea_pwd, :projects, :watch_users, :fan_users] before_action :check_user_exist, only: [:show, :homepage_info,:projects, :watch_users, :fan_users] before_action :require_login, only: %i[me list] - before_action :connect_to_ci_database, only: :get_user_info, if: -> { current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification? } - + before_action :connect_to_ci_db, only: [:get_user_info] skip_before_action :check_sign, only: [:attachment_show] def list From 3d332c75d6d78b2fdf8ff266396db4881fe96f75 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Thu, 31 Dec 2020 17:13:41 +0800 Subject: [PATCH 03/12] =?UTF-8?q?=E8=BF=9E=E6=8E=A5ci=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E5=BA=93=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/users_controller.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 49da04923..4a67fd413 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -7,6 +7,17 @@ class UsersController < ApplicationController before_action :connect_to_ci_db, only: [:get_user_info] skip_before_action :check_sign, only: [:attachment_show] + def connect_to_ci_db(options={}) + if !(current_user && !current_user.is_a?(AnonymousUser) && current_user.devops_certification?) + return + end + if current_user.ci_cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE + connect_to_trustie_ci_database(options) + else + connect_to_ci_database(options) + end + end + def list scope = User.active.recent.like(params[:search]).includes(:user_extension) @total_count = scope.size From 47093ffcb94b32581c94448b6f2581c84b2e926a Mon Sep 17 00:00:00 2001 From: moshenglv Date: Thu, 31 Dec 2020 19:39:20 +0800 Subject: [PATCH 04/12] =?UTF-8?q?=E8=B0=83=E7=94=A8drone=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/ci/cloud_account_manageable.rb | 37 ++++++++++++------- app/libs/ci/drone/api.rb | 8 +++- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f1d4dcfe9..9c350d77b 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -154,21 +154,32 @@ module Ci::CloudAccountManageable def drone_oauth_user!(url, state) cloud_account = current_user.ci_cloud_account + # 如果是使用trustie服务器,则只需要调用drone接口创建用户即可 if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE - url = "#{@cloud_account.drone_url}/login" + config = Rails.application.config_for(:configuration).symbolize_keys! + trustie_drone_config = config[:trustie_drone].symbolize_keys! + createUserParams = { + login: cloud_account.account, + token: trustie_drone_config[:admin_token], + email: trustie_drone_config[:email], + avatar_url: trustie_drone_config[:avatar_url] + } + #创建drone用户 + result = Ci::Drone::API.new(trustie_drone_config[:admin_token], cloud_account.drone_url, nil, nil, createUserParams).create_user + result['login'] == cloud_account.account ? true : false + elsif + logger.info "[drone] drone_oauth_user url: #{url}" + conn = Faraday.new(url: url) do |req| + req.request :url_encoded + req.adapter Faraday.default_adapter + req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" + end + + response = conn.get + logger.info "[drone] response headers: #{response.headers}" + + response.headers['location'].include?('error') ? false : true end - - logger.info "[drone] drone_oauth_user url: #{url}" - conn = Faraday.new(url: url) do |req| - req.request :url_encoded - req.adapter Faraday.default_adapter - req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" - end - - response = conn.get - logger.info "[drone] response headers: #{response.headers}" - - response.headers['location'].include?('error') ? false : true end private diff --git a/app/libs/ci/drone/api.rb b/app/libs/ci/drone/api.rb index dd346d7b1..c2bb0c0f3 100644 --- a/app/libs/ci/drone/api.rb +++ b/app/libs/ci/drone/api.rb @@ -78,5 +78,11 @@ class Ci::Drone::API < Ci::Drone::Request def sync_repos post(endpoint, "/api/users/repos", drone_token: drone_token) end - + + # Creates a user. + # POST /api/users + def create_user + post(endpoint, "/api/users", {login: options[:login], email: options[:email], avatar_url:options[:avatar_url],active:true, drone_token: options[:token]}) + end + end From 1108b298f0df756ab884ac25a0c51335e97cf7bb Mon Sep 17 00:00:00 2001 From: moshenglv Date: Mon, 4 Jan 2021 09:41:04 +0800 Subject: [PATCH 05/12] =?UTF-8?q?=E7=BB=91=E5=AE=9A=E8=B0=83=E7=94=A8gitea?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=EF=BC=8C=E9=94=99=E8=AF=AF=EF=BC=8C?= =?UTF-8?q?=E6=8A=9B=E5=87=BA=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/ci/cloud_account_manageable.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 9c350d77b..387194c34 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -16,6 +16,9 @@ module Ci::CloudAccountManageable # 2. 生成oauth2应用程序的client_id和client_secrete gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline-#{SecureRandom.hex(8)}", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" + + raise 'Gitea接口异常' if gitea_oauth['client_id'].blank? + oauth = Oauth.new(client_id: gitea_oauth['client_id'], client_secret: gitea_oauth['client_secret'], redirect_uri: gitea_oauth['redirect_uris'], @@ -71,6 +74,9 @@ module Ci::CloudAccountManageable #生成oauth2应用程序的client_id和client_secrete gitea_oauth = Gitea::Oauth2::CreateService.call(current_user.gitea_token, {name: "pipeline-#{SecureRandom.hex(8)}", redirect_uris: ["#{cloud_account.drone_url}/login"]}) logger.info "######### gitea_oauth: #{gitea_oauth}" + + raise 'Gitea接口异常' if gitea_oauth['client_id'].blank? + oauth = Oauth.new(client_id: gitea_oauth['client_id'], client_secret: gitea_oauth['client_secret'], redirect_uri: gitea_oauth['redirect_uris'], From 4aae60f3d8dec5eb4e27c396898a23f76753e4c8 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Mon, 4 Jan 2021 09:49:42 +0800 Subject: [PATCH 06/12] =?UTF-8?q?=E6=89=93=E5=8D=B0=E8=B0=83=E7=94=A8drone?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E7=94=A8=E6=88=B7=E6=8E=A5=E5=8F=A3=E6=97=A5?= =?UTF-8?q?=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/ci/cloud_account_manageable.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 387194c34..b8f8cd348 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -172,6 +172,7 @@ module Ci::CloudAccountManageable } #创建drone用户 result = Ci::Drone::API.new(trustie_drone_config[:admin_token], cloud_account.drone_url, nil, nil, createUserParams).create_user + logger.info "[drone] drone_create_user result: #{result}" result['login'] == cloud_account.account ? true : false elsif logger.info "[drone] drone_oauth_user url: #{url}" From bab917496697e3c36dcaf23a1aeb33152182ede6 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Mon, 4 Jan 2021 14:57:28 +0800 Subject: [PATCH 07/12] =?UTF-8?q?=E9=80=89trustie=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E8=A7=A3=E7=BB=91=E6=97=B6=E5=88=A0=E9=99=A4drone?= =?UTF-8?q?=E7=94=A8=E6=88=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/ci/cloud_account_manageable.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index b8f8cd348..3e87b9aeb 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -97,7 +97,11 @@ module Ci::CloudAccountManageable if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_SELF @connection.execute("DROP DATABASE IF EXISTS #{current_user.login}_drone") # TOTO drop drone database + else + #删除drone用户 + @trustie_db_connection.execute("DELETE FROM users WHERE user_login = '#{cloud_account.account}'") end + cloud_account.destroy! unless cloud_account.blank? current_user.unbind_account! end @@ -120,7 +124,11 @@ module Ci::CloudAccountManageable return [true, "你已经绑定了云帐号."] unless current_user.ci_cloud_account.blank? ip_num = IPAddr.new(devops_params[:ip_num]).to_i - Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] + + #自有服务器进行判断 + if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_SELF + Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] + end end def check_trustie_bind_cloud_account! From 387a565fe3028926545311e8b806110e8493a17e Mon Sep 17 00:00:00 2001 From: moshenglv Date: Mon, 4 Jan 2021 16:18:49 +0800 Subject: [PATCH 08/12] =?UTF-8?q?=E8=87=AA=E6=9C=89=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E8=BF=9B=E8=A1=8C=E5=88=A4=E6=96=AD=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E7=BB=91=E5=AE=9A=E4=BA=91=E8=B4=A6=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/concerns/ci/cloud_account_manageable.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 3e87b9aeb..5e53b4bc7 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -126,7 +126,8 @@ module Ci::CloudAccountManageable ip_num = IPAddr.new(devops_params[:ip_num]).to_i #自有服务器进行判断 - if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_SELF + cloud_account = current_user.ci_cloud_account + if cloud_account && cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_SELF Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] end end From e412b97003cc1ad2ca9a382881ca2177a0382a61 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Tue, 5 Jan 2021 15:04:01 +0800 Subject: [PATCH 09/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/ci/cloud_account_manageable.rb | 37 +++++-------------- 1 file changed, 10 insertions(+), 27 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 5e53b4bc7..f477e3f1c 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -168,34 +168,17 @@ module Ci::CloudAccountManageable end def drone_oauth_user!(url, state) - cloud_account = current_user.ci_cloud_account - # 如果是使用trustie服务器,则只需要调用drone接口创建用户即可 - if cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE - config = Rails.application.config_for(:configuration).symbolize_keys! - trustie_drone_config = config[:trustie_drone].symbolize_keys! - createUserParams = { - login: cloud_account.account, - token: trustie_drone_config[:admin_token], - email: trustie_drone_config[:email], - avatar_url: trustie_drone_config[:avatar_url] - } - #创建drone用户 - result = Ci::Drone::API.new(trustie_drone_config[:admin_token], cloud_account.drone_url, nil, nil, createUserParams).create_user - logger.info "[drone] drone_create_user result: #{result}" - result['login'] == cloud_account.account ? true : false - elsif - logger.info "[drone] drone_oauth_user url: #{url}" - conn = Faraday.new(url: url) do |req| - req.request :url_encoded - req.adapter Faraday.default_adapter - req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" - end - - response = conn.get - logger.info "[drone] response headers: #{response.headers}" - - response.headers['location'].include?('error') ? false : true + logger.info "[drone] drone_oauth_user url: #{url}" + conn = Faraday.new(url: url) do |req| + req.request :url_encoded + req.adapter Faraday.default_adapter + req.headers["cookie"] = "_session_=#{SecureRandom.hex(28)}; _oauth_state_=#{state}" end + + response = conn.get + logger.info "[drone] response headers: #{response.headers}" + + response.headers['location'].include?('error') ? false : true end private From 910425ddb3660b64dc1d7e724d389df4387e0612 Mon Sep 17 00:00:00 2001 From: moshenglv Date: Tue, 5 Jan 2021 16:40:09 +0800 Subject: [PATCH 10/12] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=BD=93=E9=80=89=E6=8B=A9trustie?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E5=99=A8=E6=97=B6=EF=BC=8CclientId=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E5=88=9B=E5=BB=BAdrone=E7=9A=84clientId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/ci/cloud_account_manageable.rb | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f477e3f1c..30b15f02d 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -57,12 +57,16 @@ module Ci::CloudAccountManageable result && !result.blank? ? cloud_account : nil end - # trustie提供服务器,绑定流程 - def trustie_bind_account! - + def trustie_drone_server_config # 读取drone配置信息 config = Rails.application.config_for(:configuration).symbolize_keys! trustie_drone_config = config[:trustie_drone].symbolize_keys! + return trustie_drone_config + end + + # trustie提供服务器,绑定流程 + def trustie_bind_account! + trustie_drone_config = trustie_drone_server_config raise 'trustie_drone config missing' if trustie_drone_config.blank? # 创建云账号 @@ -152,7 +156,8 @@ module Ci::CloudAccountManageable # redirect_uri eg: # https://localhost:3000/login/oauth/authorize?client_id=94976481-ad0e-4ed4-9247-7eef106007a2&redirect_uri=http%3A%2F%2F121.69.81.11%3A80%2Flogin&response_type=code&state=9cab990b9cfb1805 redirect_uri = CGI.escape("#{@cloud_account.drone_url}/login") - grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{oauth&.client_id}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" + clientId = client_id(oauth) + grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{clientId}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" logger.info "[gitea] grant_url: #{grant_url}" conn = Faraday.new(url: grant_url) do |req| @@ -186,4 +191,14 @@ module Ci::CloudAccountManageable params.permit(:account, :secret, :ip_num) end + def client_id(oauth) + #如果是使用trustie服务器使用管理员用户的clientId + if current_user.ci_cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE + trustie_drone_config = trustie_drone_server_config + return trustie_drone_config[:client_id] + else + return oauth&.client_id + end + end + end From f7a5157788a2e02c3fbee83a93befd3e3ce6713e Mon Sep 17 00:00:00 2001 From: moshenglv Date: Wed, 6 Jan 2021 12:59:34 +0800 Subject: [PATCH 11/12] =?UTF-8?q?=E4=BD=BF=E7=94=A8trustie=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E7=9A=84=E6=9C=8D=E5=8A=A1=E5=99=A8=EF=BC=8C=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E5=A4=9A=E5=A2=9E=E5=8A=A0=E4=B8=80=E6=9D=A1=E6=8E=88?= =?UTF-8?q?=E6=9D=83=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../concerns/ci/cloud_account_manageable.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index 30b15f02d..00c42305d 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -145,8 +145,16 @@ module Ci::CloudAccountManageable unix_time = Time.now.to_i # 目前直接操作db,可以建立对应的model进行操作 - sql = "INSERT INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{current_user.gitea_uid}, #{gitea_oauth_id}, 0, #{unix_time}, #{unix_time} );" + sql = "REPLACE INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{current_user.gitea_uid}, #{gitea_oauth_id}, 0, #{unix_time}, #{unix_time} );" connection.execute(sql) + + #如果使用trustie提供的服务器,需要多增加一条授权信息 + if current_user.ci_cloud_account.server_type == Ci::CloudAccount::SERVER_TYPE_TRUSTIE + trustie_drone_config = trustie_drone_server_config + admin_application_id = trustie_drone_config[:admin_application_id] + sql = "REPLACE INTO oauth2_grant ( user_id, application_id, counter, created_unix, updated_unix ) VALUES ( #{current_user.gitea_uid}, #{admin_application_id}, 0, #{unix_time}, #{unix_time} );" + connection.execute(sql) + end end def gitea_oauth_grant!(password, oauth) From cbe5b3afde29d3da940b891c53c5415ba7dfebfe Mon Sep 17 00:00:00 2001 From: moshenglv Date: Wed, 6 Jan 2021 14:45:34 +0800 Subject: [PATCH 12/12] =?UTF-8?q?=E8=A7=A3=E7=BB=91=E6=97=B6=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=BF=80=E6=B4=BB=E8=AF=A5=E7=94=A8=E6=88=B7=E7=9A=84?= =?UTF-8?q?=E6=89=80=E6=9C=89=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/base_controller.rb | 5 +++++ app/controllers/ci/cloud_accounts_controller.rb | 6 ++++++ app/models/ci/repo.rb | 6 ++++++ 3 files changed, 17 insertions(+) diff --git a/app/controllers/ci/base_controller.rb b/app/controllers/ci/base_controller.rb index 20a9cb15e..47788ed77 100644 --- a/app/controllers/ci/base_controller.rb +++ b/app/controllers/ci/base_controller.rb @@ -11,6 +11,11 @@ class Ci::BaseController < ApplicationController @ci_user, @repo = Ci::Repo.find_with_namespace(namespace, id) end + def load_all_repo + namespace = current_user.login + @repos = Ci::Repo.find_all_with_namespace(namespace) + end + private def authorize_access_project! unless @project.manager?(current_user) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 2d2c83a1a..52ef9a801 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -5,6 +5,7 @@ class Ci::CloudAccountsController < Ci::BaseController before_action :load_project, only: %i[create activate] before_action :authorize_owner!, only: %i[create activate] before_action :load_repo, only: %i[activate] + before_action :load_all_repo, only: %i[unbind] before_action :find_cloud_account, only: %i[show oauth_grant] before_action :validate_params!, only: %i[create bind] before_action only: %i[create bind] do @@ -96,6 +97,11 @@ class Ci::CloudAccountsController < Ci::BaseController def unbind ActiveRecord::Base.transaction do unbind_account! + if @repos + @repos.each do |repo| + repo.deactivate! + end + end render_ok end rescue Exception => ex diff --git a/app/models/ci/repo.rb b/app/models/ci/repo.rb index 8396cfa90..6fb42e046 100644 --- a/app/models/ci/repo.rb +++ b/app/models/ci/repo.rb @@ -14,6 +14,12 @@ class Ci::Repo < Ci::RemoteBase [user, repo] end + def self.find_all_with_namespace(namespace_path) + logger.info "########namespace_path: #{namespace_path}" + repos = Ci::Repo.where(repo_namespace: namespace_path) + return repos + end + def activate!(ci_user_id) update(repo_active: 1, repo_signer: generate_code,