| // 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_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_ |