feat: Propagate errors and encrypt to self if carbons are enabled
This commit is contained in:
parent
62001c1e29
commit
22aa07c4ba
@ -13,11 +13,10 @@ import 'package:moxxmpp/src/xeps/xep_0030/xep_0030.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0297.dart';
|
||||
|
||||
class CarbonsManager extends XmppManagerBase {
|
||||
|
||||
CarbonsManager() : _isEnabled = false, _supported = false, _gotSupported = false, super();
|
||||
bool _isEnabled;
|
||||
bool _supported;
|
||||
bool _gotSupported;
|
||||
CarbonsManager() : super();
|
||||
bool _isEnabled = false;
|
||||
bool _supported = false;
|
||||
bool _gotSupported = false;
|
||||
|
||||
@override
|
||||
String getId() => carbonsManager;
|
||||
@ -159,6 +158,9 @@ class CarbonsManager extends XmppManagerBase {
|
||||
return true;
|
||||
}
|
||||
|
||||
/// True if Message Carbons are enabled. False, if not.
|
||||
bool get isEnabled => _isEnabled;
|
||||
|
||||
@visibleForTesting
|
||||
void forceEnable() {
|
||||
_isEnabled = true;
|
||||
|
@ -16,6 +16,7 @@ import 'package:moxxmpp/src/xeps/xep_0030/types.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0030/xep_0030.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0060/errors.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0060/xep_0060.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0280.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0334.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0380.dart';
|
||||
import 'package:moxxmpp/src/xeps/xep_0384/crypto.dart';
|
||||
@ -337,15 +338,31 @@ abstract class BaseOmemoManager extends XmppManagerBase {
|
||||
}
|
||||
|
||||
logger.finest('Beginning encryption');
|
||||
final carbonsEnabled = getAttributes()
|
||||
.getManagerById<CarbonsManager>(carbonsManager)?.isEnabled ?? false;
|
||||
final om = await getOmemoManager();
|
||||
final result = await om.onOutgoingStanza(
|
||||
OmemoOutgoingStanza(
|
||||
[toJid.toString()],
|
||||
[
|
||||
toJid.toString(),
|
||||
if (carbonsEnabled)
|
||||
getAttributes().getFullJID().toBare().toString(),
|
||||
],
|
||||
_buildEnvelope(toEncrypt, toJid.toString()),
|
||||
),
|
||||
);
|
||||
logger.finest('Encryption done');
|
||||
|
||||
if (!result.isSuccess(2)) {
|
||||
final other = Map<String, dynamic>.from(state.other);
|
||||
other['encryption_error_jids'] = result.jidEncryptionErrors;
|
||||
other['encryption_error_devices'] = result.deviceEncryptionErrors;
|
||||
return state.copyWith(
|
||||
other: other,
|
||||
cancel: true,
|
||||
);
|
||||
}
|
||||
|
||||
final encrypted = _buildEncryptedElement(
|
||||
result,
|
||||
toJid.toString(),
|
||||
|
Loading…
Reference in New Issue
Block a user