summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/db_access/client_side_db.py56
l---------scripts/db_access/util.py1
2 files changed, 51 insertions, 6 deletions
diff --git a/scripts/db_access/client_side_db.py b/scripts/db_access/client_side_db.py
index 2b1b7c72..a77b0b16 100644
--- a/scripts/db_access/client_side_db.py
+++ b/scripts/db_access/client_side_db.py
@@ -11,8 +11,12 @@ import srp._pysrp as srp
import binascii
import logging
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks
+
from leap.soledad.client import Soledad
from leap.keymanager import KeyManager
+from leap.keymanager.openpgp import OpenPGPKey
from util import ValidateUserHandle
@@ -137,11 +141,21 @@ def _parse_args():
parser.add_argument(
'user@provider', action=ValidateUserHandle, help='the user handle')
parser.add_argument(
- '-b', dest='basedir', required=False, default=None,
+ '--basedir', '-b', default=None,
help='soledad base directory')
parser.add_argument(
- '-p', dest='passphrase', required=False, default=None,
+ '--passphrase', '-p', default=None,
help='the user passphrase')
+ parser.add_argument(
+ '--sync', '-s', action='store_true',
+ help='synchronize with the server replica')
+ parser.add_argument(
+ '--export-public-key', help="export the public key to a file")
+ parser.add_argument(
+ '--export-private-key', help="export the private key to a file")
+ parser.add_argument(
+ '--export-incoming-messages',
+ help="export incoming messages to a directory")
return parser.parse_args()
@@ -161,23 +175,53 @@ def _get_basedir(args):
return basedir
+@inlineCallbacks
+def _export_key(args, km, fname, private=False):
+ address = args.username + "@" + args.provider
+ pkey = yield km.get_key(address, OpenPGPKey, private=private, fetch_remote=False)
+ with open(args.export_private_key, "w") as f:
+ f.write(pkey.key_data)
+
+
+@inlineCallbacks
+def _export_incoming_messages(soledad, directory):
+ yield soledad.create_index("by-incoming", "bool(incoming)")
+ docs = yield soledad.get_from_index("by-incoming", '1')
+ i = 1
+ for doc in docs:
+ with open(os.path.join(directory, "message_%d.gpg" % i), "w") as f:
+ f.write(doc.content["_enc_json"])
+ i += 1
+
+
# main program
+@inlineCallbacks
+def _main(soledad, km, args):
+ if args.sync:
+ yield soledad.sync()
+ if args.export_private_key:
+ yield _export_key(args, km, args.export_private_key, private=True)
+ if args.export_public_key:
+ yield _export_key(args, km, args.expoert_public_key, private=False)
+ if args.export_incoming_messages:
+ yield _export_incoming_messages(soledad, args.export_incoming_messages)
+ reactor.stop()
+
+
if __name__ == '__main__':
args = _parse_args()
passphrase = _get_passphrase(args)
basedir = _get_basedir(args)
uuid, server_url, cert_file, token = \
_get_soledad_info(args.username, args.provider, passphrase, basedir)
-
soledad = _get_soledad_instance(
uuid, passphrase, basedir, server_url, cert_file, token)
- soledad.sync()
-
km = _get_keymanager_instance(
args.username,
args.provider,
soledad,
token,
uid=uuid)
-
+ _main(soledad, km, args)
+ reactor.run()
diff --git a/scripts/db_access/util.py b/scripts/db_access/util.py
new file mode 120000
index 00000000..368734f7
--- /dev/null
+++ b/scripts/db_access/util.py
@@ -0,0 +1 @@
+../profiling/util.py \ No newline at end of file