Chromium Code Reviews| Index: net/tools/testserver/chromiumsync.py |
| diff --git a/net/tools/testserver/chromiumsync.py b/net/tools/testserver/chromiumsync.py |
| index d789bcbbc653e6a1d46f8452d914e493f27f926c..fdee4f0ef0597fa5c3b44396c8237cb3148058e4 100644 |
| --- a/net/tools/testserver/chromiumsync.py |
| +++ b/net/tools/testserver/chromiumsync.py |
| @@ -13,6 +13,7 @@ import copy |
| import operator |
| import pickle |
| import random |
| +import string |
| import sys |
| import threading |
| import time |
| @@ -97,6 +98,9 @@ ROOT_ID = '0' |
| # Jan 1 1970, 00:00:00, non-dst. |
| UNIX_TIME_EPOCH = (1970, 1, 1, 0, 0, 0, 3, 1, 0) |
| +# The number of characters in the server-generated encryption key. |
| +KEY_LENGTH = 16 |
|
tim (not reviewing)
2012/07/19 21:42:03
nit: ENCRYPTION_KEY_LENGTH or KEYSTORE_ is a bit l
Nicolas Zea
2012/07/24 22:51:24
Done.
|
| + |
| class Error(Exception): |
| """Error class for this module.""" |
| @@ -468,6 +472,9 @@ class SyncDataModel(object): |
| self.induced_error_frequency = 0 |
| self.sync_count_before_errors = 0 |
| + self._key = ''.join(random.choice( |
| + string.ascii_uppercase + string.digits) for x in range(KEY_LENGTH)) |
| + |
| def _SaveEntry(self, entry): |
| """Insert or update an entry in the change log, and give it a new version. |
| @@ -664,6 +671,10 @@ class SyncDataModel(object): |
| # batch, even if that item was filtered out. |
| return (batch[-1].version, filtered, len(new_changes) - len(batch)) |
| + def GetKey(self): |
| + """Returns the encryption key for this account.""" |
| + return self._key |
| + |
| def _CopyOverImmutableFields(self, entry): |
| """Preserve immutable fields by copying pre-commit state. |
| @@ -1043,7 +1054,7 @@ class TestServer(object): |
| def HandleSetInducedError(self, path): |
| query = urlparse.urlparse(path)[4] |
| self.account_lock.acquire() |
| - code = 200; |
| + code = 200 |
| response = 'Success' |
| error = sync_pb2.ClientToServerResponse.Error() |
| try: |
| @@ -1132,8 +1143,8 @@ class TestServer(object): |
| response.error_code = sync_enums_pb2.SyncEnums.SUCCESS |
| self.CheckStoreBirthday(request) |
| response.store_birthday = self.account.store_birthday |
| - self.CheckTransientError(); |
| - self.CheckSendError(); |
| + self.CheckTransientError() |
| + self.CheckSendError() |
| print_context('->') |
| @@ -1151,6 +1162,9 @@ class TestServer(object): |
| self.HandleGetUpdates(request.get_updates, response.get_updates) |
| print_context('<-') |
| print '%d update(s)' % len(response.get_updates.entries) |
| + elif contents == sync_pb2.ClientToServerMessage.GET_KEY: |
| + print 'GetKey', |
| + self.HandleGetKey(request.get_key, response.get_key) |
| else: |
| print 'Unrecognizable sync request!' |
| return (400, None) # Bad request. |
| @@ -1262,3 +1276,15 @@ class TestServer(object): |
| reply = update_response.entries.add() |
| reply.CopyFrom(entry) |
| update_sieve.SaveProgress(new_timestamp, update_response) |
| + |
| + def HandleGetKey(self, update_request, updates_response): |
| + """Respond to a GetKey request by returning the per-account encryption key. |
| + |
| + Args: |
| + update_request: A sync_pb:GetKeyMessage protobuf. |
| + update_response: A sync_pb.GetKeyResponse protobuf into which the the key |
| + is written. |
| + """ |
| + updates_response.SetInParent() |
| + updates_response.key = self.account.GetKey() |
| + print "Returning encryption key: %s" % (updates_response.key) |