request_handler_for_auto_enrollment.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. // Copyright 2021 The Chromium 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. #include "components/policy/test_support/request_handler_for_auto_enrollment.h"
  5. #include "components/policy/core/common/cloud/cloud_policy_constants.h"
  6. #include "components/policy/proto/device_management_backend.pb.h"
  7. #include "components/policy/test_support/client_storage.h"
  8. #include "components/policy/test_support/policy_storage.h"
  9. #include "components/policy/test_support/test_server_helpers.h"
  10. #include "net/base/url_util.h"
  11. #include "net/http/http_status_code.h"
  12. #include "net/test/embedded_test_server/http_request.h"
  13. #include "net/test/embedded_test_server/http_response.h"
  14. using net::test_server::HttpRequest;
  15. using net::test_server::HttpResponse;
  16. namespace em = enterprise_management;
  17. namespace policy {
  18. namespace {
  19. void AddHashes(const std::vector<std::string>& hashes,
  20. em::DeviceAutoEnrollmentResponse* response) {
  21. for (const std::string& hash : hashes)
  22. *response->add_hashes() = hash;
  23. }
  24. } // namespace
  25. RequestHandlerForAutoEnrollment::RequestHandlerForAutoEnrollment(
  26. EmbeddedPolicyTestServer* parent)
  27. : EmbeddedPolicyTestServer::RequestHandler(parent) {}
  28. RequestHandlerForAutoEnrollment::~RequestHandlerForAutoEnrollment() = default;
  29. std::string RequestHandlerForAutoEnrollment::RequestType() {
  30. return dm_protocol::kValueRequestAutoEnrollment;
  31. }
  32. std::unique_ptr<HttpResponse> RequestHandlerForAutoEnrollment::HandleRequest(
  33. const HttpRequest& request) {
  34. em::DeviceManagementRequest device_management_request;
  35. device_management_request.ParseFromString(request.content);
  36. const em::DeviceAutoEnrollmentRequest& enrollment_request =
  37. device_management_request.auto_enrollment_request();
  38. em::DeviceManagementResponse device_management_response;
  39. em::DeviceAutoEnrollmentResponse* enrollment_response =
  40. device_management_response.mutable_auto_enrollment_response();
  41. switch (enrollment_request.modulus()) {
  42. case 1:
  43. if (enrollment_request.enrollment_check_type() ==
  44. enterprise_management::DeviceAutoEnrollmentRequest::
  45. ENROLLMENT_CHECK_TYPE_FRE) {
  46. AddHashes(
  47. client_storage()->GetMatchingStateKeyHashes(
  48. enrollment_request.modulus(), enrollment_request.remainder()),
  49. enrollment_response);
  50. } else if (enrollment_request.enrollment_check_type() ==
  51. enterprise_management::DeviceAutoEnrollmentRequest::
  52. ENROLLMENT_CHECK_TYPE_FORCED_ENROLLMENT) {
  53. AddHashes(
  54. policy_storage()->GetMatchingSerialHashes(
  55. enrollment_request.modulus(), enrollment_request.remainder()),
  56. enrollment_response);
  57. }
  58. break;
  59. case 32:
  60. enrollment_response->set_expected_modulus(1);
  61. break;
  62. }
  63. return CreateHttpResponse(net::HTTP_OK,
  64. device_management_response.SerializeAsString());
  65. }
  66. } // namespace policy