From 0c2c917c7f54a4b4d795fb7e8a42e81528edbcaf Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Thu, 15 Oct 2020 17:00:02 +0800 Subject: [PATCH] =?UTF-8?q?FIX=20=E7=BA=A0=E6=AD=A3drone=E6=8E=88=E6=9D=83?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/ci/cloud_accounts_controller.rb | 5 ++++- .../concerns/ci/cloud_account_manageable.rb | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/app/controllers/ci/cloud_accounts_controller.rb b/app/controllers/ci/cloud_accounts_controller.rb index 0b230566f..bb5df9895 100644 --- a/app/controllers/ci/cloud_accounts_controller.rb +++ b/app/controllers/ci/cloud_accounts_controller.rb @@ -87,7 +87,10 @@ class Ci::CloudAccountsController < Ci::BaseController password = params[:password].to_s return render_error('你输入的密码不正确.') unless current_user.check_password?(password) - result = gitea_oauth_grant!(current_user.login, password, @cloud_account.drone_url, current_user.oauths.last&.client_id) + oauth = current_user.oauths.last + return render_error("服务器出小差了.") if oauth.blank? + + result = gitea_oauth_grant!(password, oauth) result === true ? render_ok : render_error('授权失败.') end diff --git a/app/controllers/concerns/ci/cloud_account_manageable.rb b/app/controllers/concerns/ci/cloud_account_manageable.rb index f27267023..7a1011154 100644 --- a/app/controllers/concerns/ci/cloud_account_manageable.rb +++ b/app/controllers/concerns/ci/cloud_account_manageable.rb @@ -89,13 +89,24 @@ module Ci::CloudAccountManageable Ci::CloudAccount.exists?(ip_num: ip_num) ? [true, "#{devops_params[:ip_num]}服务器已被使用."] : [false, nil] end - def gitea_oauth_grant!(username, password, drone_url, client_id) + def gitea_auto_create_auth_grant!(gitea_oauth_id) + connection = Gitea::Database.set_connection.connection + 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} );" + connection.execute(sql) + end + + def gitea_oauth_grant!(password, oauth) + gitea_auto_create_auth_grant!(oauth&.gitea_oauth_id) + state = SecureRandom.hex(8) # 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("#{drone_url}/login") - grant_url = "#{Gitea.gitea_config[:domain]}/login/oauth/authorize?client_id=#{client_id}&redirect_uri=#{redirect_uri}&response_type=code&state=#{state}" + 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}" logger.info "[gitea] grant_url: #{grant_url}" conn = Faraday.new(url: grant_url) do |req|