Current section

Files

Jump to
guard lib guard plug audit_logger.ex
Raw

lib/guard/plug/audit_logger.ex

defmodule Guard.Plug.AuditLogger do
@moduledoc """
Attached metadata to Logger for audit logging
"""
require Logger
alias Guard.Authenticator
@behaviour Plug
def init(opts) do
Keyword.get(opts, :log, :info)
end
def call(conn, _level) do
remote_ip = case Plug.Conn.get_req_header(conn, "x-forwarded-for") do
[forwarded|_rest] -> forwarded
_ -> Enum.join(Tuple.to_list(conn.remote_ip), ".")
end
Logger.metadata(remote_ip: remote_ip)
case Authenticator.current_claims(conn) do
{ :ok, _claims } ->
user = Guardian.Plug.current_resource(conn)
if user do
Logger.metadata(user_id: user.id)
else
Logger.metadata(user_id: "no_user")
end
conn
_ ->
conn
end
end
end