blob: b415c110730cb49561c4203ced1296c750cfbcce [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef LIBSEGMENTATION_FEATURE_MANAGEMENT_UTIL_H_
#define LIBSEGMENTATION_FEATURE_MANAGEMENT_UTIL_H_
#include <string>
#include <base/files/file_path.h>
#include <brillo/brillo_export.h>
#include "base/files/file.h"
#include <base/values.h>
#include "libsegmentation/device_info.pb.h"
#include "libsegmentation/feature_management_interface.h"
namespace segmentation {
// An implementation that invokes the corresponding functions provided
// in feature_management_interface.h.
class BRILLO_EXPORT FeatureManagementUtil {
public:
// Reads device info from |file_path|. Returns std::nullopt if the read wasn't
// successful.
static std::optional<libsegmentation::DeviceInfo> ReadDeviceInfoFromFile(
const base::FilePath& file_path);
// Writes |device_info| as base64 to |file_path|. Returns false if the write
// isn't successful.
static bool WriteDeviceInfoToFile(
const libsegmentation::DeviceInfo& device_info,
const base::FilePath& file_path);
// Converts feature level from the internal proto to the external API.
static FeatureManagementInterface::FeatureLevel ConvertProtoFeatureLevel(
libsegmentation::DeviceInfo_FeatureLevel feature_level);
// Converts scope level from the internal proto to the external API.
static FeatureManagementInterface::ScopeLevel ConvertProtoScopeLevel(
libsegmentation::DeviceInfo_ScopeLevel scope_level);
// Implement base8192 decoding used by hwid.
// Returns a string of '0' and '1' suitable for decoding.
static std::optional<std::string> DecodeHWID(const std::string& hwid);
// Return the size of a block device.
// dev format is '/dev/sda', '/dev/nvme0n1', '/dev/mmcblk0', ...
// TODO(b:176492189): Move to a common library
static std::optional<int64_t> GetDiskSpace(const base::FilePath& dev);
// Find the fixed block device on the device.
// It may not be the device the rootfs is when we run ChromeOS from a
// removable device.
// The block device will be for example /dev/sda, /dev/mmcblk1, ...
// TODO(b:176492189): Move to a common library
// root is the usual '/', unless we are unit testing. In that case.
// root points to a temporary directory set up for testing.
static std::optional<base::FilePath> GetDefaultRoot(
const base::FilePath& root);
};
} // namespace segmentation
#endif // LIBSEGMENTATION_FEATURE_MANAGEMENT_UTIL_H_