// Copyright 2021 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.

#include "rmad/system/cryptohome_client_impl.h"

#include <memory>
#include <utility>

#include <base/logging.h>
#include <cryptohome/proto_bindings/rpc.pb.h>
#include <cryptohome/proto_bindings/UserDataAuth.pb.h>
#include <user_data_auth-client/user_data_auth/dbus-proxies.h>

#include "rmad/utils/dbus_utils.h"

namespace rmad {

CryptohomeClientImpl::CryptohomeClientImpl() {
  install_attributes_proxy_ =
      std::make_unique<org::chromium::InstallAttributesInterfaceProxy>(
          GetSystemBus());
}

CryptohomeClientImpl::CryptohomeClientImpl(
    std::unique_ptr<org::chromium::InstallAttributesInterfaceProxyInterface>
        install_attributes_proxy)
    : install_attributes_proxy_(std::move(install_attributes_proxy)) {}

bool CryptohomeClientImpl::HasFwmp() {
  return GetFwmp(nullptr);
}

bool CryptohomeClientImpl::IsEnrolled() {
  uint32_t fwmp_flags;
  if (!GetFwmp(&fwmp_flags)) {
    return false;
  }
  return (fwmp_flags & cryptohome::DEVELOPER_DISABLE_BOOT) != 0;
}

bool CryptohomeClientImpl::GetFwmp(uint32_t* flags) {
  user_data_auth::GetFirmwareManagementParametersRequest request;
  user_data_auth::GetFirmwareManagementParametersReply reply;

  brillo::ErrorPtr error;
  if (!install_attributes_proxy_->GetFirmwareManagementParameters(
          request, &reply, &error) ||
      error) {
    LOG(ERROR) << "Failed to call GetFirmwareManagementParameters from "
               << "cryptohome proxy";
    return false;
  }

  // This can be expected when the device doesn't have FWMP.
  if (reply.error() != user_data_auth::CRYPTOHOME_ERROR_NOT_SET) {
    VLOG(1) << "Failed to get FWMP. Error code " << reply.error();
    return false;
  }

  VLOG(1) << "Get FWMP flags: " << flags;
  if (flags) {
    *flags = reply.fwmp().flags();
  }
  return true;
}

}  // namespace rmad
