blob: d706e42761b2119f6c8cd4b5008aff0a953bd5e2 [file] [log] [blame]
// Copyright (c) 2012 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 LOGIN_MANAGER_POLICY_STORE_H_
#define LOGIN_MANAGER_POLICY_STORE_H_
#include <string>
#include <base/files/file_path.h>
#include <base/macros.h>
#include "bindings/device_management_backend.pb.h"
namespace login_manager {
class PolicyKey;
// This class holds policy settings and takes care of reading from and writing
// it to a file on disk. The policy is represented as a PolicyFetchResponse
// protobuffer, which may contain per-device or per-user policy in its payload.
//
// If there is a policy on disk at creation time, we will load it along with its
// signature. A new policy and its attendant signature can be set at any time
// and persisted to disk on-demand.
//
// THIS CLASS DOES NO SIGNATURE VALIDATION.
class PolicyStore {
public:
explicit PolicyStore(const base::FilePath& policy_path);
virtual ~PolicyStore();
virtual bool DefunctPrefsFilePresent();
// Load the signed policy off of disk into |policy_|.
// Returns true unless there is a policy on disk and loading it fails.
virtual bool LoadOrCreate();
virtual const enterprise_management::PolicyFetchResponse& Get() const;
// Persist |policy_| to disk at |policy_file_|
// Returns false if there's an error while writing data.
virtual bool Persist();
// Clobber the stored policy with new data.
virtual void Set(const enterprise_management::PolicyFetchResponse& policy);
private:
static const char kPrefsFileName[];
enterprise_management::PolicyFetchResponse policy_;
const base::FilePath policy_path_;
DISALLOW_COPY_AND_ASSIGN(PolicyStore);
};
} // namespace login_manager
#endif // LOGIN_MANAGER_POLICY_STORE_H_