Browse Source

do not expose strings map, because key access was not type checked.

remove-cryptography-dependency
Herbert Poul 6 years ago
parent
commit
22d63e8c1d
  1. 5
      bin/kdbx.dart
  2. 9
      lib/src/kdbx_entry.dart
  3. 5
      lib/src/kdbx_xml.dart
  4. 2
      test/kdbx_test.dart

5
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()}');
}
}
}

9
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<KdbxKey, StringValue> _strings = {};
Map<KdbxKey, StringValue> get strings => UnmodifiableMapView(_strings);
// Map<KdbxKey, StringValue> get strings => UnmodifiableMapView(_strings);
Iterable<MapEntry<KdbxKey, StringValue>> get stringEntries => _strings.entries;
StringValue getString(KdbxKey key) => _strings[key];
void setString(KdbxKey key, StringValue value) {
_strings[key] = value;

5
lib/src/kdbx_xml.dart

@ -58,6 +58,11 @@ abstract class KdbxSubTextNode<T> extends KdbxSubNode<T> {
}
el.children.add(XmlText(stringValue));
}
@override
String toString() {
return '$runtimeType{${_opt(name)?.text}}';
}
}
class IntNode extends KdbxSubTextNode<int> {

2
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);
});
});

Loading…
Cancel
Save