]> nmode's Git Repositories - signal-cli/blobdiff - src/main/java/org/asamk/signal/commands/GetUserStatusCommand.java
Handle rate limit exception correctly when querying usernames
[signal-cli] / src / main / java / org / asamk / signal / commands / GetUserStatusCommand.java
index 1691fac84066cc7d7ef974cf2b6c15c35859414a..eab4155c710beebd7536a2af53edacea91fa601c 100644 (file)
@@ -22,6 +22,7 @@ import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.util.HashSet;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Stream;
 
 public class GetUserStatusCommand implements JsonRpcLocalCommand {
@@ -42,12 +43,15 @@ public class GetUserStatusCommand implements JsonRpcLocalCommand {
 
     @Override
     public void handleCommand(
-            final Namespace ns, final Manager m, final OutputWriter outputWriter
+            final Namespace ns,
+            final Manager m,
+            final OutputWriter outputWriter
     ) throws CommandException {
         // Get a map of registration statuses
         Map<String, UserStatus> registered;
         try {
-            registered = m.getUserStatus(new HashSet<>(ns.getList("recipient")));
+            final var recipient = ns.<String>getList("recipient");
+            registered = m.getUserStatus(recipient == null ? Set.of() : new HashSet<>(recipient));
         } catch (RateLimitException e) {
             final var message = CommandUtil.getRateLimitMessage(e);
             throw new RateLimitErrorException(message, e);
@@ -60,9 +64,16 @@ public class GetUserStatusCommand implements JsonRpcLocalCommand {
         }
 
         final var usernames = ns.<String>getList("username");
-        final var registeredUsernames = usernames == null
-                ? Map.<String, UsernameStatus>of()
-                : m.getUsernameStatus(new HashSet<>(usernames));
+        final Map<String, UsernameStatus> registeredUsernames;
+        try {
+            registeredUsernames = usernames == null ? Map.of() : m.getUsernameStatus(new HashSet<>(usernames));
+        } catch (IOException e) {
+            throw new IOErrorException("Unable to check if users are registered: "
+                    + e.getMessage()
+                    + " ("
+                    + e.getClass().getSimpleName()
+                    + ")", e);
+        }
 
         // Output
         switch (outputWriter) {