mirror of
https://github.com/chatmail/core.git
synced 2026-05-02 04:46:29 +03:00
Allow decoding the QR code
This commit is contained in:
15
src/qr.rs
15
src/qr.rs
@@ -35,6 +35,7 @@ const VCARD_SCHEME: &str = "BEGIN:VCARD";
|
|||||||
const SMTP_SCHEME: &str = "SMTP:";
|
const SMTP_SCHEME: &str = "SMTP:";
|
||||||
const HTTP_SCHEME: &str = "http://";
|
const HTTP_SCHEME: &str = "http://";
|
||||||
const HTTPS_SCHEME: &str = "https://";
|
const HTTPS_SCHEME: &str = "https://";
|
||||||
|
const DCBACKUP_SCHEME: &str = "DCBACKUP:";
|
||||||
|
|
||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub enum Qr {
|
pub enum Qr {
|
||||||
@@ -137,6 +138,8 @@ pub async fn check_qr(context: &Context, qr: &str) -> Result<Qr> {
|
|||||||
dclogin_scheme::decode_login(qr)?
|
dclogin_scheme::decode_login(qr)?
|
||||||
} else if starts_with_ignore_case(qr, DCWEBRTC_SCHEME) {
|
} else if starts_with_ignore_case(qr, DCWEBRTC_SCHEME) {
|
||||||
decode_webrtc_instance(context, qr)?
|
decode_webrtc_instance(context, qr)?
|
||||||
|
} else if starts_with_ignore_case(qr, DCBACKUP_SCHEME) {
|
||||||
|
decode_backup(qr)?
|
||||||
} else if qr.starts_with(MAILTO_SCHEME) {
|
} else if qr.starts_with(MAILTO_SCHEME) {
|
||||||
decode_mailto(context, qr).await?
|
decode_mailto(context, qr).await?
|
||||||
} else if qr.starts_with(SMTP_SCHEME) {
|
} else if qr.starts_with(SMTP_SCHEME) {
|
||||||
@@ -364,6 +367,18 @@ fn decode_webrtc_instance(_context: &Context, qr: &str) -> Result<Qr> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Decodes a [`DCBACKUP_SCHEME`] QR code.
|
||||||
|
///
|
||||||
|
/// The format of this scheme is `DCBACKUP:<encoded ticket>`. The encoding is the
|
||||||
|
/// [`sendme::provider::Ticket`]'s `Display` impl.
|
||||||
|
fn decode_backup(qr: &str) -> Result<Qr> {
|
||||||
|
let payload = qr
|
||||||
|
.strip_prefix(DCBACKUP_SCHEME)
|
||||||
|
.ok_or(anyhow!("invalid DCBACKUP scheme"))?;
|
||||||
|
let ticket: sendme::provider::Ticket = payload.parse().context("invalid DCBACKUP payload")?;
|
||||||
|
Ok(Qr::Backup { ticket })
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Deserialize)]
|
#[derive(Debug, Deserialize)]
|
||||||
struct CreateAccountSuccessResponse {
|
struct CreateAccountSuccessResponse {
|
||||||
email: String,
|
email: String,
|
||||||
|
|||||||
Reference in New Issue
Block a user