mirror of
https://github.com/gitlabhq/gitlabhq.git
synced 2025-07-25 17:08:32 +00:00
77 lines
2.0 KiB
Ruby
77 lines
2.0 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module Current
|
|
class Organization
|
|
attr_reader :params, :user, :headers, :session
|
|
|
|
SESSION_KEY = :organization_id
|
|
HTTP_HEADER = 'X-GitLab-Organization-ID'
|
|
|
|
def initialize(params: {}, headers: nil, session: nil, user: nil)
|
|
@params = params
|
|
@user = user
|
|
@headers = headers
|
|
@session = session
|
|
end
|
|
|
|
def organization
|
|
from_params || from_headers || from_session || from_user || fallback_organization
|
|
end
|
|
|
|
private
|
|
|
|
def from_params
|
|
from_group_params || from_organization_params
|
|
end
|
|
|
|
def from_headers
|
|
return unless headers.respond_to?(:[])
|
|
|
|
header_organization_id = headers[HTTP_HEADER]
|
|
return unless header_organization_id.to_i > 0
|
|
|
|
::Organizations::Organization.find_by_id(header_organization_id)
|
|
end
|
|
|
|
def from_session
|
|
# rubocop:disable Gitlab/FeatureFlagWithoutActor -- Cannot guarantee an actor is available here
|
|
return unless Feature.enabled?(:set_current_organization_from_session)
|
|
# rubocop:enable Gitlab/FeatureFlagWithoutActor
|
|
#
|
|
return unless session.respond_to?(:[]) && session[SESSION_KEY]
|
|
|
|
::Organizations::Organization.find_by_id(session[SESSION_KEY])
|
|
end
|
|
|
|
def from_user
|
|
return unless user
|
|
|
|
::Organizations::Organization.with_user(user).first
|
|
end
|
|
|
|
def from_group_params
|
|
path = params[:namespace_id] || params[:group_id]
|
|
path ||= params[:id] if params[:controller] == 'groups'
|
|
|
|
return if path.blank?
|
|
|
|
::Organizations::Organization.with_namespace_path(path).first
|
|
end
|
|
|
|
def from_organization_params
|
|
path = params[:organization_path]
|
|
return if path.blank?
|
|
|
|
::Organizations::Organization.find_by_path(path)
|
|
end
|
|
|
|
def fallback_organization
|
|
Gitlab::Organizations::FallbackOrganizationTracker.enable
|
|
|
|
::Organizations::Organization.default_organization
|
|
end
|
|
end
|
|
end
|
|
end
|