Run http server with daemon command

This fits the existing command line API better
This commit is contained in:
cedb 2022-10-31 15:03:37 -04:00
parent d683e3ab24
commit 671892aec9
4 changed files with 55 additions and 56 deletions

View file

@ -16,7 +16,6 @@ public class Commands {
addCommand(new DeleteLocalAccountDataCommand());
addCommand(new FinishLinkCommand());
addCommand(new GetUserStatusCommand());
addCommand(new HttpServerCommand());
addCommand(new JoinGroupCommand());
addCommand(new JsonRpcDispatcherCommand());
addCommand(new LinkCommand());

View file

@ -13,6 +13,7 @@ import org.asamk.signal.commands.exceptions.UnexpectedErrorException;
import org.asamk.signal.commands.exceptions.UserErrorException;
import org.asamk.signal.dbus.DbusSignalControlImpl;
import org.asamk.signal.dbus.DbusSignalImpl;
import org.asamk.signal.http.HttpServerHandler;
import org.asamk.signal.json.JsonReceiveMessageHandler;
import org.asamk.signal.jsonrpc.SignalJsonRpcDispatcherHandler;
import org.asamk.signal.manager.Manager;
@ -69,6 +70,10 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand {
.nargs("?")
.setConst("localhost:7583")
.help("Expose a JSON-RPC interface on a TCP socket (default localhost:7583).");
subparser.addArgument("--http")
.nargs("?")
.setConst("localhost:8080")
.help("Expose a JSON-RPC interface as http endpoint.");
subparser.addArgument("--no-receive-stdout")
.help("Dont print received messages to stdout.")
.action(Arguments.storeTrue());
@ -128,6 +133,12 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand {
final var serverChannel = IOUtils.bindSocket(address);
runSocketSingleAccount(m, serverChannel, receiveMode == ReceiveMode.MANUAL);
}
final var httpAddress = ns.getString("http");
if (httpAddress != null) {
final var address = IOUtils.parseInetSocketAddress(httpAddress);
final var handler = new HttpServerHandler(address.getPort(), m);
handler.init();
}
final var isDbusSystem = Boolean.TRUE.equals(ns.getBoolean("dbus-system"));
if (isDbusSystem) {
runDbusSingleAccount(m, true, receiveMode != ReceiveMode.ON_START);
@ -199,6 +210,12 @@ public class DaemonCommand implements MultiLocalCommand, LocalCommand {
final var serverChannel = IOUtils.bindSocket(address);
runSocketMultiAccount(c, serverChannel, receiveMode == ReceiveMode.MANUAL);
}
final var httpAddress = ns.getString("http");
if (httpAddress != null) {
final var address = IOUtils.parseInetSocketAddress(httpAddress);
final var handler = new HttpServerHandler(address.getPort(), c);
handler.init();
}
final var isDbusSystem = Boolean.TRUE.equals(ns.getBoolean("dbus-system"));
if (isDbusSystem) {
runDbusMultiAccount(c, receiveMode != ReceiveMode.ON_START, true);

View file

@ -1,40 +0,0 @@
package org.asamk.signal.commands;
import net.sourceforge.argparse4j.inf.Namespace;
import net.sourceforge.argparse4j.inf.Subparser;
import org.asamk.signal.commands.exceptions.CommandException;
import org.asamk.signal.http.HttpServerHandler;
import org.asamk.signal.manager.MultiAccountManager;
import org.asamk.signal.output.OutputWriter;
public class HttpServerCommand implements MultiLocalCommand {
@Override
public String getName() {
return "http";
}
@Override
public void attachToSubparser(final Subparser subparser) {
subparser.help("Takes commands via an http connection");
subparser.addArgument("--port")
.help("The port on which to open the HTTP service")
.type(Integer.class)
.setDefault(8080);
}
@Override
public void handleCommand(
final Namespace ns,
final MultiAccountManager m,
final OutputWriter outputWriter
) throws CommandException {
final var port = ns.getInt("port");
final var handler = new HttpServerHandler();
handler.init(port, m);
}
}