diff options
Diffstat (limited to 'lib/api/import_bitbucket_server.rb')
-rw-r--r-- | lib/api/import_bitbucket_server.rb | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/lib/api/import_bitbucket_server.rb b/lib/api/import_bitbucket_server.rb new file mode 100644 index 00000000000..df3235420e9 --- /dev/null +++ b/lib/api/import_bitbucket_server.rb @@ -0,0 +1,44 @@ +# frozen_string_literal: true + +module API + class ImportBitbucketServer < Grape::API::Instance + helpers do + def client + @client ||= BitbucketServer::Client.new(credentials) + end + + def credentials + @credentials ||= { + base_uri: params[:bitbucket_server_url], + user: params[:bitbucket_server_username], + password: params[:personal_access_token] + } + end + end + + desc 'Import a BitBucket Server repository' do + detail 'This feature was introduced in GitLab 13.2.' + success ::ProjectEntity + end + + params do + requires :bitbucket_server_url, type: String, desc: 'Bitbucket Server URL' + requires :bitbucket_server_username, type: String, desc: 'BitBucket Server Username' + requires :personal_access_token, type: String, desc: 'BitBucket Server personal access token/password' + requires :bitbucket_server_project, type: String, desc: 'BitBucket Server Project Key' + requires :bitbucket_server_repo, type: String, desc: 'BitBucket Server Repository Name' + optional :new_name, type: String, desc: 'New repo name' + optional :new_namespace, type: String, desc: 'Namespace to import repo into' + end + + post 'import/bitbucket_server' do + result = Import::BitbucketServerService.new(client, current_user, params).execute(credentials) + + if result[:status] == :success + present ProjectSerializer.new.represent(result[:project], serializer: :import) + else + render_api_error!({ error: result[:message] }, result[:http_status]) + end + end + end +end |