Class: ForestAdminAgent::Auth::AuthManager

Inherits:
Object
  • Object
show all
Defined in:
lib/forest_admin_agent/auth/auth_manager.rb,
sig/forest_admin_agent/auth/auth_manager.rbs

Instance Method Summary collapse

Constructor Details

#initializeAuthManager

Returns a new instance of AuthManager.



7
8
9
# File 'lib/forest_admin_agent/auth/auth_manager.rb', line 7

def initialize
  @oidc = ForestAdminAgent::Auth::OidcClientManager.new
end

Instance Method Details

#get_rendering_id_from_state(state) ⇒ Object

Parameters:

  • state (Object)

Returns:

  • (Object)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/forest_admin_agent/auth/auth_manager.rb', line 40

def get_rendering_id_from_state(state)
  state = JSON.parse(state.tr("'", '"').gsub('=>', ':'))
  unless state.key? 'renderingId'
    raise ForestAdminAgent::Http::Exceptions::BadRequestError.new(
      ForestAdminAgent::Utils::ErrorMessages::INVALID_STATE_RENDERING_ID,
      details: { state: state }
    )
  end

  begin
    Integer(state['renderingId'])
  rescue ArgumentError
    raise ForestAdminAgent::Http::Exceptions::ValidationError.new(
      ForestAdminAgent::Utils::ErrorMessages::INVALID_RENDERING_ID,
      details: { renderingId: state['renderingId'] }
    )
  end

  state['renderingId'].to_i
end

#start(rendering_id) ⇒ Object

Parameters:

  • rendering_id (Object)

Returns:

  • (Object)


11
12
13
14
# File 'lib/forest_admin_agent/auth/auth_manager.rb', line 11

def start(rendering_id)
  client = @oidc.make_forest_provider rendering_id
  client.authorization_uri({ state: JSON.generate({ renderingId: rendering_id }) })
end

#verify_code_and_generate_token(params) ⇒ Object

Parameters:

  • params (Object)

Returns:

  • (Object)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/forest_admin_agent/auth/auth_manager.rb', line 16

def verify_code_and_generate_token(params)
  unless params['state']
    raise ForestAdminAgent::Http::Exceptions::BadRequestError,
          ForestAdminAgent::Utils::ErrorMessages::INVALID_STATE_MISSING
  end

  if Facades::Container.cache(:debug)
    OpenIDConnect.http_config do |options|
      options.ssl.verify = false
    end
  end

  rendering_id = get_rendering_id_from_state(params['state'])

  forest_provider = @oidc.make_forest_provider rendering_id
  forest_provider.authorization_code = params['code']
  access_token = forest_provider.access_token! 'none'
  resource_owner = forest_provider.get_resource_owner access_token

  resource_owner.make_jwt
end