class Projects::WebhooksController < Projects::BaseController before_action :require_manager! before_action :find_webhook, only:[:edit, :update, :destroy, :tasks, :test] def index @webhooks = @project.webhooks @webhooks = kaminari_paginate(@webhooks) end def create ActiveRecord::Base.transaction do return render_error("webhooks数量已到上限!请删除暂不使用的webhooks以进行添加操作") if @project.webhooks.size > 19 return render_error("参数错误.") unless webhook_params.present? form = Projects::Webhooks::CreateForm.new(webhook_params) return render json: {status: -1, message: form.errors} unless form.validate! response = Gitea::Repository::Webhooks::CreateService.new(operating_token, @project&.owner&.login, @project&.identifier, gitea_webhooks_params).call if response[0] == 201 @webhook = response[2] else render_error("创建失败.") end end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) end def edit end def update return render_error("参数错误.") unless webhook_params.present? form = Projects::Webhooks::CreateForm.new(webhook_params) return render json: {status: -1, message: form.errors} unless form.validate! response = Gitea::Repository::Webhooks::UpdateService.call(operating_token, @project&.owner&.login, @project&.identifier, @webhook.id, gitea_webhooks_params) if response[0] == 200 @webhook = response[2] render_ok else render_error("更新失败.") end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) end def destroy response = Gitea::Repository::Webhooks::DeleteService.call(operating_token, @project&.owner&.login, @project&.identifier, @webhook.id) if response[0] == 204 @webhook = response[2] render_ok else render_error("删除失败.") end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) end def tasks @tasks = @webhook.tasks.where(is_delivered: true).order("delivered desc") @tasks = kaminari_paginate(@tasks) end def test ActiveRecord::Base.transaction do response = Gitea::Repository::Webhooks::TestService.call(operating_token, @project&.owner&.login, @project&.identifier, @webhook.id) if response[0] == 204 render_ok else render_error("测试推送失败.") end end rescue Exception => e uid_logger_error(e.message) tip_exception(e.message) end private def find_webhook @webhook = @project.webhooks.find_by_id(params[:id]) return render_not_found if @webhook.nil? end def webhook_params params.require(:webhook).permit(:url, :type, :http_method, :content_type, :secret, :active, :branch_filter, events: []) end def webhook_type webhook_params.fetch(:type, "gitea") end def webhook_branch_filter webhook_params.fetch(:branch_filter, "*") end def gitea_webhooks_params { active: webhook_params[:active], branch_filter: webhook_branch_filter, config: { content_type: webhook_params[:content_type], url: webhook_params[:url], http_method: webhook_params[:http_method], secret: webhook_params[:secret] }, events: webhook_params[:events], type: webhook_type, } end def operating_token @project.member?(current_user) ? current_user.gitea_token : @project&.owner&.gitea_token end end