Module: Legion::Extensions::MicrosoftTeams::Helpers::PermissionGuard
- Includes:
- Helpers::Lex
- Included in:
- Runners::ApiIngest, Runners::ProfileIngest
- Defined in:
- lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb
Constant Summary collapse
- BACKOFF_SCHEDULE =
[60, 300, 1800, 7200, 28_800].freeze
Instance Method Summary collapse
- #denial_info(endpoint) ⇒ Object
- #guarded_request(endpoint) ⇒ Object
- #permission_denied?(endpoint) ⇒ Boolean
- #record_denial(endpoint, error_message) ⇒ Object
- #reset_denials! ⇒ Object
Instance Method Details
#denial_info(endpoint) ⇒ Object
30 31 32 |
# File 'lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb', line 30 def denial_info(endpoint) [endpoint] end |
#guarded_request(endpoint) ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb', line 38 def guarded_request(endpoint) return { skipped: true, endpoint: endpoint, reason: :permission_denied } if (endpoint) result = yield if result.is_a?(Hash) && result[:status] == 403 msg = result.dig(:result, 'error', 'message') || 'Unknown' record_denial(endpoint, msg) end result end |
#permission_denied?(endpoint) ⇒ Boolean
13 14 15 16 17 18 |
# File 'lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb', line 13 def (endpoint) denial = [endpoint] return false unless denial Time.now.utc < denial[:retry_after] end |
#record_denial(endpoint, error_message) ⇒ Object
20 21 22 23 24 25 26 27 28 |
# File 'lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb', line 20 def record_denial(endpoint, ) denial = [endpoint] || { count: 0 } denial[:count] += 1 backoff = BACKOFF_SCHEDULE.fetch(denial[:count] - 1, BACKOFF_SCHEDULE.last) denial[:retry_after] = Time.now.utc + backoff [endpoint] = denial log.warn("Graph API permission denied for #{endpoint}: #{}. " \ "Retry in #{backoff}s (attempt #{denial[:count]})") end |
#reset_denials! ⇒ Object
34 35 36 |
# File 'lib/legion/extensions/microsoft_teams/helpers/permission_guard.rb', line 34 def reset_denials! @permission_denials = {} end |