Skip to content
Snippets Groups Projects
system_hooks.rb 1.91 KiB
Newer Older
  • Learn to ignore specific revisions
  • Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
      # Hooks API
      class SystemHooks < Grape::API
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          authenticate!
          authenticated_as_admin!
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
    
        resource :hooks do
    
          desc 'Get the list of system hooks' do
            success Entities::Hook
          end
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          get do
    
            hooks = SystemHook.all
    
            present hooks, with: Entities::Hook
    
          desc 'Create a new system hook' do
            success Entities::Hook
          end
          params do
    
            requires :url, type: String, desc: "The URL to send the request to"
            optional :token, type: String, desc: 'The token used to validate payloads'
            optional :push_events, type: Boolean, desc: "Trigger hook on push events"
            optional :tag_push_events, type: Boolean, desc: "Trigger hook on tag push events"
            optional :enable_ssl_verification, type: Boolean, desc: "Do SSL verification when triggering the hook"
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          post do
    
            hook = SystemHook.new(declared_params(include_missing: false))
    
    
            if hook.save
              present hook, with: Entities::Hook
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
            else
    
              render_validation_error!(hook)
    
          desc 'Test a hook'
          params do
            requires :id, type: Integer, desc: 'The ID of the system hook'
          end
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          get ":id" do
    
            hook = SystemHook.find(params[:id])
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
            data = {
              event_name: "project_create",
              name: "Ruby",
              path: "ruby",
              project_id: 1,
              owner_name: "Someone",
              owner_email: "example@gitlabhq.com"
            }
    
            hook.execute(data, 'system_hooks')
    
          desc 'Delete a hook' do
            success Entities::Hook
          end
          params do
            requires :id, type: Integer, desc: 'The ID of the system hook'
          end
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          delete ":id" do
    
            hook = SystemHook.find_by(id: params[:id])
            not_found!('System hook') unless hook
    
            present hook.destroy, with: Entities::Hook
    
    Andrey Kumanyaev's avatar
    Andrey Kumanyaev committed
          end
        end
      end
    end