Skip to content
Snippets Groups Projects
hooks_controller.rb 1.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • class Projects::HooksController < Projects::ApplicationController
    
      # Authorize
    
      before_action :authorize_admin_project!
    
    
      respond_to :html
    
    
      layout "project_settings"
    
    
      def index
    
    skv's avatar
    skv committed
        @hooks = @project.hooks
    
      end
    
      def create
    
        @hook = @project.hooks.new(hook_params)
    
        @hook.save
    
        if @hook.valid?
    
    Vinnie Okada's avatar
    Vinnie Okada committed
          redirect_to namespace_project_hooks_path(@project.namespace, @project)
    
          @hooks = @project.hooks.select(&:persisted?)
    
        if !@project.empty_repo?
    
          status, message = TestHookService.new.execute(hook, current_user)
    
          if status && status >= 200 && status < 400
    
            flash[:notice] = "Hook executed successfully: HTTP #{status}"
    
          elsif status
            flash[:alert] = "Hook executed successfully but returned HTTP #{status} #{message}"
    
            flash[:alert] = "Hook execution failed: #{message}"
    
        else
          flash[:alert] = 'Hook execution failed. Ensure the project has commits.'
        end
    
        redirect_back_or_default(default: { action: 'index' })
    
      def destroy
    
    Vinnie Okada's avatar
    Vinnie Okada committed
        redirect_to namespace_project_hooks_path(@project.namespace, @project)
    
    
      private
    
      def hook
        @hook ||= @project.hooks.find(params[:id])
      end
    
        params.require(:hook).permit(
          :build_events,
    
          :pipeline_events,
    
          :enable_ssl_verification,
          :issues_events,
    
          :merge_requests_events,
          :note_events,
          :push_events,
          :tag_push_events,
          :token,