diff --git a/bin/kdbx.dart b/bin/kdbx.dart index aa87460..2efc43e 100644 --- a/bin/kdbx.dart +++ b/bin/kdbx.dart @@ -4,6 +4,7 @@ import 'dart:typed_data'; import 'package:args/args.dart'; import 'package:args/command_runner.dart'; +import 'package:kdbx/kdbx.dart'; import 'package:kdbx/src/crypto/protected_value.dart'; import 'package:kdbx/src/kdbx_format.dart'; import 'package:kdbx/src/kdbx_group.dart'; @@ -108,9 +109,9 @@ class CatCommand extends KdbxFileCommand { catGroup(group, depth: depth + 1); } for (final entry in group.entries) { - final value = entry.strings['Password']; + final value = entry.getString(KdbxKey('Password')); print( - '$indent `- ${entry.strings['Title']?.getText()}: ${forceDecrypt ? value?.getText() : value?.toString()}'); + '$indent `- ${entry.getString(KdbxKey('Title'))?.getText()}: ${forceDecrypt ? value?.getText() : value?.toString()}'); } } } diff --git a/lib/src/kdbx_entry.dart b/lib/src/kdbx_entry.dart index d210aef..3635440 100644 --- a/lib/src/kdbx_entry.dart +++ b/lib/src/kdbx_entry.dart @@ -1,4 +1,3 @@ -import 'package:collection/collection.dart'; import 'package:kdbx/src/crypto/protected_value.dart'; import 'package:kdbx/src/kdbx_consts.dart'; import 'package:kdbx/src/kdbx_format.dart'; @@ -42,7 +41,7 @@ class KdbxEntry extends KdbxObject { XmlElement toXml() { final el = super.toXml(); el.children.removeWhere((e) => e is XmlElement && e.name.local == 'String'); - el.children.addAll(strings.entries.map((stringEntry) { + el.children.addAll(stringEntries.map((stringEntry) { final value = XmlElement(XmlName('Value')); if (stringEntry.value is ProtectedValue) { value.attributes.add(XmlAttribute(XmlName('Protected'), 'true')); @@ -64,7 +63,11 @@ class KdbxEntry extends KdbxObject { KdbxGroup parent; final Map _strings = {}; - Map get strings => UnmodifiableMapView(_strings); +// Map get strings => UnmodifiableMapView(_strings); + + Iterable> get stringEntries => _strings.entries; + + StringValue getString(KdbxKey key) => _strings[key]; void setString(KdbxKey key, StringValue value) { _strings[key] = value; diff --git a/lib/src/kdbx_xml.dart b/lib/src/kdbx_xml.dart index adcfbc6..5144044 100644 --- a/lib/src/kdbx_xml.dart +++ b/lib/src/kdbx_xml.dart @@ -58,6 +58,11 @@ abstract class KdbxSubTextNode extends KdbxSubNode { } el.children.add(XmlText(stringValue)); } + + @override + String toString() { + return '$runtimeType{${_opt(name)?.text}}'; + } } class IntNode extends KdbxSubTextNode { diff --git a/test/kdbx_test.dart b/test/kdbx_test.dart index 5ea3481..42b83a2 100644 --- a/test/kdbx_test.dart +++ b/test/kdbx_test.dart @@ -66,7 +66,7 @@ void main() { // print(ByteUtils.toHexList(saved)); final kdbx = KdbxFormat.read(saved, credentials); - expect(kdbx.body.rootGroup.entries.first.strings[KdbxKey('Password')].getText(), 'LoremIpsum'); + expect(kdbx.body.rootGroup.entries.first.getString(KdbxKey('Password')).getText(), 'LoremIpsum'); File('test.kdbx').writeAsBytesSync(saved); }); });