ADD devops authorize

This commit is contained in:
Jasder 2020-07-22 15:16:01 +08:00
parent 3c7b257462
commit b7b3751d43
3 changed files with 16 additions and 11 deletions

View File

@ -342,7 +342,8 @@ class ApplicationController < ActionController::Base
elsif params[:debug] == 'student' elsif params[:debug] == 'student'
User.current = User.find 8686 User.current = User.find 8686
elsif params[:debug] == 'admin' elsif params[:debug] == 'admin'
user = User.find 1 logger.info "@@@@@@@@@@@@@@@@@@@@@@ debug mode....."
user = User.find 36480
User.current = user User.current = user
cookies.signed[:user_id] = user.id cookies.signed[:user_id] = user.id
end end
@ -384,7 +385,7 @@ class ApplicationController < ActionController::Base
def current_user def current_user
if Rails.env.development? if Rails.env.development?
User.current = User.find 1 User.current = User.find 36480
else else
User.current User.current
end end
@ -743,6 +744,11 @@ class ApplicationController < ActionController::Base
interactor.success? ? render_ok : render_error(interactor.error) interactor.success? ? render_ok : render_error(interactor.error)
end end
# devops 权限验证
def devops_authorize!
render_forbidden unless @project.owner?(current_user)
end
private private
def object_not_found def object_not_found
uid_logger("Missing template or cant't find record, responding with 404") uid_logger("Missing template or cant't find record, responding with 404")

View File

@ -3,6 +3,7 @@ class DevOps::BuildsController < ApplicationController
before_action :require_login before_action :require_login
before_action :find_project before_action :find_project
before_action :devops_authorize!
def index def index
cloud_account = @project.dev_ops_cloud_account cloud_account = @project.dev_ops_cloud_account

View File

@ -1,19 +1,14 @@
class DevOps::CloudAccountsController < ApplicationController class DevOps::CloudAccountsController < ApplicationController
before_action :require_login before_action :require_login
before_action :find_project before_action :find_project
before_action :devops_authorize!
def create def create
ActiveRecord::Base.transaction do ActiveRecord::Base.transaction do
DevOps::CreateCloudAccountForm.new(devops_params).validate! DevOps::CreateCloudAccountForm.new(devops_params).validate!
logger.info "######### devops_params: #{devops_params}"
logger.info "######### ......: #{(IPAddr.new devops_params[:ip_num]).to_i}"
logger.info "######### ......: #{DevOps::CloudAccount.encrypted_secret(devops_params[:secret])}"
# 1. 保存华为云服务器帐号 # 1. 保存华为云服务器帐号
logger.info "######### ......ff: #{devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))}"
create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret])) create_params = devops_params.merge(ip_num: IPAddr.new(devops_params[:ip_num]).to_i, secret: DevOps::CloudAccount.encrypted_secret(devops_params[:secret]))
logger.info "######### create_params: #{create_params}"
if cloud_account = @project.dev_ops_cloud_account if cloud_account = @project.dev_ops_cloud_account
return render_error('该仓库已绑定了云帐号.') return render_error('该仓库已绑定了云帐号.')
else else
@ -37,6 +32,7 @@ class DevOps::CloudAccountsController < ApplicationController
rpc_secret = SecureRandom.hex 16 rpc_secret = SecureRandom.hex 16
logger.info "######### rpc_secret: #{rpc_secret}" logger.info "######### rpc_secret: #{rpc_secret}"
# 3. 创建drone server # 3. 创建drone server
drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd drone_server_cmd = DevOps::Drone::Server.new(oauth.client_id, oauth.client_secret, cloud_account.drone_host, rpc_secret).generate_cmd
logger.info "######### drone_server_cmd: #{drone_server_cmd}" logger.info "######### drone_server_cmd: #{drone_server_cmd}"
@ -52,10 +48,12 @@ class DevOps::CloudAccountsController < ApplicationController
redirect_url = "#{cloud_account.drone_url}/login" redirect_url = "#{cloud_account.drone_url}/login"
logger.info "######### redirect_url: #{redirect_url}" logger.info "######### redirect_url: #{redirect_url}"
if result
if result && !result.blank?
render_ok(redirect_url: redirect_url) render_ok(redirect_url: redirect_url)
else else
render_error('激活失败') render_error('激活失败, 请检查你的云服务器信息是否正确.')
raise ActiveRecord::Rollback
end end
end end
rescue Exception => ex rescue Exception => ex