summaryrefslogtreecommitdiff
path: root/lib/api/forks.rb
blob: cb53d6810466b9d656b05b7a9078880deb3aea26 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
module API
  class Forks < Grape::API
    resource :forks do
      # Create a fork
      #
      # Parameters:
      #   project_id (required) - The ID of a project
      #   project_token (requires) - Project token
      #   private_token(required) - User private token
      #   data (required) - GitLab project data (name_with_namespace, web_url, default_branch, ssh_url_to_repo)
      #
      #
      # Example Request:
      #   POST /forks
      post do
        required_attributes! [:project_id, :data, :project_token, :private_token]
        project = Project.find_by!(gitlab_id: params[:project_id])
        authenticate_project_token!(project)

        user_session = UserSession.new
        user = user_session.authenticate(private_token: params[:private_token])

        fork = CreateProjectService.new.execute(
          user,
          params[:data],
          RoutesHelper.project_url(":project_id"),
          project
        )

        if fork
          present fork, with: Entities::Project
        else
          not_found!
        end
      end
    end
  end
end