lib/off_broadway/defender365/incident.ex

defmodule OffBroadway.Defender365.Incident do
  @moduledoc """
  This module contains `ExConstructor` modules for the various entities contained
  within an incident.
  """
  defmodule Metadata do
    @moduledoc false
    @derive Jason.Encoder
    defstruct [
      :assigned_to,
      :classification,
      :comments,
      :created_time,
      :detection_source,
      :determination,
      :incident_id,
      :incident_name,
      :last_update_time,
      :redirect_incident_id,
      :severity,
      :status,
      :tags,
      :tenant_id
    ]

    use ExConstructor
  end

  defmodule Comment do
    @moduledoc false
    @derive Jason.Encoder
    defstruct [:comment, :created_by, :created_time]
    use ExConstructor
  end

  defmodule Alert do
    @moduledoc false
    @derive Jason.Encoder
    defstruct [
      :actor_name,
      :alert_id,
      :assigned_to,
      :category,
      :classification,
      :creation_time,
      :description,
      :determination,
      :devices,
      :entities,
      :first_activity,
      :incident_id,
      :investigation_state,
      :last_update_time,
      :mitre_techniques,
      :resolved_time,
      :service_source,
      :severity,
      :status,
      :threat_family_name,
      :title
    ]

    use ExConstructor
  end

  defmodule Device do
    @moduledoc false
    @derive Jason.Encoder
    defstruct [
      :aa_device_id,
      :device_dns_name,
      :device_id,
      :first_seen,
      :health_status,
      :os_build,
      :os_platform,
      :rbac_group_name,
      :risk_score
    ]

    use ExConstructor
  end

  defmodule Entity do
    @moduledoc false
    @derive Jason.Encoder
    defstruct [
      :aa_user_id,
      :account_name,
      :cluster_by,
      :delivery_action,
      :device_id,
      :domain_name,
      :entity_type,
      :file_name,
      :file_path,
      :ip_address,
      :mailbox_address,
      :mailbox_display_name,
      :parent_process_creation_time,
      :parent_process_id,
      :process_command_line,
      :process_creation_time,
      :process_id,
      :recipient,
      :registry_hive,
      :registry_key,
      :registry_value,
      :registry_value_type,
      :security_group_id,
      :security_group_name,
      :sender,
      :sha1,
      :sha256,
      :subject,
      :url,
      :user_principal_name,
      :user_sid
    ]

    use ExConstructor
  end
end