• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2016 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
6 #define LIBBRILLO_INSTALL_ATTRIBUTES_LIBINSTALLATTRIBUTES_H_
7 
8 #include <map>
9 #include <string>
10 
11 #include <base/files/file_path.h>
12 #include <brillo/brillo_export.h>
13 
14 // Simple caching reader for the (verified) install attributes, a TPM-backed
15 // write once read many store.  Install attributes may be written exactly once
16 // by a single, atomic write-and-lock operation encompassing zero or more
17 // attributes.  Once locked, install attributes cannot be re-written unless TPM
18 // is reset (eg. by powerwashing the device).
19 class BRILLO_EXPORT InstallAttributesReader {
20  public:
21   static const char kAttrMode[];
22 
23   // Constants for the possible device modes.
24   static const char kDeviceModeConsumer[];
25   static const char kDeviceModeEnterprise[];
26   static const char kDeviceModeEnterpriseAD[];
27   static const char kDeviceModeLegacyRetail[];
28   static const char kDeviceModeConsumerKiosk[];
29 
30   InstallAttributesReader();
31   virtual ~InstallAttributesReader();
32 
33   // Try to load install attributes (unless cached already) and return the
34   // attribute for |key| or an empty string in case |key| doesn't exist or in
35   // case install attributes couldn't (yet) be loaded.  The latter is expected
36   // during OOBE (install attributes haven't yet been finalized) or early in the
37   // boot sequence (install attributes haven't yet been verified).
38   const std::string& GetAttribute(const std::string& key);
39 
40   // Try to load install attributes (unless cached already) and return whether
41   // they have yet been written-and-locked.
42   bool IsLocked();
43 
44  protected:
45   // Attributes cache.
46   std::map<std::string, std::string> attributes_;
47 
48   // Path to the *verified* install attributes file on disk.
49   base::FilePath install_attributes_path_;
50 
51   // Whether install attributes have been read successfully.  Reading a file
52   // containing an empty attributes proto indicates consumer mode and counts as
53   // successful, too.
54   bool initialized_ = false;
55 
56 private:
57   // Try to load the verified install attributes from disk.  This is expected to
58   // fail when install attributes haven't yet been finalized (OOBE) or verified
59   // (early in the boot sequence).
60   void TryToLoad();
61 
62   // Empty string to return on error.
63   std::string empty_string_;
64 };
65 
66 #endif  // LIBBRILLO_LIBINSTALLATTRIBUTES_H_
67