Files
gitlabhq/lib/gitlab/current/organization.rb
2025-07-24 03:20:40 +00:00

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