generateXml method

XmlDocument generateXml(
  1. ProtectedSaltGenerator saltGenerator
)

Implementation

xml.XmlDocument generateXml(ProtectedSaltGenerator saltGenerator) {
  final rootGroupNode = rootGroup.toXml();
  // update protected values...
  for (final el in rootGroupNode.findAllElements(KdbxXml.NODE_VALUE).where(
      (el) =>
          el.getAttribute(KdbxXml.ATTR_PROTECTED)?.toLowerCase() == 'true')) {
    final pv = KdbxFile.protectedValues[el];
    if (pv != null) {
      final newValue = saltGenerator.encryptToBase64(pv.getText());
      el.children.clear();
      el.children.add(xml.XmlText(newValue));
    } else {
//        assert((() {
//          _logger.severe('Unable to find protected value for $el ${el.parent.parent} (children: ${el.children})');
//          return false;
//        })());
      // this is always an error, not just during debug.
      throw StateError('Unable to find protected value for $el ${el.parent}');
    }
  }

  final builder = xml.XmlBuilder();
  builder.processing(
      'xml', 'version="1.0" encoding="utf-8" standalone="yes"');
  builder.element(
    'KeePassFile',
    nest: [
      meta.toXml(),
      () => builder.element('Root', nest: [
            rootGroupNode,
            XmlUtils.createNode(
              KdbxXml.NODE_DELETED_OBJECTS,
              ctx._deletedObjects.map((e) => e.toXml()).toList(),
            ),
          ]),
    ],
  );
//    final doc = xml.XmlDocument();
//    doc.children.add(xml.XmlProcessing(
//        'xml', 'version="1.0" encoding="utf-8" standalone="yes"'));
  final node = builder.buildDocument();

  return node;
}