#!/bin/sh

# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

set -e

# Try to find a unique source for non-official devices.  We might expand this a
# bit more based on feedback from Chromium OS derivatives.  We don't currently
# guarantee the exact format of this either.
#
# These are example SMBIOS fields available:
# bios_date bios_vendor bios_version
# board_asset_tag board_name board_serial board_vendor board_version
# chassis_asset_tag chassis_serial chassis_type chassis_vendor chassis_version
# product_name product_serial product_uuid product_version
chromiumos_serial_number() {
  local serial_number

  # Try the SMBIOS product serial if available.
  local smbios_pserial="/sys/devices/virtual/dmi/id/product_serial"
  if [ -r "${smbios_pserial}" ]; then
    serial_number="$(cat "${smbios_pserial}" 2>/dev/null)" || :
  fi

  if [ -z "${serial_number}" ]; then
    # Try the SMBIOS UUID if available.  QEMU can set this via -uuid.
    local smbios_puuid="/sys/devices/virtual/dmi/id/product_uuid"
    if [ -r "${smbios_puuid}" ]; then
      serial_number="$(cat "${smbios_puuid}" 2>/dev/null)" || :
    fi
  fi

  # If we couldn't find one, just use current timestamp as some sort of noise.
  if [ -z "${serial_number}" ]; then
    serial_number="$(date -u +%s)"
  fi

  # All non-Chrome OS devices get a "nonchrome" prefix.
  echo "nonchrome-${serial_number}"
}

# As of Chrome OS 58, we dump VPD information unconditionally, so it is always
# available on the login screen, even after OOBE (see crbug.com/216422). Note
# that the machine-info.conf upstart config file takes care of deleting the
# $MACHINE_INFO file before a user session starts.
touch "${MACHINE_INFO}"
chmod 0644 "${MACHINE_INFO}"
if crossystem "mainfw_type?nonchrome"; then
  echo "serial_number=\"$(chromiumos_serial_number)\""
else
  # Dump full information in the VPD, including the serial number.
  dump_vpd_log --full --stdout
  # Dynamic information.
  echo "customization_id=\"$(mosys platform customization)\""
  echo "rlz_brand_code=\"$(mosys platform brand)\""
fi >> "${MACHINE_INFO}"
