diff --git a/packages/moxxmpp/lib/src/xeps/xep_0084.dart b/packages/moxxmpp/lib/src/xeps/xep_0084.dart index e676f44..17bdd88 100644 --- a/packages/moxxmpp/lib/src/xeps/xep_0084.dart +++ b/packages/moxxmpp/lib/src/xeps/xep_0084.dart @@ -16,6 +16,7 @@ abstract class AvatarError {} class UnknownAvatarError extends AvatarError {} +/// The result of a successful query of a users avatar. class UserAvatarData { const UserAvatarData(this.base64, this.hash); @@ -26,7 +27,9 @@ class UserAvatarData { final String hash; /// The raw avatar data. - List get data => base64Decode(base64); + /// NOTE: Remove newlines because "Line feeds SHOULD NOT be added but MUST be accepted" + /// (https://xmpp.org/extensions/xep-0084.html#proto-data). + List get data => base64Decode(base64.replaceAll('\n', '')); } class UserAvatarMetadata { diff --git a/packages/moxxmpp/test/xeps/xep_0084_test.dart b/packages/moxxmpp/test/xeps/xep_0084_test.dart new file mode 100644 index 0000000..383cc8f --- /dev/null +++ b/packages/moxxmpp/test/xeps/xep_0084_test.dart @@ -0,0 +1,14 @@ +import 'dart:convert'; +import 'package:moxxmpp/moxxmpp.dart'; +import 'package:test/test.dart'; + +void main() { + test('Test accepting newlines', () { + const data = UserAvatarData( + 'cGFwYXR1d\nHV3\n\nYXdh', + 'some-id', + ); + + expect(utf8.decode(data.data), 'papatutuwawa'); + }); +}