import org.asamk.signal.commands.JsonRpcSingleCommand;
import org.asamk.signal.commands.exceptions.CommandException;
import org.asamk.signal.commands.exceptions.IOErrorException;
+import org.asamk.signal.commands.exceptions.RateLimitErrorException;
+import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
import org.asamk.signal.commands.exceptions.UntrustedKeyErrorException;
import org.asamk.signal.commands.exceptions.UserErrorException;
import org.asamk.signal.manager.Manager;
public class SignalJsonRpcCommandHandler {
- private final static Logger logger = LoggerFactory.getLogger(SignalJsonRpcDispatcherHandler.class);
+ private static final Logger logger = LoggerFactory.getLogger(SignalJsonRpcDispatcherHandler.class);
private static final int USER_ERROR = -1;
private static final int IO_ERROR = -3;
private static final int UNTRUSTED_KEY_ERROR = -4;
+ private static final int RATELIMIT_ERROR = -5;
private final Manager m;
private final MultiAccountManager c;
this.commandProvider = commandProvider;
}
- JsonNode handleRequest(
+ public JsonNode handleRequest(
final ObjectMapper objectMapper, final String method, ContainerNode<?> params
) throws JsonRpcException {
var command = getCommand(method);
return runCommand(objectMapper, params, new CommandRunnerImpl<>(m, jsonRpcCommand));
}
- final var manager = getManagerFromParams(params);
+ var manager = getManagerFromParams(params);
+ if (manager == null) {
+ final var managers = c.getManagers();
+ if (managers.size() == 1) {
+ manager = managers.get(0);
+ }
+ }
if (manager != null) {
return runCommand(objectMapper, params, new CommandRunnerImpl<>(manager, jsonRpcCommand));
} else {
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INVALID_REQUEST,
e.getMessage(),
null));
- } catch (UserErrorException e) {
- throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR,
- e.getMessage(),
- getErrorDataNode(objectMapper, result)));
- } catch (IOErrorException e) {
- throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR,
- e.getMessage(),
- getErrorDataNode(objectMapper, result)));
- } catch (UntrustedKeyErrorException e) {
- throw new JsonRpcException(new JsonRpcResponse.Error(UNTRUSTED_KEY_ERROR,
- e.getMessage(),
- getErrorDataNode(objectMapper, result)));
+ } catch (CommandException ce) {
+ switch (ce) {
+ case UserErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(USER_ERROR,
+ e.getMessage(),
+ getErrorDataNode(objectMapper, result)));
+ case IOErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(IO_ERROR,
+ e.getMessage(),
+ getErrorDataNode(objectMapper, result)));
+ case UntrustedKeyErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(
+ UNTRUSTED_KEY_ERROR,
+ e.getMessage(),
+ getErrorDataNode(objectMapper, result)));
+ case RateLimitErrorException e -> throw new JsonRpcException(new JsonRpcResponse.Error(RATELIMIT_ERROR,
+ e.getMessage(),
+ getErrorDataNode(objectMapper, result)));
+ case UnexpectedErrorException e ->
+ throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,
+ e.getMessage(),
+ getErrorDataNode(objectMapper, result)));
+ }
} catch (Throwable e) {
logger.error("Command execution failed", e);
throw new JsonRpcException(new JsonRpcResponse.Error(JsonRpcResponse.Error.INTERNAL_ERROR,