| OLD | NEW |
| 1 #!/usr/bin/python2.5 | 1 #!/usr/bin/python2.5 |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """A bare-bones test server for testing cloud policy support. | 6 """A bare-bones test server for testing cloud policy support. |
| 7 | 7 |
| 8 This implements a simple cloud policy test server that can be used to test | 8 This implements a simple cloud policy test server that can be used to test |
| 9 chrome's device management service client. The policy information is read from | 9 chrome's device management service client. The policy information is read from |
| 10 the file named device_management in the server's data directory. It contains | 10 the file named device_management in the server's data directory. It contains |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 device_id = self.GetUniqueParam('deviceid') | 170 device_id = self.GetUniqueParam('deviceid') |
| 171 if not device_id: | 171 if not device_id: |
| 172 return (400, 'Missing device identifier') | 172 return (400, 'Missing device identifier') |
| 173 | 173 |
| 174 token_info = self._server.RegisterDevice(device_id, | 174 token_info = self._server.RegisterDevice(device_id, |
| 175 msg.machine_id, | 175 msg.machine_id, |
| 176 msg.type) | 176 msg.type) |
| 177 | 177 |
| 178 # Send back the reply. | 178 # Send back the reply. |
| 179 response = dm.DeviceManagementResponse() | 179 response = dm.DeviceManagementResponse() |
| 180 response.error = dm.DeviceManagementResponse.SUCCESS | |
| 181 response.register_response.device_management_token = ( | 180 response.register_response.device_management_token = ( |
| 182 token_info['device_token']) | 181 token_info['device_token']) |
| 183 response.register_response.machine_name = token_info['machine_name'] | 182 response.register_response.machine_name = token_info['machine_name'] |
| 184 | 183 |
| 185 self.DumpMessage('Response', response) | 184 self.DumpMessage('Response', response) |
| 186 | 185 |
| 187 return (200, response.SerializeToString()) | 186 return (200, response.SerializeToString()) |
| 188 | 187 |
| 189 def ProcessUnregister(self, msg): | 188 def ProcessUnregister(self, msg): |
| 190 """Handles a register request. | 189 """Handles a register request. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 201 # Check the management token. | 200 # Check the management token. |
| 202 token, response = self.CheckToken(); | 201 token, response = self.CheckToken(); |
| 203 if not token: | 202 if not token: |
| 204 return response | 203 return response |
| 205 | 204 |
| 206 # Unregister the device. | 205 # Unregister the device. |
| 207 self._server.UnregisterDevice(token); | 206 self._server.UnregisterDevice(token); |
| 208 | 207 |
| 209 # Prepare and send the response. | 208 # Prepare and send the response. |
| 210 response = dm.DeviceManagementResponse() | 209 response = dm.DeviceManagementResponse() |
| 211 response.error = dm.DeviceManagementResponse.SUCCESS | |
| 212 response.unregister_response.CopyFrom(dm.DeviceUnregisterResponse()) | 210 response.unregister_response.CopyFrom(dm.DeviceUnregisterResponse()) |
| 213 | 211 |
| 214 self.DumpMessage('Response', response) | 212 self.DumpMessage('Response', response) |
| 215 | 213 |
| 216 return (200, response.SerializeToString()) | 214 return (200, response.SerializeToString()) |
| 217 | 215 |
| 218 def ProcessInitialPolicy(self, msg): | 216 def ProcessInitialPolicy(self, msg): |
| 219 """Handles a 'preregister policy' request. | 217 """Handles a 'preregister policy' request. |
| 220 | 218 |
| 221 Queries the list of managed users and responds the client if their user | 219 Queries the list of managed users and responds the client if their user |
| (...skipping 18 matching lines...) Expand all Loading... |
| 240 else: | 238 else: |
| 241 chrome_initial_settings.enrollment_provision = ( | 239 chrome_initial_settings.enrollment_provision = ( |
| 242 dm.ChromeInitialSettingsProto.UNMANAGED); | 240 dm.ChromeInitialSettingsProto.UNMANAGED); |
| 243 | 241 |
| 244 policy_data = dm.PolicyData() | 242 policy_data = dm.PolicyData() |
| 245 policy_data.policy_type = msg.policy_type | 243 policy_data.policy_type = msg.policy_type |
| 246 policy_data.policy_value = chrome_initial_settings.SerializeToString() | 244 policy_data.policy_value = chrome_initial_settings.SerializeToString() |
| 247 | 245 |
| 248 # Prepare and send the response. | 246 # Prepare and send the response. |
| 249 response = dm.DeviceManagementResponse() | 247 response = dm.DeviceManagementResponse() |
| 250 response.error = dm.DeviceManagementResponse.SUCCESS | |
| 251 fetch_response = response.policy_response.response.add() | 248 fetch_response = response.policy_response.response.add() |
| 252 fetch_response.policy_data = ( | 249 fetch_response.policy_data = ( |
| 253 policy_data.SerializeToString()) | 250 policy_data.SerializeToString()) |
| 254 | 251 |
| 255 self.DumpMessage('Response', response) | 252 self.DumpMessage('Response', response) |
| 256 | 253 |
| 257 return (200, response.SerializeToString()) | 254 return (200, response.SerializeToString()) |
| 258 | 255 |
| 259 def ProcessDevicePolicy(self, msg): | 256 def ProcessDevicePolicy(self, msg): |
| 260 """Handles a policy request that uses the deprecated protcol. | 257 """Handles a policy request that uses the deprecated protcol. |
| 261 TODO(gfeher): Remove this when we certainly don't need it. | 258 TODO(gfeher): Remove this when we certainly don't need it. |
| 262 | 259 |
| 263 Checks for authorization, encodes the policy into protobuf representation | 260 Checks for authorization, encodes the policy into protobuf representation |
| 264 and constructs the response. | 261 and constructs the response. |
| 265 | 262 |
| 266 Args: | 263 Args: |
| 267 msg: The DevicePolicyRequest message received from the client. | 264 msg: The DevicePolicyRequest message received from the client. |
| 268 | 265 |
| 269 Returns: | 266 Returns: |
| 270 A tuple of HTTP status code and response data to send to the client. | 267 A tuple of HTTP status code and response data to send to the client. |
| 271 """ | 268 """ |
| 272 | 269 |
| 273 # Check the management token. | 270 # Check the management token. |
| 274 token, response = self.CheckToken() | 271 token, response = self.CheckToken() |
| 275 if not token: | 272 if not token: |
| 276 return response | 273 return response |
| 277 | 274 |
| 278 # Stuff the policy dictionary into a response message and send it back. | 275 # Stuff the policy dictionary into a response message and send it back. |
| 279 response = dm.DeviceManagementResponse() | 276 response = dm.DeviceManagementResponse() |
| 280 response.error = dm.DeviceManagementResponse.SUCCESS | |
| 281 response.policy_response.CopyFrom(dm.DevicePolicyResponse()) | 277 response.policy_response.CopyFrom(dm.DevicePolicyResponse()) |
| 282 | 278 |
| 283 # Respond only if the client requested policy for the cros/device scope, | 279 # Respond only if the client requested policy for the cros/device scope, |
| 284 # since that's where chrome policy is supposed to live in. | 280 # since that's where chrome policy is supposed to live in. |
| 285 if msg.policy_scope == 'chromeos/device': | 281 if msg.policy_scope == 'chromeos/device': |
| 286 policy = self._server.policy['google/chromeos/user']['mandatory'] | 282 policy = self._server.policy['google/chromeos/user']['mandatory'] |
| 287 setting = response.policy_response.setting.add() | 283 setting = response.policy_response.setting.add() |
| 288 setting.policy_key = 'chrome-policy' | 284 setting.policy_key = 'chrome-policy' |
| 289 policy_value = dm.GenericSetting() | 285 policy_value = dm.GenericSetting() |
| 290 for (key, value) in policy.iteritems(): | 286 for (key, value) in policy.iteritems(): |
| (...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 482 policy_data.request_token = token_info['device_token']; | 478 policy_data.request_token = token_info['device_token']; |
| 483 policy_data.policy_value = policy_value | 479 policy_data.policy_value = policy_value |
| 484 policy_data.machine_name = token_info['machine_name'] | 480 policy_data.machine_name = token_info['machine_name'] |
| 485 if signing_key: | 481 if signing_key: |
| 486 policy_data.public_key_version = key_version | 482 policy_data.public_key_version = key_version |
| 487 policy_data.username = self._server.username | 483 policy_data.username = self._server.username |
| 488 policy_data.device_id = token_info['device_id'] | 484 policy_data.device_id = token_info['device_id'] |
| 489 signed_data = policy_data.SerializeToString() | 485 signed_data = policy_data.SerializeToString() |
| 490 | 486 |
| 491 response = dm.DeviceManagementResponse() | 487 response = dm.DeviceManagementResponse() |
| 492 response.error = dm.DeviceManagementResponse.SUCCESS | |
| 493 fetch_response = response.policy_response.response.add() | 488 fetch_response = response.policy_response.response.add() |
| 494 fetch_response.policy_data = signed_data | 489 fetch_response.policy_data = signed_data |
| 495 if signing_key: | 490 if signing_key: |
| 496 fetch_response.policy_data_signature = ( | 491 fetch_response.policy_data_signature = ( |
| 497 signing_key['private_key'].hashAndSign(signed_data).tostring()) | 492 signing_key['private_key'].hashAndSign(signed_data).tostring()) |
| 498 if msg.public_key_version != key_version: | 493 if msg.public_key_version != key_version: |
| 499 fetch_response.new_public_key = signing_key['public_key'] | 494 fetch_response.new_public_key = signing_key['public_key'] |
| 500 if req_key: | 495 if req_key: |
| 501 fetch_response.new_public_key_signature = ( | 496 fetch_response.new_public_key_signature = ( |
| 502 req_key.hashAndSign(fetch_response.new_public_key).tostring()) | 497 req_key.hashAndSign(fetch_response.new_public_key).tostring()) |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 655 return self._registered_tokens.get(dmtoken, None) | 650 return self._registered_tokens.get(dmtoken, None) |
| 656 | 651 |
| 657 def UnregisterDevice(self, dmtoken): | 652 def UnregisterDevice(self, dmtoken): |
| 658 """Unregisters a device identified by the given DM token. | 653 """Unregisters a device identified by the given DM token. |
| 659 | 654 |
| 660 Args: | 655 Args: |
| 661 dmtoken: The device management token provided by the client. | 656 dmtoken: The device management token provided by the client. |
| 662 """ | 657 """ |
| 663 if dmtoken in self._registered_tokens.keys(): | 658 if dmtoken in self._registered_tokens.keys(): |
| 664 del self._registered_tokens[dmtoken] | 659 del self._registered_tokens[dmtoken] |
| OLD | NEW |