support a different source db than dest for transfer command

master
Tom Alexander 5 years ago
parent d9fd4be5d7
commit 2bd0c77bdc

@ -21,13 +21,14 @@ Usage:
foil set [--namespace=<ns>] [--db=<db>] foil set [--namespace=<ns>] [--db=<db>]
foil get [--namespace=<ns>] [--db=<db>] foil get [--namespace=<ns>] [--db=<db>]
foil list [--namespace=<ns>] [--db=<db>] foil list [--namespace=<ns>] [--db=<db>]
foil transfer [--namespace=<ns>] [--db=<db>] foil transfer [--namespace=<ns>] [--db=<db>] [--src=<db>]
foil dump [--db=<db>] foil dump [--db=<db>]
foil generate <spec> foil generate <spec>
foil (-h | --help) foil (-h | --help)
Options: Options:
--db=<db> The path to the sqlite database [default: db.sqlite3]. --db=<db> The path to the sqlite database [default: db.sqlite3].
--src=<db> The path to the old sqlite database [default: db.sqlite3].
-n DB, --namespace=<db> An identifier for a group of secrets [default: main] -n DB, --namespace=<db> An identifier for a group of secrets [default: main]
-h, --help Show this screen. -h, --help Show this screen.
--version Show version. --version Show version.
@ -42,6 +43,7 @@ struct Args {
cmd_transfer: bool, cmd_transfer: bool,
cmd_dump: bool, cmd_dump: bool,
flag_db: Option<String>, flag_db: Option<String>,
flag_src: Option<String>,
flag_namespace: String, flag_namespace: String,
arg_spec: Option<String>, arg_spec: Option<String>,
} }
@ -156,8 +158,14 @@ fn dump(mut db_conn: db::DbHandle, master_key: [u8; 32]) {
} }
} }
fn transfer(mut db_conn: db::DbHandle, master_key: [u8; 32], namespace: &str) { fn transfer(
for account in db_conn.list_accounts(master_key).into_iter() { mut db_conn_src: db::DbHandle,
mut db_conn_dest: db::DbHandle,
master_key_src: [u8; 32],
master_key_dest: [u8; 32],
namespace: &str,
) {
for account in db_conn_src.list_accounts(master_key_src).into_iter() {
let new_note = db::Note { let new_note = db::Note {
id: 0, id: 0,
namespace: namespace.to_string(), namespace: namespace.to_string(),
@ -168,7 +176,7 @@ fn transfer(mut db_conn: db::DbHandle, master_key: [u8; 32], namespace: &str) {
account.user, account.password account.user, account.password
), ),
}; };
db_conn.write_note(master_key, new_note); db_conn_dest.write_note(master_key_dest, new_note);
} }
} }
@ -195,7 +203,15 @@ fn main() -> Result<(), Box<dyn Error>> {
} else if args.cmd_list { } else if args.cmd_list {
list(db_conn, master_key, &args.flag_namespace); list(db_conn, master_key, &args.flag_namespace);
} else if args.cmd_transfer { } else if args.cmd_transfer {
transfer(db_conn, master_key, &args.flag_namespace); let mut db_conn_src: db::DbHandle = db::DbHandle::new(&args.flag_src);
let master_key_src: [u8; 32] = get_master_key(&mut db_conn_src);
transfer(
db_conn_src,
db_conn,
master_key_src,
master_key,
&args.flag_namespace,
);
} else if args.cmd_dump { } else if args.cmd_dump {
dump(db_conn, master_key); dump(db_conn, master_key);
} }

Loading…
Cancel
Save