// 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.
#ifndef LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
#define LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
#include <map>
#include <string>
#include <base/files/file_path.h>
#include <brillo/brillo_export.h>
// Simple caching reader for the (verified) install attributes, a TPM-backed
// write once read many store. Install attributes may be written exactly once
// by a single, atomic write-and-lock operation encompassing zero or more
// attributes. Once locked, install attributes cannot be re-written unless TPM
// is reset (eg. by powerwashing the device).
class BRILLO_EXPORT InstallAttributesReader {
public:
static const char kAttrMode[];
// Constants for the possible device modes.
static const char kDeviceModeConsumer[];
static const char kDeviceModeEnterprise[];
static const char kDeviceModeEnterpriseAD[];
static const char kDeviceModeLegacyRetail[];
static const char kDeviceModeConsumerKiosk[];
InstallAttributesReader();
virtual ~InstallAttributesReader();
// Try to load install attributes (unless cached already) and return the
// attribute for |key| or an empty string in case |key| doesn't exist or in
// case install attributes couldn't (yet) be loaded. The latter is expected
// during OOBE (install attributes haven't yet been finalized) or early in the
// boot sequence (install attributes haven't yet been verified).
const std::string& GetAttribute(const std::string& key);
// Try to load install attributes (unless cached already) and return whether
// they have yet been written-and-locked.
bool IsLocked();
protected:
// Attributes cache.
std::map<std::string, std::string> attributes_;
// Path to the *verified* install attributes file on disk.
base::FilePath install_attributes_path_;
// Whether install attributes have been read successfully. Reading a file
// containing an empty attributes proto indicates consumer mode and counts as
// successful, too.
bool initialized_ = false;
private:
// Try to load the verified install attributes from disk. This is expected to
// fail when install attributes haven't yet been finalized (OOBE) or verified
// (early in the boot sequence).
void TryToLoad();
// Empty string to return on error.
std::string empty_string_;
};
#endif // LIBBRILLO_LIBINSTALLATTRIBUTES_H_