public void OnQrCodeScannerShown(QrCodeScannerDialogDataTemplate model) { if (model.Success) { Uri uri = null; try { uri = new Uri(model.QrCode); } catch (Exception e) { Logger.Error("Failed to parse OMEMO fingerprint XMPP URI. Malformed URI: " + model.QrCode, e); return; } if (string.Equals(uri.LocalPath.ToLowerInvariant(), MODEL.Chat.chatJabberId.ToLowerInvariant())) { IUriAction action = UriUtils.parse(uri); if (action is OmemoFingerprintUriAction fingerprintUriAction) { OmemoFingerprint fingerprint = OmemoSignalKeyDBManager.INSTANCE.getFingerprint(fingerprintUriAction.FINGERPRINT.ADDRESS, MODEL.Client.getXMPPAccount().getBareJid()); if (fingerprint is null) { fingerprint = fingerprintUriAction.FINGERPRINT; } fingerprint.trusted = true; OmemoSignalKeyDBManager.INSTANCE.setFingerprint(fingerprint, MODEL.Client.getXMPPAccount().getBareJid()); Logger.Info("Scanned OMEMO fingerprint successful."); Logger.Debug("Fingerprint: " + fingerprint.ADDRESS.ToString()); LoadFingerprints(); } else { Logger.Warn("Failed to parse OMEMO fingerprint XMPP URI. Not an " + nameof(OmemoFingerprintUriAction) + "."); } } else { Logger.Warn("Failed to parse OMEMO fingerprint XMPP URI. Wrong chat: " + uri.LocalPath); } } }
public void OnQrCodeScannerShown(QrCodeScannerDialogDataTemplate model) { if (model.Success) { Uri uri = null; try { uri = new Uri(model.QrCode); } catch (Exception e) { Logger.Error("Failed to parse OMEMO fingerprint XMPP URI. Malformed URI: " + model.QrCode, e); return; } if (string.Equals(uri.LocalPath.ToLowerInvariant(), MODEL.Chat.Chat.bareJid.ToLowerInvariant())) { IUriAction action = UriUtils.parse(uri); if (action is OmemoFingerprintUriAction fingerprintUriAction) { OmemoDeviceModel device = MODEL.Chat.Chat.omemoInfo.devices.Where(d => d.deviceId == fingerprintUriAction.FINGERPRINT.ADDRESS.DEVICE_ID).FirstOrDefault(); using (MainDbContext ctx = new MainDbContext()) { if (device is null) { device = new OmemoDeviceModel(fingerprintUriAction.FINGERPRINT.ADDRESS) { fingerprint = new OmemoFingerprintModel(fingerprintUriAction.FINGERPRINT) { trusted = true } }; ctx.Add(device); MODEL.Chat.Chat.omemoInfo.devices.Add(device); ctx.Update(MODEL.Chat.Chat.omemoInfo); } else { device.fingerprint.FromOmemoFingerprint(fingerprintUriAction.FINGERPRINT); device.fingerprint.trusted = true; ctx.Update(device.fingerprint.identityKey); ctx.Update(device.fingerprint); } } Logger.Info("Scanned OMEMO fingerprint successful."); Logger.Debug("Fingerprint: " + fingerprintUriAction.FINGERPRINT.ADDRESS.ToString()); LoadFingerprints(); } else { Logger.Warn("Failed to parse OMEMO fingerprint XMPP URI. Not an " + nameof(OmemoFingerprintUriAction) + "."); } } else { Logger.Warn("Failed to parse OMEMO fingerprint XMPP URI. Wrong chat: " + uri.LocalPath); } } }