Class: ManageIQ::API::Common::Request

Inherits:
Object
  • Object
show all
Defined in:
lib/manageiq/api/common/request.rb

Constant Summary collapse

REQUEST_ID_KEY =
"x-rh-insights-request-id".freeze
IDENTITY_KEY =
'x-rh-identity'.freeze
PERSONA_KEY =
'x-rh-persona'.freeze
FORWARDABLE_HEADER_KEYS =
[REQUEST_ID_KEY, IDENTITY_KEY, PERSONA_KEY].freeze
OPTIONAL_AUTH_PATHS =
[
  %r{\A/api/v[0-9]+(\.[0-9]+)?/openapi.json\z},
  %r{\A/api/[^/]+/v[0-9]+(\.[0-9]+)?/openapi.json\z}
].freeze

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(headers:, original_url:, **_kwargs) ⇒ Request

Returns a new instance of Request.



59
60
61
62
# File 'lib/manageiq/api/common/request.rb', line 59

def initialize(headers:, original_url:, **_kwargs)
  headers = from_hash(headers) if headers.kind_of?(Hash)
  @headers, @original_url = headers, original_url
end

Instance Attribute Details

#headersObject (readonly)

Returns the value of attribute headers.



57
58
59
# File 'lib/manageiq/api/common/request.rb', line 57

def headers
  @headers
end

#original_urlObject (readonly)

Returns the value of attribute original_url.



57
58
59
# File 'lib/manageiq/api/common/request.rb', line 57

def original_url
  @original_url
end

Class Method Details

.currentObject



23
24
25
# File 'lib/manageiq/api/common/request.rb', line 23

def self.current
  Thread.current[:current_request]
end

.current!Object



27
28
29
# File 'lib/manageiq/api/common/request.rb', line 27

def self.current!
  current || raise(RequestNotSet)
end

.current=(request) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/manageiq/api/common/request.rb', line 31

def self.current=(request)
  Thread.current[:current_request] =
    case request
    when ActionDispatch::Request
      new(:headers => request.headers, :original_url => request.original_url)
    when Hash
      new(request)
    when Request, nil
      request
    else
      raise ArgumentError, 'Not a ManageIQ::API::Common::Request or ActionDispatch::Request Class, Hash, or nil'
    end
end

.current_forwardableObject



53
54
55
# File 'lib/manageiq/api/common/request.rb', line 53

def self.current_forwardable
  current!.forwardable
end

.with_request(request) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/manageiq/api/common/request.rb', line 45

def self.with_request(request)
  saved = current
  self.current = request
  yield current
ensure
  self.current = saved
end

Instance Method Details

#entitlementObject



78
79
80
# File 'lib/manageiq/api/common/request.rb', line 78

def entitlement
  @entitlement ||= Entitlement.new(identity)
end

#forwardableObject



86
87
88
89
90
# File 'lib/manageiq/api/common/request.rb', line 86

def forwardable
  FORWARDABLE_HEADER_KEYS.each_with_object({}) do |key, hash|
    hash[key] = headers[key] if headers.key?(key)
  end
end

#identityObject



68
69
70
71
72
# File 'lib/manageiq/api/common/request.rb', line 68

def identity
  @identity ||= JSON.parse(Base64.decode64(headers.fetch(IDENTITY_KEY)))
rescue KeyError
  raise IdentityError, "x-rh-identity not found"
end

#optional_auth?Boolean

Returns:

  • (Boolean)


96
97
98
99
# File 'lib/manageiq/api/common/request.rb', line 96

def optional_auth?
  uri_path = URI.parse(original_url).path
  OPTIONAL_AUTH_PATHS.any? { |optional_auth_path_regex| optional_auth_path_regex.match(uri_path) }
end

#request_idObject



64
65
66
# File 'lib/manageiq/api/common/request.rb', line 64

def request_id
  headers.fetch(REQUEST_ID_KEY, nil)
end

#required_auth?Boolean

Returns:

  • (Boolean)


92
93
94
# File 'lib/manageiq/api/common/request.rb', line 92

def required_auth?
  !optional_auth?
end

#to_hObject



82
83
84
# File 'lib/manageiq/api/common/request.rb', line 82

def to_h
  {:headers => forwardable, :original_url => original_url}
end

#userObject



74
75
76
# File 'lib/manageiq/api/common/request.rb', line 74

def user
  @user ||= User.new(identity)
end