request_handler_for_register_browser.cc 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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_register_browser.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. RequestHandlerForRegisterBrowser::RequestHandlerForRegisterBrowser(
  19. EmbeddedPolicyTestServer* parent)
  20. : EmbeddedPolicyTestServer::RequestHandler(parent) {}
  21. RequestHandlerForRegisterBrowser::~RequestHandlerForRegisterBrowser() = default;
  22. std::string RequestHandlerForRegisterBrowser::RequestType() {
  23. return dm_protocol::kValueRequestTokenEnrollment;
  24. }
  25. std::unique_ptr<HttpResponse> RequestHandlerForRegisterBrowser::HandleRequest(
  26. const HttpRequest& request) {
  27. std::string enrollment_token;
  28. if (!GetEnrollmentTokenFromRequest(request, &enrollment_token)) {
  29. return CreateHttpResponse(net::HTTP_UNAUTHORIZED,
  30. "Missing enrollment token.");
  31. }
  32. em::DeviceManagementRequest device_management_request;
  33. device_management_request.ParseFromString(request.content);
  34. const em::RegisterBrowserRequest& register_browser_request =
  35. device_management_request.register_browser_request();
  36. // Machine name is empty on mobile.
  37. if (register_browser_request.os_platform() != "Android" &&
  38. register_browser_request.os_platform() != "iOS" &&
  39. register_browser_request.machine_name().empty()) {
  40. LOG(ERROR) << "OS platform: " << register_browser_request.os_platform();
  41. return CreateHttpResponse(net::HTTP_BAD_REQUEST,
  42. "Machine name must be non-empty on Desktop.");
  43. }
  44. if (enrollment_token == kInvalidEnrollmentToken) {
  45. return CreateHttpResponse(net::HTTP_UNAUTHORIZED,
  46. "Invalid enrollment token.");
  47. }
  48. std::string device_token = kFakeDeviceToken;
  49. em::DeviceManagementResponse device_management_response;
  50. device_management_response.mutable_register_response()
  51. ->set_device_management_token(device_token);
  52. ClientStorage::ClientInfo client_info;
  53. client_info.device_id =
  54. KeyValueFromUrl(request.GetURL(), dm_protocol::kParamDeviceID);
  55. client_info.device_token = device_token;
  56. client_info.machine_name = register_browser_request.machine_name();
  57. client_info.allowed_policy_types.insert(
  58. {dm_protocol::kChromeMachineLevelUserCloudPolicyType,
  59. dm_protocol::kChromeMachineLevelUserCloudPolicyAndroidType,
  60. dm_protocol::kChromeMachineLevelUserCloudPolicyIOSType,
  61. dm_protocol::kChromeMachineLevelExtensionCloudPolicyType,
  62. dm_protocol::kChromeUserPolicyType});
  63. client_storage()->RegisterClient(std::move(client_info));
  64. return CreateHttpResponse(net::HTTP_OK,
  65. device_management_response.SerializeAsString());
  66. }
  67. } // namespace policy