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: ["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
|