Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
1
Merge Requests
1
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
gitlab-ce
Commits
7d69b23c
Commit
7d69b23c
authored
Jul 09, 2020
by
Illya Klymov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove code duplication from github/gitea controllers
Use base_controller methods for existing controllers
parent
0169a9d3
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
64 deletions
+49
-64
app/controllers/import/gitea_controller.rb
app/controllers/import/gitea_controller.rb
+8
-6
app/controllers/import/github_controller.rb
app/controllers/import/github_controller.rb
+41
-58
No files found.
app/controllers/import/gitea_controller.rb
View file @
7d69b23c
...
...
@@ -21,15 +21,17 @@ class Import::GiteaController < Import::GithubController
super
end
pr
ivate
pr
otected
def
host_key
:"
#{
provider
}
_host_url"
override
:provider_name
def
provider_name
:gitea
end
override
:provider
def
provider
:gitea
private
def
host_key
:"
#{
provider_name
}
_host_url"
end
override
:provider_url
...
...
app/controllers/import/github_controller.rb
View file @
7d69b23c
# frozen_string_literal: true
class
Import::GithubController
<
Import
::
BaseController
extend
::
Gitlab
::
Utils
::
Override
include
ImportHelper
include
ActionView
::
Helpers
::
SanitizeHelper
...
...
@@ -34,18 +36,11 @@ class Import::GithubController < Import::BaseController
# Improving in https://gitlab.com/gitlab-org/gitlab-foss/issues/55585
client_repos
respond_to
do
|
format
|
format
.
json
do
render
json:
{
imported_projects:
serialized_imported_projects
,
provider_repos:
serialized_provider_repos
,
namespaces:
serialized_namespaces
}
end
format
.
html
end
super
end
def
create
result
=
Import
::
GithubService
.
new
(
client
,
current_user
,
import_params
).
execute
(
access_params
,
provider
)
result
=
Import
::
GithubService
.
new
(
client
,
current_user
,
import_params
).
execute
(
access_params
,
provider
_name
)
if
result
[
:status
]
==
:success
render
json:
serialized_imported_projects
(
result
[
:project
])
...
...
@@ -55,44 +50,51 @@ class Import::GithubController < Import::BaseController
end
def
realtime_changes
Gitlab
::
PollingInterval
.
set_header
(
response
,
interval:
3_000
)
render
json:
already_added_projects
.
to_json
(
only:
[
:id
],
methods:
[
:import_status
])
super
end
pr
ivate
pr
otected
def
import_params
params
.
permit
(
permitted_import_params
)
end
# rubocop: disable CodeReuse/ActiveRecord
override
:importable_repos
def
importable_repos
already_added_projects_names
=
already_added_projects
.
map
(
&
:import_source
)
def
permitted_import_params
[
:repo_id
,
:new_name
,
:target_namespace
]
client_repos
.
reject
{
|
repo
|
already_added_projects_names
.
include?
(
repo
.
full_name
)
}
end
# rubocop: enable CodeReuse/ActiveRecord
def
serialized_imported_projects
(
projects
=
already_added_projects
)
ProjectSerializer
.
new
.
represent
(
projects
,
serializer: :import
,
provider_url:
provider_url
)
override
:incompatible_repos
def
incompatible_repos
[]
end
def
serialized_provider_repos
repos
=
client_repos
.
reject
{
|
repo
|
already_added_project_names
.
include?
repo
.
full_name
}
Import
::
ProviderRepoSerializer
.
new
(
current_user:
current_user
).
represent
(
repos
,
provider:
provider
,
provider_url:
provider_url
)
override
:provider_name
def
provider_name
:github
end
def
serialized_namespaces
NamespaceSerializer
.
new
.
represent
(
namespaces
)
override
:provider_url
def
provider_url
strong_memoize
(
:provider_url
)
do
provider
=
Gitlab
::
Auth
::
OAuth
::
Provider
.
config_for
(
'github'
)
provider
&
.
dig
(
'url'
).
presence
||
'https://github.com'
end
end
def
already_added_projects
@already_added_projects
||=
filtered
(
find_already_added_projects
(
provider
))
private
def
import_params
params
.
permit
(
permitted_import_params
)
end
def
already_added_project_name
s
@already_added_projects_names
||=
already_added_projects
.
pluck
(
:import_source
)
# rubocop:disable CodeReuse/ActiveRecord
def
permitted_import_param
s
[
:repo_id
,
:new_name
,
:target_namespace
]
end
def
namespaces
current_user
.
manageable_groups_with_routes
def
serialized_imported_projects
(
projects
=
already_added_projects
)
ProjectSerializer
.
new
.
represent
(
projects
,
serializer: :import
,
provider_url:
provider_url
)
end
def
expire_etag_cache
...
...
@@ -118,29 +120,29 @@ class Import::GithubController < Import::BaseController
end
def
import_enabled?
__send__
(
"
#{
provider
}
_import_enabled?"
)
# rubocop:disable GitlabSecurity/PublicSend
__send__
(
"
#{
provider
_name
}
_import_enabled?"
)
# rubocop:disable GitlabSecurity/PublicSend
end
def
realtime_changes_path
public_send
(
"realtime_changes_import_
#{
provider
}
_path"
,
format: :json
)
# rubocop:disable GitlabSecurity/PublicSend
public_send
(
"realtime_changes_import_
#{
provider
_name
}
_path"
,
format: :json
)
# rubocop:disable GitlabSecurity/PublicSend
end
def
new_import_url
public_send
(
"new_import_
#{
provider
}
_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
public_send
(
"new_import_
#{
provider
_name
}
_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
end
def
status_import_url
public_send
(
"status_import_
#{
provider
}
_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
public_send
(
"status_import_
#{
provider
_name
}
_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
end
def
callback_import_url
public_send
(
"users_import_
#{
provider
}
_callback_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
public_send
(
"users_import_
#{
provider
_name
}
_callback_url"
,
extra_import_params
)
# rubocop:disable GitlabSecurity/PublicSend
end
def
provider_unauthorized
session
[
access_token_key
]
=
nil
redirect_to
new_import_url
,
alert:
"Access denied to your
#{
Gitlab
::
ImportSources
.
title
(
provider
.
to_s
)
}
account."
alert:
"Access denied to your
#{
Gitlab
::
ImportSources
.
title
(
provider
_name
.
to_s
)
}
account."
end
def
provider_rate_limit
(
exception
)
...
...
@@ -151,29 +153,16 @@ class Import::GithubController < Import::BaseController
end
def
access_token_key
:"
#{
provider
}
_access_token"
:"
#{
provider
_name
}
_access_token"
end
def
access_params
{
github_access_token:
session
[
access_token_key
]
}
end
# The following methods are overridden in subclasses
def
provider
:github
end
def
provider_url
strong_memoize
(
:provider_url
)
do
provider
=
Gitlab
::
Auth
::
OAuth
::
Provider
.
config_for
(
'github'
)
provider
&
.
dig
(
'url'
).
presence
||
'https://github.com'
end
end
# rubocop: disable CodeReuse/ActiveRecord
def
logged_in_with_provider?
current_user
.
identities
.
exists?
(
provider:
provider
)
current_user
.
identities
.
exists?
(
provider:
provider
_name
)
end
# rubocop: enable CodeReuse/ActiveRecord
...
...
@@ -202,12 +191,6 @@ class Import::GithubController < Import::BaseController
def
filter_attribute
:name
end
def
filtered
(
collection
)
return
collection
unless
sanitized_filter_param
collection
.
select
{
|
item
|
item
[
filter_attribute
].
include?
(
sanitized_filter_param
)
}
end
end
Import
::
GithubController
.
prepend_if_ee
(
'EE::Import::GithubController'
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment