From: Mathieu Baudier Date: Sun, 10 Jul 2022 10:14:32 +0000 (+0200) Subject: Move some CLIs to Argeo Commons. X-Git-Tag: v2.3.5~27 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=d3df603bf54b5766048ac3183196d90f9b080d9a;p=gpl%2Fargeo-slc.git Move some CLIs to Argeo Commons. --- diff --git a/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/Echo.java b/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/Echo.java index d773760bc..b5576f93d 100644 --- a/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/Echo.java +++ b/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/Echo.java @@ -5,7 +5,7 @@ import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; -import org.argeo.cms.cli.DescribedCommand; +import org.argeo.api.cli.DescribedCommand; public class Echo implements DescribedCommand { diff --git a/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/PosixCommands.java b/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/PosixCommands.java index bb5920e55..3f463efea 100644 --- a/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/PosixCommands.java +++ b/cms/org.argeo.slc.cms/src/org/argeo/slc/cli/posix/PosixCommands.java @@ -1,6 +1,6 @@ package org.argeo.slc.cli.posix; -import org.argeo.cms.cli.CommandsCli; +import org.argeo.api.cli.CommandsCli; /** POSIX commands. */ public class PosixCommands extends CommandsCli { diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java deleted file mode 100644 index 061920930..000000000 --- a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/CmsCli.java +++ /dev/null @@ -1,110 +0,0 @@ -package org.argeo.slc.tool; - -import java.lang.management.ManagementFactory; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.List; -import java.util.concurrent.ForkJoinPool; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.argeo.api.acr.spi.ProvidedRepository; -import org.argeo.api.cms.CmsApp; -import org.argeo.cms.cli.CommandsCli; -import org.argeo.cms.cli.DescribedCommand; -import org.argeo.cms.runtime.StaticCms; -import org.argeo.cms.swt.app.CmsUserApp; -import org.argeo.cms.ui.rcp.CmsRcpDisplayFactory; -import org.argeo.util.register.Component; -import org.argeo.util.register.SimpleRegister; - -public class CmsCli extends CommandsCli { - - public CmsCli(String commandName) { - super(commandName); - addCommand("static", new Launch()); - } - - @Override - public String getDescription() { - return "Argeo CMS utilities."; - } - - static class Launch implements DescribedCommand { - private Option dataOption; - private Option uiOption; - - @Override - public Options getOptions() { - Options options = new Options(); - dataOption = Option.builder().longOpt("data").hasArg().required() - .desc("path to the writable data area (mandatory)").build(); - uiOption = Option.builder().longOpt("ui").desc("open a user interface").build(); - options.addOption(dataOption); - options.addOption(uiOption); - return options; - } - - @Override - public String apply(List args) { - CommandLine cl = toCommandLine(args); - String dataPath = cl.getOptionValue(dataOption); - boolean ui = cl.hasOption(uiOption); - - Path instancePath = Paths.get(dataPath); - System.setProperty("osgi.instance.area", instancePath.toUri().toString()); - - StaticCms staticCms = new StaticCms() { - @Override - protected void addComponents(SimpleRegister register) { - if (ui) { - Component contentRepositoryC = register - .find(ProvidedRepository.class, null).first(); - CmsUserApp cmsApp = new CmsUserApp(); - Component cmsAppC = new Component.Builder<>(cmsApp) // - .addType(CmsApp.class) // - .addType(CmsUserApp.class) // - .addDependency(contentRepositoryC.getType(ProvidedRepository.class), - cmsApp::setContentRepository, null) // - .build(register); - - CmsRcpDisplayFactory displayFactory = new CmsRcpDisplayFactory(); - Component displayFactoryC = new Component.Builder<>(displayFactory) // - .addActivation(displayFactory::init) // - .addDeactivation(displayFactory::destroy) // - .build(register); - - } - } - - @Override - protected void postActivation(SimpleRegister register) { - if (ui) { - Component cmsAppC = register.find(CmsUserApp.class, null).first(); - CmsRcpDisplayFactory.openCmsApp(null, cmsAppC.get(), "data", (e) -> { - // asynchronous in order to avoid deadlock in UI thread - ForkJoinPool.commonPool().execute(() -> stop()); - }); - } - } - - }; - Runtime.getRuntime().addShutdownHook(new Thread(() -> staticCms.stop(), "Static CMS Shutdown")); - staticCms.start(); - - long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime(); - System.out.println("Static CMS available in " + jvmUptime + " ms."); - - staticCms.waitForStop(); - - return null; - } - - @Override - public String getDescription() { - return "Launch a static CMS."; - } - - } -} diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/Main.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/Main.java index 26b615600..22e345f55 100644 --- a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/Main.java +++ b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/Main.java @@ -3,7 +3,9 @@ package org.argeo.slc.tool; import java.security.Security; import org.apache.commons.cli.Option; -import org.argeo.cms.cli.CommandsCli; +import org.argeo.api.cli.CommandsCli; +import org.argeo.cms.ssh.cli.SshCli; +import org.argeo.cms.swt.rcp.cli.CmsCli; import org.argeo.slc.cli.posix.PosixCommands; import org.argeo.slc.tool.swt.MiniDesktopCli; import org.bouncycastle.jce.provider.BouncyCastleProvider; diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java deleted file mode 100644 index bc82e40f7..000000000 --- a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/SshCli.java +++ /dev/null @@ -1,132 +0,0 @@ -package org.argeo.slc.tool; - -import java.io.Console; -import java.io.IOException; -import java.lang.management.ManagementFactory; -import java.net.URI; -import java.security.GeneralSecurityException; -import java.security.KeyPair; -import java.util.Arrays; -import java.util.List; -import java.util.Scanner; - -import org.apache.commons.cli.CommandLine; -import org.apache.commons.cli.Option; -import org.apache.commons.cli.Options; -import org.apache.sshd.agent.SshAgent; -import org.apache.sshd.agent.SshAgentFactory; -import org.apache.sshd.agent.local.LocalAgentFactory; -import org.apache.sshd.agent.unix.UnixAgentFactory; -import org.apache.sshd.client.config.keys.ClientIdentityLoader; -import org.apache.sshd.common.NamedResource; -import org.apache.sshd.common.config.keys.FilePasswordProvider; -import org.argeo.cms.cli.CommandsCli; -import org.argeo.cms.cli.DescribedCommand; -import org.argeo.cms.ssh.AbstractSsh; -import org.argeo.cms.ssh.Ssh; -import org.argeo.cms.ssh.SshKeyPair; - -public class SshCli extends CommandsCli { - public SshCli(String commandName) { - super(commandName); - addCommand("shell", new SshShell()); - } - - @Override - public String getDescription() { - return "Argeo CMS utilities."; - } - - static class SshShell implements DescribedCommand { - private Option portOption; - - @Override - public Options getOptions() { - Options options = new Options(); - portOption = Option.builder().option("p").longOpt("port").hasArg().desc("port to connect to").build(); - options.addOption(portOption); - return options; - } - - @Override - public String apply(List args) { - CommandLine cl = toCommandLine(args); - String portStr = cl.getOptionValue(portOption); - if (portStr == null) - portStr = "22"; - - String host = cl.getArgList().get(0); - - String uriStr = "ssh://" + host + ":" + portStr + "/"; - // System.out.println(uriStr); - URI uri = URI.create(uriStr); - - Ssh ssh = null; - try { - ssh = new Ssh(uri); - boolean osAgent; - SshAgent sshAgent; - try { - String sshAuthSockentEnv = System.getenv(SshAgent.SSH_AUTHSOCKET_ENV_NAME); - if (sshAuthSockentEnv != null) { - ssh.getSshClient().getProperties().put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, sshAuthSockentEnv); - SshAgentFactory agentFactory = new UnixAgentFactory(); - ssh.getSshClient().setAgentFactory(agentFactory); - sshAgent = agentFactory.createClient(null, ssh.getSshClient()); - osAgent = true; - } else { - osAgent = false; - } - } catch (Exception e) { - e.printStackTrace(); - osAgent = false; - } - - if (!osAgent) { - SshAgentFactory agentFactory = new LocalAgentFactory(); - ssh.getSshClient().setAgentFactory(agentFactory); - sshAgent = agentFactory.createClient(null, ssh.getSshClient()); - String keyPath = System.getProperty("user.home") + "/.ssh/id_rsa"; - - char[] keyPassword = AbstractSsh.readPassword(); - NamedResource namedResource = new NamedResource() { - - @Override - public String getName() { - return keyPath; - } - }; - KeyPair keyPair = ClientIdentityLoader.DEFAULT - .loadClientIdentities(null, namedResource, FilePasswordProvider.of(new String(keyPassword))) - .iterator().next(); - sshAgent.addIdentity(keyPair, "NO COMMENT"); - } - -// char[] keyPassword = AbstractSsh.readPassword(); -// SshKeyPair keyPair = SshKeyPair.loadDefault(keyPassword); -// Arrays.fill(keyPassword, '*'); -// ssh.setSshKeyPair(keyPair); -// ssh.authenticate(); - ssh.verifyAuth(); - - long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime(); - System.out.println("Ssh available in " + jvmUptime + " ms."); - - AbstractSsh.openShell(ssh); - } catch (IOException | GeneralSecurityException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } finally { - if (ssh != null) - ssh.closeSession(); - } - return null; - } - - @Override - public String getDescription() { - return "Launch a static CMS."; - } - - } -} diff --git a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/swt/MiniDesktopCli.java b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/swt/MiniDesktopCli.java index 748ee8f3f..ed52674f7 100644 --- a/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/swt/MiniDesktopCli.java +++ b/suite/org.argeo.slc.tool/src/org/argeo/slc/tool/swt/MiniDesktopCli.java @@ -5,8 +5,8 @@ import java.util.List; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.Options; -import org.argeo.cms.cli.CommandsCli; -import org.argeo.cms.cli.DescribedCommand; +import org.argeo.api.cli.CommandsCli; +import org.argeo.api.cli.DescribedCommand; import org.argeo.minidesktop.MiniDesktopManager; public class MiniDesktopCli extends CommandsCli {