#ifndef CHROME_UPDATER_TEST_DM_POLICY_BUILDER_H_
#define CHROME_UPDATER_TEST_DM_POLICY_BUILDER_H_
#include <cstdint>
#include <memory>
#include <optional>
#include <string>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/containers/span.h"
#include "components/policy/proto/device_management_backend.pb.h"
namespace enterprise_management {
class DeviceManagementResponse;
class PolicyFetchResponse;
}
namespace wireless_android_enterprise_devicemanagement {
class OmahaSettingsClientProto;
}
namespace updater::test {
class DMSigningKey {
public:
DMSigningKey(base::span<const uint8_t> key_data,
base::span<const uint8_t> key_signature,
int key_version,
const std::string& domain);
~DMSigningKey();
std::string GetPublicKeyString() const;
std::string GetPublicKeySignature() const { return key_signature_; }
std::string GetPublicKeySignatureDomain() const {
return key_signature_domain_;
}
bool has_key_version() const { return key_version_ >= 0; }
int key_version() const { return key_version_; }
void SignData(const std::string& data, std::string* signature) const;
private:
std::vector<uint8_t> key_data_;
std::string key_signature_;
int key_version_;
std::string key_signature_domain_;
};
std::unique_ptr<DMSigningKey> GetTestKey1();
std::unique_ptr<DMSigningKey> GetTestKey2();
class DMPolicyBuilder {
public:
enum class SigningOption {
kSignNormally = 0,
kTamperKeySignature = 1,
kTamperDataSignature = 2,
};
DMPolicyBuilder(const std::string& dm_token,
const std::string& user_name,
const std::string& device_id,
std::unique_ptr<DMSigningKey> signing_key,
std::unique_ptr<DMSigningKey> new_signing_key,
SigningOption signing_option);
~DMPolicyBuilder();
static std::unique_ptr<DMPolicyBuilder> CreateInstanceWithOptions(
bool first_request,
bool rotate_to_new_key,
SigningOption signing_option,
const std::string& dm_token,
const std::string& device_id);
void SetNewSigningKeyToDefault();
void FillPolicyFetchResponseWithPayload(
enterprise_management::PolicyFetchResponse* policy_response,
const std::string& policy_type,
const std::string& policy_payload,
bool attach_new_public_key) const;
std::string GetResponseBlobForPolicyPayload(
const std::string& policy_type,
const std::string& policy_payload) const;
std::unique_ptr<::enterprise_management::DeviceManagementResponse>
BuildDMResponseForPolicies(
const base::flat_map<std::string, std::string>& policies) const;
std::unique_ptr<::enterprise_management::DeviceManagementResponse>
BuildDMResponseWithError(
::enterprise_management::DeviceManagementErrorDetail error) const;
private:
const std::string dm_token_;
const std::string user_name_;
const std::string device_id_;
SigningOption signing_option_;
std::unique_ptr<DMSigningKey> signing_key_;
std::unique_ptr<DMSigningKey> new_signing_key_;
};
std::unique_ptr<
::wireless_android_enterprise_devicemanagement::OmahaSettingsClientProto>
GetDefaultTestingOmahaPolicyProto();
std::unique_ptr<::enterprise_management::DeviceManagementResponse>
GetDMResponseForOmahaPolicy(
bool first_request,
bool rotate_to_new_key,
DMPolicyBuilder::SigningOption signing_option,
const std::string& dm_token,
const std::string& device_id,
const ::wireless_android_enterprise_devicemanagement::
OmahaSettingsClientProto& omaha_settings);
std::unique_ptr<::enterprise_management::DeviceManagementResponse>
GetDefaultTestingPolicyFetchDMResponse(
bool first_request,
bool rotate_to_new_key,
DMPolicyBuilder::SigningOption signing_option);
}
#endif