Skip to content
Snippets Groups Projects
Select Git revision
  • move-gl-dropdown
  • improve-table-pagination-spec
  • move-markdown-preview
  • winh-fix-merge-request-spec
  • master default
  • index-namespaces-lower-name
  • winh-single-karma-test
  • 10-3-stable
  • 36782-replace-team-user-role-with-add_role-user-in-specs
  • winh-modal-internal-state
  • tz-ide-file-icons
  • 38869-milestone-select
  • update-autodevops-template
  • jivl-activate-repo-cookie-preferences
  • qa-add-deploy-key
  • docs-move-article-ldap
  • 40780-choose-file
  • 22643-manual-job-page
  • refactor-cluster-show-page-conservative
  • dm-sidekiq-versioning
  • v10.4.0.pre
  • v10.3.0
  • v10.3.0-rc5
  • v10.3.0-rc4
  • v10.3.0-rc3
  • v10.3.0-rc2
  • v10.2.5
  • v10.3.0-rc1
  • v10.0.7
  • v10.1.5
  • v10.2.4
  • v10.2.3
  • v10.2.2
  • v10.2.1
  • v10.3.0.pre
  • v10.2.0
  • v10.2.0-rc4
  • v10.2.0-rc3
  • v10.1.4
  • v10.2.0-rc2
40 results

deploy_keys.rb

Blame
  • Forked from GitLab.org / GitLab FOSS
    45170 commits behind the upstream repository.
    deploy_keys.rb 2.07 KiB
    module API
      # Projects API
      class DeployKeys < Grape::API
        before { authenticate! }
        before { authorize_admin_project }
    
        resource :projects do
          # Get a specific project's keys
          #
          # Example Request:
          #   GET /projects/:id/keys
          get ":id/keys" do
            present user_project.deploy_keys, with: Entities::SSHKey
          end
    
          # Get single key owned by currently authenticated user
          #
          # Example Request:
          #   GET /projects/:id/keys/:id
          get ":id/keys/:key_id" do
            key = user_project.deploy_keys.find params[:key_id]
            present key, with: Entities::SSHKey
          end
    
          # Add new ssh key to currently authenticated user
          # If deploy key already exists - it will be joined to project
          # but only if original one was is accessible by same user
          #
          # Parameters:
          #   key (required) - New SSH Key
          #   title (required) - New SSH Key's title
          # Example Request:
          #   POST /projects/:id/keys
          post ":id/keys" do
            attrs = attributes_for_keys [:title, :key]
    
            if attrs[:key].present?
              attrs[:key].strip!
    
              # check if key already exist in project
              key = user_project.deploy_keys.find_by_key(attrs[:key])
              if key
                present key, with: Entities::SSHKey
                return
              end
    
              # Check for available deploy keys in other projects
              key = current_user.accessible_deploy_keys.find_by_key(attrs[:key])
              if key
                user_project.deploy_keys << key
                present key, with: Entities::SSHKey
                return
              end
            end
    
            key = DeployKey.new attrs
    
            if key.valid? && user_project.deploy_keys << key
              present key, with: Entities::SSHKey
            else
              not_found!
            end
          end
    
          # Delete existed ssh key of currently authenticated user
          #
          # Example Request:
          #   DELETE /projects/:id/keys/:id
          delete ":id/keys/:key_id" do
            key = user_project.deploy_keys.find params[:key_id]
            key.destroy
          end
        end
      end
    end