46 lines
1 KiB
Ruby
46 lines
1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
class FeatureCategories
|
|
FEATURE_CATEGORY_DEFAULT = 'unknown'
|
|
|
|
attr_reader :categories
|
|
|
|
def self.default
|
|
@default ||= self.load_from_yaml
|
|
end
|
|
|
|
def self.load_from_yaml
|
|
categories = YAML.load_file(Rails.root.join('config', 'feature_categories.yml'))
|
|
|
|
new(categories)
|
|
end
|
|
|
|
def initialize(categories)
|
|
@categories = categories.to_set
|
|
end
|
|
|
|
# If valid, returns a feature category from the given request.
|
|
def from_request(request)
|
|
category = request.headers["HTTP_X_GITLAB_FEATURE_CATEGORY"].presence
|
|
|
|
return unless category && valid?(category)
|
|
|
|
return unless ::Gitlab::RequestForgeryProtection.verified?(request.env)
|
|
|
|
category
|
|
end
|
|
|
|
def get!(feature_category)
|
|
return feature_category if valid?(feature_category)
|
|
|
|
raise "Unknown feature category: #{feature_category}" if Gitlab.dev_or_test_env?
|
|
|
|
FEATURE_CATEGORY_DEFAULT
|
|
end
|
|
|
|
def valid?(category)
|
|
categories.include?(category.to_s)
|
|
end
|
|
end
|
|
end
|