generate qr codes

This commit is contained in:
dignifiedquire
2022-07-07 20:24:16 +02:00
parent 679242d5c4
commit 63872fc271
6 changed files with 180 additions and 1 deletions

View File

@@ -32,6 +32,7 @@ const VCARD_SCHEME: &str = "BEGIN:VCARD";
const SMTP_SCHEME: &str = "SMTP:";
const HTTP_SCHEME: &str = "http://";
const HTTPS_SCHEME: &str = "https://";
pub const DCBACKUP_SCHEME: &str = "DCBACKUP:";
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Qr {
@@ -61,6 +62,9 @@ pub enum Qr {
Account {
domain: String,
},
Backup {
ticket: iroh_share::Ticket,
},
WebrtcInstance {
domain: String,
instance_pattern: String,
@@ -127,6 +131,8 @@ pub async fn check_qr(context: &Context, qr: &str) -> Result<Qr> {
decode_account(qr)?
} else if starts_with_ignore_case(qr, DCLOGIN_SCHEME) {
dclogin_scheme::decode_login(qr)?
} else if starts_with_ignore_case(qr, DCBACKUP_SCHEME) {
decode_backup(qr)?
} else if starts_with_ignore_case(qr, DCWEBRTC_SCHEME) {
decode_webrtc_instance(context, qr)?
} else if qr.starts_with(MAILTO_SCHEME) {
@@ -332,6 +338,18 @@ fn decode_account(qr: &str) -> Result<Qr> {
}
}
/// scheme: `DCBACKUP:<multibase + bincode encode ticket>`
fn decode_backup(qr: &str) -> Result<Qr> {
let payload = qr
.get(DCBACKUP_SCHEME.len()..)
.context("invalid DCBACKUP payload")?;
let (_, ticket_bytes) = multibase::decode(payload)?;
let ticket = iroh_share::Ticket::from_bytes(&ticket_bytes)?;
Ok(Qr::Backup { ticket })
}
/// scheme: `DCWEBRTC:https://meet.jit.si/$ROOM`
fn decode_webrtc_instance(_context: &Context, qr: &str) -> Result<Qr> {
let payload = qr