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';
 | 
					import 'package:moxxmpp/src/xeps/xep_0297.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CarbonsManager extends XmppManagerBase {
 | 
					class CarbonsManager extends XmppManagerBase {
 | 
				
			||||||
 | 
					  CarbonsManager() : super();
 | 
				
			||||||
  CarbonsManager() : _isEnabled = false, _supported = false, _gotSupported = false, super();
 | 
					  bool _isEnabled = false;
 | 
				
			||||||
  bool _isEnabled;
 | 
					  bool _supported = false;
 | 
				
			||||||
  bool _supported;
 | 
					  bool _gotSupported = false;
 | 
				
			||||||
  bool _gotSupported;
 | 
					 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  @override
 | 
					  @override
 | 
				
			||||||
  String getId() => carbonsManager;
 | 
					  String getId() => carbonsManager;
 | 
				
			||||||
@ -159,6 +158,9 @@ class CarbonsManager extends XmppManagerBase {
 | 
				
			|||||||
    return true;
 | 
					    return true;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// True if Message Carbons are enabled. False, if not.
 | 
				
			||||||
 | 
					  bool get isEnabled => _isEnabled;
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
  @visibleForTesting
 | 
					  @visibleForTesting
 | 
				
			||||||
  void forceEnable() {
 | 
					  void forceEnable() {
 | 
				
			||||||
    _isEnabled = true;
 | 
					    _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_0030/xep_0030.dart';
 | 
				
			||||||
import 'package:moxxmpp/src/xeps/xep_0060/errors.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_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_0334.dart';
 | 
				
			||||||
import 'package:moxxmpp/src/xeps/xep_0380.dart';
 | 
					import 'package:moxxmpp/src/xeps/xep_0380.dart';
 | 
				
			||||||
import 'package:moxxmpp/src/xeps/xep_0384/crypto.dart';
 | 
					import 'package:moxxmpp/src/xeps/xep_0384/crypto.dart';
 | 
				
			||||||
@ -337,15 +338,31 @@ abstract class BaseOmemoManager extends XmppManagerBase {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    logger.finest('Beginning encryption');
 | 
					    logger.finest('Beginning encryption');
 | 
				
			||||||
 | 
					    final carbonsEnabled = getAttributes()
 | 
				
			||||||
 | 
					      .getManagerById<CarbonsManager>(carbonsManager)?.isEnabled ?? false;
 | 
				
			||||||
    final om = await getOmemoManager();
 | 
					    final om = await getOmemoManager();
 | 
				
			||||||
    final result = await om.onOutgoingStanza(
 | 
					    final result = await om.onOutgoingStanza(
 | 
				
			||||||
      OmemoOutgoingStanza(
 | 
					      OmemoOutgoingStanza(
 | 
				
			||||||
        [toJid.toString()],
 | 
					        [
 | 
				
			||||||
 | 
					          toJid.toString(),
 | 
				
			||||||
 | 
					          if (carbonsEnabled)
 | 
				
			||||||
 | 
					            getAttributes().getFullJID().toBare().toString(),
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
        _buildEnvelope(toEncrypt, toJid.toString()),
 | 
					        _buildEnvelope(toEncrypt, toJid.toString()),
 | 
				
			||||||
      ),
 | 
					      ),
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
    logger.finest('Encryption done');
 | 
					    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(
 | 
					    final encrypted = _buildEncryptedElement(
 | 
				
			||||||
      result,
 | 
					      result,
 | 
				
			||||||
      toJid.toString(),
 | 
					      toJid.toString(),
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user