mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 12:56:30 +03:00
rustifying dc_continue_key_transfer and fix master-conflict
This commit is contained in:
@@ -1580,7 +1580,13 @@ pub unsafe extern "C" fn dc_continue_key_transfer(
|
|||||||
let ffi_context = &*context;
|
let ffi_context = &*context;
|
||||||
ffi_context
|
ffi_context
|
||||||
.with_inner(|ctx| {
|
.with_inner(|ctx| {
|
||||||
dc_imex::dc_continue_key_transfer(ctx, msg_id, as_str(setup_code)) as libc::c_int
|
match dc_imex::dc_continue_key_transfer(ctx, msg_id, as_str(setup_code)) {
|
||||||
|
Ok(()) => 1,
|
||||||
|
Err(err) => {
|
||||||
|
error!(ctx, "dc_continue_key_transfer: {}", err);
|
||||||
|
0
|
||||||
|
}
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.unwrap_or(0)
|
.unwrap_or(0)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -446,9 +446,7 @@ pub unsafe fn dc_cmdline(context: &Context, line: &str) -> Result<(), failure::E
|
|||||||
!arg1.is_empty() && !arg2.is_empty(),
|
!arg1.is_empty() && !arg2.is_empty(),
|
||||||
"Arguments <msg-id> <setup-code> expected"
|
"Arguments <msg-id> <setup-code> expected"
|
||||||
);
|
);
|
||||||
if !dc_continue_key_transfer(context, arg1.parse()?, &arg2) {
|
dc_continue_key_transfer(context, arg1.parse()?, &arg2)?;
|
||||||
bail!("Continue key transfer failed");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
"has-backup" => {
|
"has-backup" => {
|
||||||
dc_imex_has_backup(context, blobdir)?;
|
dc_imex_has_backup(context, blobdir)?;
|
||||||
|
|||||||
@@ -533,7 +533,7 @@ class TestOnlineAccount:
|
|||||||
assert len(messages) == 1
|
assert len(messages) == 1
|
||||||
assert messages[0].text == "msg1"
|
assert messages[0].text == "msg1"
|
||||||
|
|
||||||
def test_ac_setup_message(self, acfactory):
|
def test_ac_setup_message(self, acfactory, lp):
|
||||||
# note that the receiving account needs to be configured and running
|
# note that the receiving account needs to be configured and running
|
||||||
# before ther setup message is send. DC does not read old messages
|
# before ther setup message is send. DC does not read old messages
|
||||||
# as of Jul2019
|
# as of Jul2019
|
||||||
@@ -541,6 +541,7 @@ class TestOnlineAccount:
|
|||||||
ac2 = acfactory.clone_online_account(ac1)
|
ac2 = acfactory.clone_online_account(ac1)
|
||||||
wait_configuration_progress(ac2, 1000)
|
wait_configuration_progress(ac2, 1000)
|
||||||
wait_configuration_progress(ac1, 1000)
|
wait_configuration_progress(ac1, 1000)
|
||||||
|
lp.sec("trigger ac setup message and return setupcode")
|
||||||
assert ac1.get_info()["fingerprint"] != ac2.get_info()["fingerprint"]
|
assert ac1.get_info()["fingerprint"] != ac2.get_info()["fingerprint"]
|
||||||
setup_code = ac1.initiate_key_transfer()
|
setup_code = ac1.initiate_key_transfer()
|
||||||
ac2._evlogger.set_timeout(30)
|
ac2._evlogger.set_timeout(30)
|
||||||
@@ -548,9 +549,10 @@ class TestOnlineAccount:
|
|||||||
msg = ac2.get_message_by_id(ev[2])
|
msg = ac2.get_message_by_id(ev[2])
|
||||||
assert msg.is_setup_message()
|
assert msg.is_setup_message()
|
||||||
assert msg.get_setupcodebegin() == setup_code[:2]
|
assert msg.get_setupcodebegin() == setup_code[:2]
|
||||||
# first try a bad setup code
|
lp.sec("try a bad setup code")
|
||||||
with pytest.raises(ValueError):
|
with pytest.raises(ValueError):
|
||||||
msg.continue_key_transfer(str(reversed(setup_code)))
|
msg.continue_key_transfer(str(reversed(setup_code)))
|
||||||
|
lp.sec("try a good setup code")
|
||||||
print("*************** Incoming ASM File at: ", msg.filename)
|
print("*************** Incoming ASM File at: ", msg.filename)
|
||||||
print("*************** Setup Code: ", setup_code)
|
print("*************** Setup Code: ", setup_code)
|
||||||
msg.continue_key_transfer(setup_code)
|
msg.continue_key_transfer(setup_code)
|
||||||
|
|||||||
@@ -231,57 +231,39 @@ pub fn dc_create_setup_code(_context: &Context) -> String {
|
|||||||
ret
|
ret
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe fn dc_continue_key_transfer(context: &Context, msg_id: u32, setup_code: &str) -> bool {
|
pub fn dc_continue_key_transfer(context: &Context, msg_id: u32, setup_code: &str) -> Result<()> {
|
||||||
if msg_id <= DC_MSG_ID_LAST_SPECIAL {
|
if msg_id <= DC_MSG_ID_LAST_SPECIAL {
|
||||||
return false;
|
bail!("wrong id");
|
||||||
}
|
}
|
||||||
|
|
||||||
let msg = Message::load_from_db(context, msg_id);
|
let msg = Message::load_from_db(context, msg_id);
|
||||||
if msg.is_err() {
|
if msg.is_err() {
|
||||||
error!(context, "Message is no Autocrypt Setup Message.");
|
bail!("Message is no Autocrypt Setup Message.");
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
let msg = msg.unwrap();
|
let msg = msg.unwrap();
|
||||||
if !msg.is_setupmessage() {
|
if !msg.is_setupmessage() {
|
||||||
error!(context, "Message is no Autocrypt Setup Message.");
|
bail!("Message is no Autocrypt Setup Message.");
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(filename) = msg.get_file(context) {
|
if let Some(filename) = msg.get_file(context) {
|
||||||
if let Ok(buf) = dc_read_file(context, filename) {
|
if let Ok(buf) = dc_read_file(context, filename) {
|
||||||
let norm_sc = CString::yolo(dc_normalize_setup_code(setup_code));
|
let norm_sc = CString::yolo(dc_normalize_setup_code(setup_code));
|
||||||
let armored_key = dc_decrypt_setup_file(context, norm_sc.as_ptr(), buf.as_ptr().cast());
|
let armored_key: &str;
|
||||||
if armored_key.is_null() {
|
unsafe {
|
||||||
warn!(context, "Cannot decrypt Autocrypt Setup Message.",);
|
let sc = dc_decrypt_setup_file(context, norm_sc.as_ptr(), buf.as_ptr().cast());
|
||||||
false
|
if sc.is_null() {
|
||||||
} else if set_self_key(context, armored_key, 1) {
|
bail!("bad setup code");
|
||||||
/*set default*/
|
}
|
||||||
/* error already logged */
|
armored_key = as_str(sc);
|
||||||
free(armored_key as *mut libc::c_void);
|
free(sc as *mut libc::c_void);
|
||||||
true
|
}
|
||||||
|
set_self_key(context, &armored_key, true, true)?;
|
||||||
|
Ok(())
|
||||||
} else {
|
} else {
|
||||||
armored_key = dc_decrypt_setup_file(context, norm_sc, buf.as_ptr().cast());
|
bail!("Cannot read Autocrypt Setup Message file.");
|
||||||
if armored_key.is_null() {
|
|
||||||
error!(context, "Cannot decrypt Autocrypt Setup Message.",);
|
|
||||||
} else {
|
|
||||||
let armored_key_r = as_str(armored_key);
|
|
||||||
match set_self_key(context, armored_key_r, true, true) {
|
|
||||||
Ok(()) => {
|
|
||||||
success = true;
|
|
||||||
}
|
|
||||||
Err(err) => {
|
|
||||||
warn!(context, "set-self-key failed: {}", err);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
error!(context, "Cannot read Autocrypt Setup Message file.",);
|
bail!("Message is no Autocrypt Setup Message.");
|
||||||
false
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
error!(context, "Message is no Autocrypt Setup Message.");
|
|
||||||
false
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user