From 411d0a7cd414c5a31fdacd7e3664bd9aaa0a4ad8 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Thu, 14 Jul 2022 20:17:08 +0200 Subject: [PATCH] dc_reveive_backup() ffi just takes the qr-code again instead of several parameters --- deltachat-ffi/deltachat.h | 12 ++++++------ deltachat-ffi/src/lib.rs | 13 +++++++------ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/deltachat-ffi/deltachat.h b/deltachat-ffi/deltachat.h index 59b7e8ced..b6bd78f6a 100644 --- a/deltachat-ffi/deltachat.h +++ b/deltachat-ffi/deltachat.h @@ -2292,7 +2292,7 @@ void dc_stop_ongoing_process (dc_context_t* context); #define DC_QR_FPR_MISMATCH 220 // id=contact #define DC_QR_FPR_WITHOUT_ADDR 230 // test1=formatted fingerprint #define DC_QR_ACCOUNT 250 // text1=domain -#define DC_QR_BACKUP 251 // text1=ticket +#define DC_QR_BACKUP 251 #define DC_QR_WEBRTC_INSTANCE 260 // text1=domain, text2=instance pattern #define DC_QR_ADDR 320 // id=contact #define DC_QR_TEXT 330 // text1=text @@ -2338,9 +2338,9 @@ void dc_stop_ongoing_process (dc_context_t* context); * ask the user if they want to create an account on the given domain, * if so, call dc_set_config_from_qr() and then dc_configure(). * - * - DC_QR_BACKUP with dc_lot_t::text1=ticket + * - DC_QR_BACKUP: * ask the user if they want to set up a new device. - * If so, get pass the ticket to dc_receive_backup(). + * If so, pass the qr-code to dc_receive_backup(). * * - DC_QR_WEBRTC_INSTANCE with dc_lot_t::text1=domain: * ask the user if they want to use the given service for video chats; @@ -2701,13 +2701,13 @@ void dc_backup_sender_unref (dc_backup_sender_t* backup_sender); * * @memberof dc_backup_sender_t * @param context The context. - * @param ticket The ticket of the backup from the QR code: - * If dc_check_qr() returns DC_QR_BACKUP, you can get the ticket from the QR code using dc_lot_get_text1(). + * @param qr The qr code containing all data needed to transfer the backup; + * usually, this is the case if dc_check_qr() returns DC_QR_BACKUP. * @param passphrase Passphrase for the additional at-rest-encryption * as defined at dc_send_backup() on the other device. * If no passphrase is used, pass NULL or empty string. */ -void dc_receive_backup (dc_context_t* context, const char* ticket, const char* passphrase); +void dc_receive_backup (dc_context_t* context, const char* qr, const char* passphrase); /** diff --git a/deltachat-ffi/src/lib.rs b/deltachat-ffi/src/lib.rs index eb0ba1ff7..5e719338b 100644 --- a/deltachat-ffi/src/lib.rs +++ b/deltachat-ffi/src/lib.rs @@ -51,6 +51,7 @@ mod lot; mod string; use self::string::*; use deltachat::chatlist::Chatlist; +use deltachat::qr::Qr; // as C lacks a good and portable error handling, // in general, the C Interface is forgiving wrt to bad parameters. @@ -2271,18 +2272,18 @@ pub unsafe extern "C" fn dc_backup_sender_unref(bs: *mut dc_backup_sender) { #[no_mangle] pub unsafe extern "C" fn dc_receive_backup( ctx: *mut dc_context_t, - ticket: *const libc::c_char, + qr: *const libc::c_char, passphrase: *const libc::c_char, ) { - if ctx.is_null() || ticket.is_null() { + if ctx.is_null() { eprintln!("ignoring careless call to dc_receive_backup"); return; } let ctx = &*ctx; - let ticket = multibase::decode(to_string_lossy(ticket)) - .map(|(_, ticket)| ticket) - .unwrap_or_default(); - + let ticket = match block_on(qr::check_qr(ctx, &to_string_lossy(qr))) { + Ok(Qr::Backup { ticket }) => ticket.as_bytes(), + _ => vec![], + }; let passphrase = to_opt_string_lossy(passphrase); spawn(async move {