From 3a9e7d700b1405da77e032b65057077885efd23e Mon Sep 17 00:00:00 2001
From: sneurlax <sneurlax@gmail.com>
Date: Thu, 11 Jul 2024 18:56:54 -0500
Subject: [PATCH] filter unrecognized from extra URI parameters IAW BIP21

Closes #567 https://github.com/cypherstack/stack_wallet/issues/567

TODO refer to BIP21 to see if any other params are required
---
 lib/utilities/address_utils.dart | 17 +++++++++++++----
 1 file changed, 13 insertions(+), 4 deletions(-)

diff --git a/lib/utilities/address_utils.dart b/lib/utilities/address_utils.dart
index 97f2ec965..788bde4d5 100644
--- a/lib/utilities/address_utils.dart
+++ b/lib/utilities/address_utils.dart
@@ -14,6 +14,8 @@ import 'logger.dart';
 import '../wallets/crypto_currency/crypto_currency.dart';
 
 class AddressUtils {
+  static final Set<String> recognizedParams = {'amount', 'label', 'message'};
+
   static String condenseAddress(String address) {
     return '${address.substring(0, 5)}...${address.substring(address.length - 5)}';
   }
@@ -170,8 +172,13 @@ class AddressUtils {
   //   // }
   // }
 
-  /// parse an address uri
-  /// returns an empty map if the input string does not begin with "firo:"
+  /// Return only recognized parameters.
+  static Map<String, String> filterParams(Map<String, String> params) {
+    return Map.fromEntries(params.entries
+        .where((entry) => recognizedParams.contains(entry.key.toLowerCase())));
+  }
+
+  /// Parses a URI string.
   static Map<String, String> parseUri(String uri) {
     final Map<String, String> result = {};
     try {
@@ -202,9 +209,11 @@ class AddressUtils {
         sanitizedAddress = address.replaceFirst(prefix, "");
       }
     }
+    // Filter unrecognized parameters.
+    final filteredParams = filterParams(params);
     String uriString = "${coin.uriScheme}:$sanitizedAddress";
-    if (params.isNotEmpty) {
-      uriString += Uri(queryParameters: params).toString();
+    if (filteredParams.isNotEmpty) {
+      uriString += Uri(queryParameters: filteredParams).toString();
     }
     return uriString;
   }