def HandleRequest(self):
        """Handles a request.

    Parses the data supplied at construction time and returns a pair indicating
    http status code and response data to be sent back to the client.

    Returns:
      A tuple of HTTP status code and response data to send to the client.
    """
        rmsg = dm.DeviceManagementRequest()
        rmsg.ParseFromString(self._request)

        logging.debug('auth -> ' +
                      self._headers.getheader('Authorization', ''))
        logging.debug('deviceid -> ' + self.GetUniqueParam('deviceid'))
        self.DumpMessage('Request', rmsg)

        request_type = self.GetUniqueParam('request')
        # Check server side requirements, as defined in
        # device_management_backend.proto.
        if (self.GetUniqueParam('devicetype') != '2'
                or self.GetUniqueParam('apptype') != 'Chrome'
                or (request_type != 'ping'
                    and len(self.GetUniqueParam('deviceid')) >= 64)
                or len(self.GetUniqueParam('agent')) >= 64):
            return (400, 'Invalid request parameter')
        if request_type == 'register':
            return self.ProcessRegister(rmsg.register_request)
        elif request_type == 'unregister':
            return self.ProcessUnregister(rmsg.unregister_request)
        elif request_type == 'policy' or request_type == 'ping':
            return self.ProcessPolicy(rmsg.policy_request, request_type)
        else:
            return (400, 'Invalid request parameter')
Beispiel #2
0
 def _PostRegisterRequest(self, type):
   """Sends a device register request to the TestServer, of the given type."""
   assert self.IsChromeOS()
   request = dmb.DeviceManagementRequest()
   register = request.register_request
   register.machine_id = '789'
   register.type = type
   return self._PostToDMServer('register', request.SerializeToString(), {})
Beispiel #3
0
 def _DMRegisterDevice(self):
     """Registers with the mock DMServer and returns the DMToken."""
     assert self.IsChromeOS()
     dm_request = dm.DeviceManagementRequest()
     request = dm_request.register_request
     request.type = dm.DeviceRegisterRequest.DEVICE
     request.machine_id = self.machine_id
     dm_response = self._DMPostRequest('register', dm_request, {})
     return dm_response.register_response.device_management_token
Beispiel #4
0
 def _DMFetchPolicy(self, dm_token):
     """Fetches device policy from the mock DMServer."""
     assert self.IsChromeOS()
     dm_request = dm.DeviceManagementRequest()
     policy_request = dm_request.policy_request
     request = policy_request.request.add()
     request.policy_type = 'google/chromeos/device'
     request.signature_type = dm.PolicyFetchRequest.SHA1_RSA
     headers = {'Authorization': 'GoogleDMToken token=' + dm_token}
     dm_response = self._DMPostRequest('policy', dm_request, headers)
     response = dm_response.policy_response.response[0]
     assert response.policy_data
     assert response.policy_data_signature
     assert response.new_public_key
     return response
    def HandleRequest(self):
        """Handles a request.

    Parses the data supplied at construction time and returns a pair indicating
    http status code and response data to be sent back to the client.

    Returns:
      A tuple of HTTP status code and response data to send to the client.
    """
        rmsg = dm.DeviceManagementRequest()
        length = int(self.headers.getheader('content-length'))
        rmsg.ParseFromString(self.rfile.read(length))

        logging.debug('gaia auth token -> ' +
                      self.headers.getheader('Authorization', ''))
        logging.debug('oauth token -> ' +
                      str(self.GetUniqueParam('oauth_token')))
        logging.debug('deviceid -> ' + str(self.GetUniqueParam('deviceid')))
        self.DumpMessage('Request', rmsg)

        request_type = self.GetUniqueParam('request')
        # Check server side requirements, as defined in
        # device_management_backend.proto.
        if (self.GetUniqueParam('devicetype') != '2'
                or self.GetUniqueParam('apptype') != 'Chrome'
                or (request_type != 'ping'
                    and len(self.GetUniqueParam('deviceid')) >= 64)
                or len(self.GetUniqueParam('agent')) >= 64):
            return (400, 'Invalid request parameter')
        if request_type == 'register':
            response = self.ProcessRegister(rmsg.register_request)
        elif request_type == 'api_authorization':
            response = self.ProcessApiAuthorization(
                rmsg.service_api_access_request)
        elif request_type == 'unregister':
            response = self.ProcessUnregister(rmsg.unregister_request)
        elif request_type == 'policy' or request_type == 'ping':
            response = self.ProcessPolicy(rmsg, request_type)
        elif request_type == 'enterprise_check':
            response = self.ProcessAutoEnrollment(rmsg.auto_enrollment_request)
        elif request_type == 'device_state_retrieval':
            response = self.ProcessDeviceStateRetrievalRequest(
                rmsg.device_state_retrieval_request)
        else:
            return (400, 'Invalid request parameter')

        self.DumpMessage('Response', response[1])
        return (response[0], response[1].SerializeToString())
Beispiel #6
0
  def _PostPolicyRequest(self, token, type, want_signature=False):
    """Fetches policy from the TestServer, using the given token.

    Policy is fetched for the given type. If want_signature is True, the
    request will ask for a signed response. Returns the response body.
    """
    assert self.IsChromeOS()
    request = dmb.DeviceManagementRequest()
    policy = request.policy_request
    prequest = policy.request.add()
    prequest.policy_type = type
    if want_signature:
      prequest.signature_type = dmb.PolicyFetchRequest.SHA1_RSA
    headers = {
      'Authorization': 'GoogleDMToken token=' + token,
    }
    return self._PostToDMServer('policy', request.SerializeToString(), headers)
    def HandleRequest(self):
        """Handles a request.

    Parses the data supplied at construction time and returns a pair indicating
    http status code and response data to be sent back to the client.

    Returns:
      A tuple of HTTP status code and response data to send to the client.
    """
        rmsg = dm.DeviceManagementRequest()
        rmsg.ParseFromString(self._request)

        self.DumpMessage('Request', rmsg)

        request_type = self.GetUniqueParam('request')
        if request_type == 'register':
            return self.ProcessRegister(rmsg.register_request)
        elif request_type == 'unregister':
            return self.ProcessUnregister(rmsg.unregister_request)
        elif request_type == 'policy':
            return self.ProcessPolicy(rmsg.policy_request)
        else:
            return (400, 'Invalid request parameter')