Class: HasHelpers::ServiceTrust::Audit

Inherits:
Object
  • Object
show all
Defined in:
lib/has_helpers/service_trust/audit.rb

Class Method Summary collapse

Class Method Details

.record!(payload: {}, header: {}, outcome:, rejection_reason: nil, request: nil, expected_audience: nil, capabilities: nil, direction: "inbound") ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/has_helpers/service_trust/audit.rb', line 7

def record!(payload: {}, header: {}, outcome:, rejection_reason: nil, request: nil, expected_audience: nil, capabilities: nil, direction: "inbound")
  attributes = {
    issuer: payload["iss"] || "unknown",
    audience: payload["aud"] || expected_audience || "unknown",
    subject: payload["sub"],
    jti: payload["jti"],
    kid: header["kid"],
    outcome: outcome.to_s,
    rejection_reason: rejection_reason,
    remote_ip: request&.ip,
    user_agent: request&.user_agent,
    token_iat: epoch_time(payload["iat"]),
    token_exp: epoch_time(payload["exp"]),
    occurred_at: Time.current,
    direction: direction.to_s,
    capabilities: Capability.parse(capabilities).join(" ").presence
  }

  if HasHelpers::ServiceTrust.config.audit_async
    HasHelpers::ServiceTrust::AuditLog::WriteJob.perform_later(attributes)
  else
    HasHelpers::ServiceTrust::AuditLog.create!(attributes)
  end
rescue StandardError => e
  Rails.logger.error("ServiceTrust audit write failed: #{e.class}: #{e.message}") if defined?(Rails) && Rails.respond_to?(:logger) && Rails.logger
  nil
end