diff options
author | Lars Wirzenius <liw@liw.fi> | 2011-04-12 14:07:13 +0100 |
---|---|---|
committer | Lars Wirzenius <liw@liw.fi> | 2011-04-12 14:07:13 +0100 |
commit | 6cef3c7c3f7ba2a2076db19ae75b865ff32147d8 (patch) | |
tree | 6940101f2c135d424ebc7307f8005e7cc399de18 | |
parent | 0bea46faad3b9234148e654c56193fbf6d827ce3 (diff) | |
download | obnam-6cef3c7c3f7ba2a2076db19ae75b865ff32147d8.tar.gz |
Store client's key in client list and add client-list subcommand to list the keys.
-rw-r--r-- | obnamlib/plugins/encryption_plugin.py | 43 | ||||
-rw-r--r-- | obnamlib/repo.py | 3 | ||||
-rwxr-xr-x | test-encrypted-repo | 2 |
3 files changed, 34 insertions, 14 deletions
diff --git a/obnamlib/plugins/encryption_plugin.py b/obnamlib/plugins/encryption_plugin.py index 30753e53..fd706d66 100644 --- a/obnamlib/plugins/encryption_plugin.py +++ b/obnamlib/plugins/encryption_plugin.py @@ -32,11 +32,14 @@ class EncryptionPlugin(obnamlib.ObnamPlugin): ('repository-toplevel-init', self.toplevel_init), ('repository-read-data', self.toplevel_read_data), ('repository-write-data', self.toplevel_write_data), + ('repository-add-client', self.add_client), ] for name, callback in hooks: self.app.hooks.add_callback(name, callback) self._pubkey = None + + self.app.register_command('client-keys', self.client_keys) @property def keyid(self): @@ -103,18 +106,30 @@ class EncryptionPlugin(obnamlib.ObnamPlugin): userkeys.remove(keyid) self.write_keyring(repo, toplevel, userkeys) - def add_client(self, repo, client_public_key): - self.add_to_userkeys(repo, 'metadata', client_public_key) - self.add_to_userkeys(repo, 'clientlist', client_public_key) - self.add_to_userkeys(repo, 'chunks', client_public_key) - self.add_to_userkeys(repo, 'chunksums', client_public_key) - # client will add itself to the clientlist and create its own toplevel - - def remove_client(self, repo, client_keyid): - # client may remove itself, since it has access to the symmetric keys - # we assume the client-specific toplevel has already been removed - self.remove_from_userkeys(repo, 'chunksums', client_keyid) - self.remove_from_userkeys(repo, 'chunks', client_keyid) - self.remove_from_userkeys(repo, 'clientlist', client_keyid) - self.remove_from_userkeys(repo, 'metadata', client_keyid) + def add_client(self, clientlist, client_name): + clientlist.set_client_keyid(client_name, self.keyid) + + def client_keys(self, args): + repo = self.app.open_repository() + clients = repo.list_clients() + for client in clients: + keyid = repo.clientlist.get_client_keyid(client) + if keyid is None: + keyid = 'no key' + print client, keyid + +# def add_client(self, repo, client_public_key): +# self.add_to_userkeys(repo, 'metadata', client_public_key) +# self.add_to_userkeys(repo, 'clientlist', client_public_key) +# self.add_to_userkeys(repo, 'chunks', client_public_key) +# self.add_to_userkeys(repo, 'chunksums', client_public_key) +# # client will add itself to the clientlist and create its own toplevel + +# def remove_client(self, repo, client_keyid): +# # client may remove itself, since it has access to the symmetric keys +# # we assume the client-specific toplevel has already been removed +# self.remove_from_userkeys(repo, 'chunksums', client_keyid) +# self.remove_from_userkeys(repo, 'chunks', client_keyid) +# self.remove_from_userkeys(repo, 'clientlist', client_keyid) +# self.remove_from_userkeys(repo, 'metadata', client_keyid) diff --git a/obnamlib/repo.py b/obnamlib/repo.py index c0423f01..5060653e 100644 --- a/obnamlib/repo.py +++ b/obnamlib/repo.py @@ -236,6 +236,7 @@ class Repository(object): self.hooks.new('repository-toplevel-init') self.hooks.new_filter('repository-read-data') self.hooks.new_filter('repository-write-data') + self.hooks.new('repository-add-client') def checksum(self, data): '''Return checksum of data. @@ -306,6 +307,8 @@ class Repository(object): '''Commit changes to root node, and unlock it.''' for client_name in self.added_clients: self.clientlist.add_client(client_name) + self.hooks.call('repository-add-client', + self.clientlist, client_name) self.added_clients = [] for client_name in self.removed_clients: client_id = self.clientlist.get_client_id(client_name) diff --git a/test-encrypted-repo b/test-encrypted-repo index f62d06db..03dc6fab 100755 --- a/test-encrypted-repo +++ b/test-encrypted-repo @@ -19,3 +19,5 @@ $cmd restore --generation latest --to temp.restored summain -r temp.restored/$(pwd)/temp.data > temp.restored.manifest diff -u temp.data.manifest temp.restored.manifest +echo "client keys:" +$cmd client-keys |