diff options
Diffstat (limited to 'lib/api/internals/pages.rb')
-rw-r--r-- | lib/api/internals/pages.rb | 67 |
1 files changed, 15 insertions, 52 deletions
diff --git a/lib/api/internals/pages.rb b/lib/api/internals/pages.rb index a8631827b3d..1f0d5a99d83 100644 --- a/lib/api/internals/pages.rb +++ b/lib/api/internals/pages.rb @@ -3,15 +3,21 @@ module API module Internals class Pages < Grape::API + before { authenticate_by_gitlab_pages_token! } + namespace 'internals' do params do requires :host, type: String, desc: 'The Pages host' end get 'pages/query' do - if namespace_name = find_namespace_name(params[:host]) - namespace_domain(namespace_name, params[:host].downcase) - elsif domain = find_user_domain(params[:host]) - user_domain(domain) + if namespace = find_namespace(params[:host]) + render namespace, + using: API::Entities::Pages::NamespaceDomain, + prefix: namespace.full_path + elsif domain = find_pages_domain(params[:host]) + render domain, + using: API::Entities::Pages::PagesDomain, + prefix: domain.project.full_path else status :not_found end @@ -19,62 +25,19 @@ module API end helpers do - def namespace_domain(namespace_name, host) - lookup_paths = [] - - if namespace = Namespace.find_by_full_path(namespace_name) - namespace.all_projects.with_pages.each do |project| - prefix = project.full_path.delete_prefix(namespace.full_path) - lookup_paths << project_params(project, prefix) - end - - lookup_paths << namespace_project_params(namespace, host, "") - end - - status :ok - - { lookup_paths: lookup_paths.compact } - end - - def user_domain(domain) - lookup_paths = [] - lookup_paths << project_params(domain.project, "") - - status :ok - - { - certificate: domain.certificate, - key: domain.certificate_key, - lookup_paths: lookup_paths.compact - } - end - def find_namespace_name(host) host = host.downcase gitlab_host = "." + ::Settings.pages.host.downcase host.delete_suffix(gitlab_host) if host.ends_with?(gitlab_host) end - def find_user_domain(host) - PagesDomain.find_by(domain: host.downcase) - end - - def namespace_project_params(namespace, project_name, prefix) - project = namespace.projects.with_pages.find_by(path: project_name) - project_params(project, prefix) + def find_namespace(host) + namespace_name = find_namespace_name(host) + Namespace.find_by_full_path(namespace_name) if namespace_name end - def project_params(project, prefix) - return unless project - return unless project.pages_deployed? - - { - https_only: project.pages_https_only?, - project_id: project.project_id, - access_control: !project.public_pages?, - prefix: "#{prefix}/", - path: "#{project.public_pages_path}/" - } + def find_pages_domain(host) + PagesDomain.find_by(domain: host.downcase) end end end |