Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """A bare-bones test server for testing cloud policy support. | 5 """A bare-bones test server for testing cloud policy support. |
| 6 | 6 |
| 7 This implements a simple cloud policy test server that can be used to test | 7 This implements a simple cloud policy test server that can be used to test |
| 8 chrome's device management service client. The policy information is read from | 8 chrome's device management service client. The policy information is read from |
| 9 the file named device_management in the server's data directory. It contains | 9 the file named device_management in the server's data directory. It contains |
| 10 enforced and recommended policies for the device and user scope, and a list | 10 enforced and recommended policies for the device and user scope, and a list |
| (...skipping 425 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 436 """ | 436 """ |
| 437 token_info, error = self.CheckToken() | 437 token_info, error = self.CheckToken() |
| 438 if not token_info: | 438 if not token_info: |
| 439 return error | 439 return error |
| 440 | 440 |
| 441 key_update_request = msg.device_state_key_update_request | 441 key_update_request = msg.device_state_key_update_request |
| 442 if len(key_update_request.server_backed_state_key) > 0: | 442 if len(key_update_request.server_backed_state_key) > 0: |
| 443 self.server.UpdateStateKeys(token_info['device_token'], | 443 self.server.UpdateStateKeys(token_info['device_token'], |
| 444 key_update_request.server_backed_state_key) | 444 key_update_request.server_backed_state_key) |
| 445 | 445 |
| 446 # If this is a publicaccount request then get the username now and use it | 446 # If this is a |publicaccount| request then get the |username| now and use |
|
bartfab (slow)
2014/06/20 16:41:11
Nit: s/request then/request,/
Joao da Silva
2014/06/20 17:25:33
Done.
| |
| 447 # in every PolicyFetchResponse produced. This is required to validate | 447 # it in every PolicyFetchResponse produced. This is required to validate |
| 448 # policy for extensions in public accounts. | 448 # policy for extensions in device-local accounts. |
| 449 username = self.server.GetPolicies().get('policy_user', None) | 449 # Unfortunately the username can't be obtained from |msg| because that |
|
bartfab (slow)
2014/06/20 16:41:11
Nit 1: s/Unfortunately/Unfortunately, /
Nit 2: s/u
Joao da Silva
2014/06/20 17:25:33
Done.
| |
| 450 # requires interacting with GAIA. | |
| 451 username = None | |
| 450 for request in msg.policy_request.request: | 452 for request in msg.policy_request.request: |
| 451 if request.policy_type == 'google/chromeos/publicaccount': | 453 if request.policy_type == 'google/chromeos/publicaccount': |
| 452 username = request.settings_entity_id | 454 username = request.settings_entity_id |
| 453 | 455 |
| 454 response = dm.DeviceManagementResponse() | 456 response = dm.DeviceManagementResponse() |
| 455 for request in msg.policy_request.request: | 457 for request in msg.policy_request.request: |
| 456 if (request.policy_type in | 458 if (request.policy_type in |
| 457 ('google/android/user', | 459 ('google/android/user', |
| 458 'google/chromeos/device', | 460 'google/chromeos/device', |
| 459 'google/chromeos/publicaccount', | 461 'google/chromeos/publicaccount', |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 630 continue | 632 continue |
| 631 | 633 |
| 632 # Create protobuf message for this policy. | 634 # Create protobuf message for this policy. |
| 633 policy_message = eval('cp.' + field.message_type.name + '()') | 635 policy_message = eval('cp.' + field.message_type.name + '()') |
| 634 policy_message.policy_options.mode = mode | 636 policy_message.policy_options.mode = mode |
| 635 field_descriptor = policy_message.DESCRIPTOR.fields_by_name['value'] | 637 field_descriptor = policy_message.DESCRIPTOR.fields_by_name['value'] |
| 636 self.SetProtobufMessageField(policy_message, field_descriptor, value) | 638 self.SetProtobufMessageField(policy_message, field_descriptor, value) |
| 637 settings.__getattribute__(field.name).CopyFrom(policy_message) | 639 settings.__getattribute__(field.name).CopyFrom(policy_message) |
| 638 | 640 |
| 639 def ProcessCloudPolicyForExtensions(self, request, response, token_info, | 641 def ProcessCloudPolicyForExtensions(self, request, response, token_info, |
| 640 username): | 642 username=None): |
| 641 """Handles a request for policy for extensions. | 643 """Handles a request for policy for extensions. |
| 642 | 644 |
| 643 A request for policy for extensions is slightly different from the other | 645 A request for policy for extensions is slightly different from the other |
| 644 cloud policy requests, because it can trigger 0, one or many | 646 cloud policy requests, because it can trigger 0, one or many |
| 645 PolicyFetchResponse messages in the response. | 647 PolicyFetchResponse messages in the response. |
| 646 | 648 |
| 647 Args: | 649 Args: |
| 648 request: The PolicyFetchRequest that triggered this handler. | 650 request: The PolicyFetchRequest that triggered this handler. |
| 649 response: The DevicePolicyResponse message for the response. Multiple | 651 response: The DevicePolicyResponse message for the response. Multiple |
| 650 PolicyFetchResponses will be appended to this message. | 652 PolicyFetchResponses will be appended to this message. |
| 651 token_info: The token extracted from the request. | 653 token_info: The token extracted from the request. |
| 652 username: The username for the response. | 654 username: The username for the response. May be None. |
| 653 """ | 655 """ |
| 654 # Send one PolicyFetchResponse for each extension that has | 656 # Send one PolicyFetchResponse for each extension that has |
| 655 # configuration data at the server. | 657 # configuration data at the server. |
| 656 ids = self.server.ListMatchingComponents('google/chrome/extension') | 658 ids = self.server.ListMatchingComponents('google/chrome/extension') |
| 657 for settings_entity_id in ids: | 659 for settings_entity_id in ids: |
| 658 # Reuse the extension policy request, to trigger the same signature | 660 # Reuse the extension policy request, to trigger the same signature |
| 659 # type in the response. | 661 # type in the response. |
| 660 request.settings_entity_id = settings_entity_id | 662 request.settings_entity_id = settings_entity_id |
| 661 fetch_response = response.response.add() | 663 fetch_response = response.response.add() |
| 662 self.ProcessCloudPolicy(request, token_info, fetch_response, username) | 664 self.ProcessCloudPolicy(request, token_info, fetch_response, username) |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 753 # provided needs to be encoded as ASCII to set the correct byte pattern. | 755 # provided needs to be encoded as ASCII to set the correct byte pattern. |
| 754 invalidation_name = policy.get('invalidation_name') | 756 invalidation_name = policy.get('invalidation_name') |
| 755 if invalidation_name is not None: | 757 if invalidation_name is not None: |
| 756 policy_data.invalidation_name = invalidation_name.encode('ascii') | 758 policy_data.invalidation_name = invalidation_name.encode('ascii') |
| 757 | 759 |
| 758 if signing_key: | 760 if signing_key: |
| 759 policy_data.public_key_version = current_key_index + 1 | 761 policy_data.public_key_version = current_key_index + 1 |
| 760 | 762 |
| 761 if username: | 763 if username: |
| 762 policy_data.username = username | 764 policy_data.username = username |
| 763 elif msg.policy_type == 'google/chromeos/publicaccount': | 765 elif msg.policy_type == 'google/chromeos/publicaccount': |
|
bartfab (slow)
2014/06/20 16:41:11
This is redundant now.
Joao da Silva
2014/06/20 17:25:33
Done.
| |
| 764 policy_data.username = msg.settings_entity_id | 766 policy_data.username = msg.settings_entity_id |
| 765 else: | 767 else: |
| 766 # For regular user/device policy, there is no way for the testserver to | 768 # For regular user/device policy, there is no way for the testserver to |
| 767 # know the user name belonging to the GAIA auth token we received (short | 769 # know the user name belonging to the GAIA auth token we received (short |
| 768 # of actually talking to GAIA). To address this, we read the username from | 770 # of actually talking to GAIA). To address this, we read the username from |
| 769 # the policy configuration dictionary, or use a default. | 771 # the policy configuration dictionary, or use a default. |
| 770 policy_data.username = policy.get('policy_user', 'user@example.com') | 772 policy_data.username = policy.get('policy_user', 'user@example.com') |
| 771 policy_data.device_id = token_info['device_id'] | 773 policy_data.device_id = token_info['device_id'] |
| 772 signed_data = policy_data.SerializeToString() | 774 signed_data = policy_data.SerializeToString() |
| 773 | 775 |
| (...skipping 466 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1240 if (self.options.log_to_console): | 1242 if (self.options.log_to_console): |
| 1241 logger.addHandler(logging.StreamHandler()) | 1243 logger.addHandler(logging.StreamHandler()) |
| 1242 if (self.options.log_file): | 1244 if (self.options.log_file): |
| 1243 logger.addHandler(logging.FileHandler(self.options.log_file)) | 1245 logger.addHandler(logging.FileHandler(self.options.log_file)) |
| 1244 | 1246 |
| 1245 testserver_base.TestServerRunner.run_server(self) | 1247 testserver_base.TestServerRunner.run_server(self) |
| 1246 | 1248 |
| 1247 | 1249 |
| 1248 if __name__ == '__main__': | 1250 if __name__ == '__main__': |
| 1249 sys.exit(PolicyServerRunner().main()) | 1251 sys.exit(PolicyServerRunner().main()) |
| OLD | NEW |