decode method

  1. @override
Future<RemoteAttachmentContent> decode(
  1. EncodedContent encodedContent
)
override

Implementation

@override
Future<RemoteAttachmentContent> decode(EncodedContent encodedContent) async {
  final url = utf8.decode(encodedContent.content);
  final contentDigest = encodedContent.parameters['contentDigest'];
  final secretHex = encodedContent.parameters['secret'];
  final saltHex = encodedContent.parameters['salt'];
  final nonceHex = encodedContent.parameters['nonce'];
  final scheme = encodedContent.parameters['scheme'];
  final contentLengthStr = encodedContent.parameters['contentLength'];
  final filename = encodedContent.parameters['filename'];

  if (contentDigest == null || secretHex == null || saltHex == null || nonceHex == null || scheme == null || contentLengthStr == null || filename == null) {
    throw Exception('Missing required parameters for remote attachment');
  }

  // Accept http and https — LAN servers use http, production uses https
  final normalizedScheme = scheme.replaceAll('://', '');
  if (normalizedScheme != 'https' && normalizedScheme != 'http') {
    throw Exception('Invalid scheme for remote attachment: "$scheme". '
        'Must be http or https.');
  }

  final description = encodedContent.parameters['description'];

  return RemoteAttachmentContent(
    url: url,
    contentDigest: contentDigest,
    secret: hexToBytes(secretHex),
    salt: hexToBytes(saltHex),
    nonce: hexToBytes(nonceHex),
    scheme: normalizedScheme,
    contentLength: int.parse(contentLengthStr),
    filename: filename,
    description: description,
  );
}