Class: Legion::Extensions::Identity::Entra::WorkloadIdentity::Actor::TokenRefresher

Inherits:
Actors::Every
  • Object
show all
Defined in:
lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb

Constant Summary collapse

DEFAULT_REFRESH_INTERVAL =
2700

Instance Method Summary collapse

Instance Method Details

#check_subtask?Boolean

Returns:

  • (Boolean)


15
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 15

def check_subtask?  = false

#enabled?Boolean

rubocop:disable Legion/Extension/ActorEnabledSideEffects

Returns:

  • (Boolean)


24
25
26
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 24

def enabled? # rubocop:disable Legion/Extension/ActorEnabledSideEffects
  true
end

#generate_task?Boolean

Returns:

  • (Boolean)


16
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 16

def generate_task?  = false

#manualObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 28

def manual
  log.debug('WorkloadIdentity TokenRefresher tick')
  data = Legion::Extensions::Identity::Entra::Helpers::TokenManager.token_data(:workload_identity, refresh: false)

  if data && !Legion::Extensions::Identity::Entra::Helpers::TokenManager.expired?(data)
    log.debug('Workload identity token still valid')
    return
  end

  log.info('Workload identity token nearing expiry, re-acquiring via federation')
  runner = Object.new.extend(Legion::Extensions::Identity::Entra::WorkloadIdentity::Runners::Token)
  result = runner.acquire_from_environment

  body = result&.dig(:result)
  unless body&.dig(:access_token)
    log.warn('Workload identity token re-acquisition failed')
    return
  end

  Legion::Extensions::Identity::Entra::Helpers::TokenManager.save_token(
    :workload_identity,
    access_token: body[:access_token],
    expires_in:   body[:expires_in],
    scopes:       'https://graph.microsoft.com/.default'
  )
  Legion::Extensions::Identity::Entra::Client.reset!(pattern: :workload_identity)
  log.info('Workload identity token refreshed successfully')
rescue StandardError => e
  log.error("WorkloadIdentity TokenRefresher: #{e.message}")
end

#run_now?Boolean

Returns:

  • (Boolean)


17
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 17

def run_now?        = false

#runner_classObject



12
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 12

def runner_class    = self.class

#runner_functionObject



13
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 13

def runner_function = 'manual'

#timeObject



19
20
21
22
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 19

def time
  Legion::Settings.dig(:identity, :entra, :workload_identity, :token, :refresh_interval) ||
    DEFAULT_REFRESH_INTERVAL
end

#use_runner?Boolean

Returns:

  • (Boolean)


14
# File 'lib/legion/extensions/identity/entra/workload_identity/actors/token_refresher.rb', line 14

def use_runner?     = false