request_handler_for_register_cert_based.cc 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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_cert_based.h"
  5. #include <set>
  6. #include <string>
  7. #include "base/guid.h"
  8. #include "base/notreached.h"
  9. #include "base/strings/stringprintf.h"
  10. #include "components/policy/core/common/cloud/cloud_policy_constants.h"
  11. #include "components/policy/proto/device_management_backend.pb.h"
  12. #include "components/policy/test_support/client_storage.h"
  13. #include "components/policy/test_support/policy_storage.h"
  14. #include "components/policy/test_support/request_handler_for_register_device_and_user.h"
  15. #include "components/policy/test_support/test_server_helpers.h"
  16. #include "net/http/http_status_code.h"
  17. #include "net/test/embedded_test_server/http_request.h"
  18. #include "net/test/embedded_test_server/http_response.h"
  19. using net::test_server::HttpRequest;
  20. using net::test_server::HttpResponse;
  21. namespace em = enterprise_management;
  22. namespace policy {
  23. RequestHandlerForRegisterCertBased::RequestHandlerForRegisterCertBased(
  24. EmbeddedPolicyTestServer* parent)
  25. : RequestHandlerForRegisterDeviceAndUser(parent) {}
  26. RequestHandlerForRegisterCertBased::~RequestHandlerForRegisterCertBased() =
  27. default;
  28. std::string RequestHandlerForRegisterCertBased::RequestType() {
  29. return dm_protocol::kValueRequestCertBasedRegister;
  30. }
  31. std::unique_ptr<HttpResponse> RequestHandlerForRegisterCertBased::HandleRequest(
  32. const HttpRequest& request) {
  33. em::DeviceManagementRequest device_management_request;
  34. device_management_request.ParseFromString(request.content);
  35. const em::SignedData& signed_req =
  36. device_management_request.certificate_based_register_request()
  37. .signed_request();
  38. em::CertificateBasedDeviceRegistrationData parsed_req;
  39. std::string data = signed_req.data().substr(
  40. 0, signed_req.data().size() - signed_req.extra_data_bytes());
  41. if (!parsed_req.ParseFromString(data))
  42. return CreateHttpResponse(net::HTTP_BAD_REQUEST, "Invalid request");
  43. if (parsed_req.certificate_type() !=
  44. em::CertificateBasedDeviceRegistrationData::
  45. ENTERPRISE_ENROLLMENT_CERTIFICATE) {
  46. return CreateHttpResponse(net::HTTP_FORBIDDEN,
  47. "Invalid certificate type for registration");
  48. }
  49. const em::DeviceRegisterRequest& register_request =
  50. parsed_req.device_register_request();
  51. return RegisterDeviceAndSendResponse(request, register_request, "");
  52. }
  53. } // namespace policy