// Copyright (c) 2011 The Chromium 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 CHROME_BROWSER_POLICY_DEVICE_POLICY_IDENTITY_STRATEGY_H_
#define CHROME_BROWSER_POLICY_DEVICE_POLICY_IDENTITY_STRATEGY_H_
#pragma once
#include <string>
#include "base/compiler_specific.h"
#include "chrome/browser/policy/cloud_policy_identity_strategy.h"
class TokenService;
namespace policy {
// DM token provider that stores the token in CrOS signed settings.
class DevicePolicyIdentityStrategy : public CloudPolicyIdentityStrategy {
public:
DevicePolicyIdentityStrategy();
virtual ~DevicePolicyIdentityStrategy();
// Sets (GAIA) auth credentials of the owner of the device during device
// enrollment. This automatically triggers fetching a DMToken that can
// be used for future authentication with DMServer.
void SetAuthCredentials(const std::string& username,
const std::string& auth_token);
// Sets the device's credentials when they have been read from disk after
// a reboot.
void SetDeviceManagementCredentials(const std::string& owner_email,
const std::string& device_id,
const std::string& device_token);
// Initiates a policy fetch after a successful device registration. This
// function should be called only after the device token has been fetched
// either through the DMServer or loaded from the cache.
void FetchPolicy();
// CloudPolicyIdentityStrategy implementation:
virtual std::string GetDeviceToken() OVERRIDE;
virtual std::string GetDeviceID() OVERRIDE;
virtual std::string GetMachineID() OVERRIDE;
virtual std::string GetMachineModel() OVERRIDE;
virtual em::DeviceRegisterRequest_Type GetPolicyRegisterType() OVERRIDE;
virtual std::string GetPolicyType() OVERRIDE;
virtual bool GetCredentials(std::string* username,
std::string* auth_token) OVERRIDE;
virtual void OnDeviceTokenAvailable(const std::string& token) OVERRIDE;
private:
// The e-mail and auth token of the device owner. Set by |SetCredentials()|.
std::string username_;
std::string auth_token_;
// The machine identifier and model.
std::string machine_id_;
std::string machine_model_;
// The device identifier to be sent with requests. (This is actually more like
// a session identifier since it is re-generated for each registration
// request.)
std::string device_id_;
// Current token. Empty if not available.
std::string device_token_;
DISALLOW_COPY_AND_ASSIGN(DevicePolicyIdentityStrategy);
};
} // namespace policy
#endif // CHROME_BROWSER_POLICY_DEVICE_POLICY_IDENTITY_STRATEGY_H_