From 7e6177f94240b17ed5f858de4821883346ee0538 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Fri, 22 Mar 2013 14:25:03 +0000 Subject: [PATCH] Introduce org.argeo.security.dao.cli and console callback handler https://www.argeo.org/bugzilla/show_bug.cgi?id=154 git-svn-id: https://svn.argeo.org/commons/trunk@6198 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- demo/argeo_node_cli.properties | 8 ++ .../org.argeo.security.dao.cli/.project | 22 +++++ .../META-INF/spring/security-cli-osgi.xml | 36 ++++++++ .../META-INF/spring/security-cli.xml | 86 +++++++++++++++++++ .../org.argeo.security.dao.cli/pom.xml | 27 ++++++ .../security.properties | 3 + security/modules/pom.xml | 1 + .../security/core/ConsoleCallbackHandler.java | 68 +++++++++++++++ 8 files changed, 251 insertions(+) create mode 100644 demo/argeo_node_cli.properties create mode 100644 security/modules/org.argeo.security.dao.cli/.project create mode 100644 security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli-osgi.xml create mode 100644 security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli.xml create mode 100644 security/modules/org.argeo.security.dao.cli/pom.xml create mode 100644 security/modules/org.argeo.security.dao.cli/security.properties create mode 100644 security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ConsoleCallbackHandler.java diff --git a/demo/argeo_node_cli.properties b/demo/argeo_node_cli.properties new file mode 100644 index 000000000..1c33311b7 --- /dev/null +++ b/demo/argeo_node_cli.properties @@ -0,0 +1,8 @@ +argeo.osgi.start.1.node=\ +org.springframework.osgi.extender,\ + +argeo.osgi.start.3.node=\ +org.argeo.node.repo.jackrabbit,\ +org.argeo.security.dao.cli,\ + +log4j.configuration=file:../../log4j.properties diff --git a/security/modules/org.argeo.security.dao.cli/.project b/security/modules/org.argeo.security.dao.cli/.project new file mode 100644 index 000000000..807ba67a3 --- /dev/null +++ b/security/modules/org.argeo.security.dao.cli/.project @@ -0,0 +1,22 @@ + + + org.argeo.security.dao.cli + + + + + + org.eclipse.pde.ManifestBuilder + + + + + org.eclipse.pde.SchemaBuilder + + + + + + org.eclipse.pde.PluginNature + + diff --git a/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli-osgi.xml b/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli-osgi.xml new file mode 100644 index 000000000..c46f2764c --- /dev/null +++ b/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli-osgi.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli.xml b/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli.xml new file mode 100644 index 000000000..c3f6c8122 --- /dev/null +++ b/security/modules/org.argeo.security.dao.cli/META-INF/spring/security-cli.xml @@ -0,0 +1,86 @@ + + + + + + + osgibundle:security.properties + + + + + + + + /org/argeo/jcr/argeo.cnd + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/security/modules/org.argeo.security.dao.cli/pom.xml b/security/modules/org.argeo.security.dao.cli/pom.xml new file mode 100644 index 000000000..2ee756c4b --- /dev/null +++ b/security/modules/org.argeo.security.dao.cli/pom.xml @@ -0,0 +1,27 @@ + + 4.0.0 + + org.argeo.commons.security + 2.1.1-SNAPSHOT + modules + .. + + org.argeo.security.dao.cli + Commons Security DAO CLI + + + + org.apache.felix + maven-bundle-plugin + + + + *, + org.argeo.jcr, + + + + + + + \ No newline at end of file diff --git a/security/modules/org.argeo.security.dao.cli/security.properties b/security/modules/org.argeo.security.dao.cli/security.properties new file mode 100644 index 000000000..42df9259a --- /dev/null +++ b/security/modules/org.argeo.security.dao.cli/security.properties @@ -0,0 +1,3 @@ +argeo.security.systemKey=argeo +argeo.node.repo.securityWorkspace=security +argeo.keyring.secreteKeyLength=256 diff --git a/security/modules/pom.xml b/security/modules/pom.xml index 0ac639c6f..1338eba61 100644 --- a/security/modules/pom.xml +++ b/security/modules/pom.xml @@ -11,6 +11,7 @@ pom Commons Security Modules + org.argeo.security.dao.cli org.argeo.security.dao.os org.argeo.security.dao.jackrabbit org.argeo.security.dao.ldap diff --git a/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ConsoleCallbackHandler.java b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ConsoleCallbackHandler.java new file mode 100644 index 000000000..3bd4b57f0 --- /dev/null +++ b/security/runtime/org.argeo.security.core/src/main/java/org/argeo/security/core/ConsoleCallbackHandler.java @@ -0,0 +1,68 @@ +package org.argeo.security.core; + +import java.io.Console; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Locale; + +import javax.security.auth.callback.Callback; +import javax.security.auth.callback.CallbackHandler; +import javax.security.auth.callback.NameCallback; +import javax.security.auth.callback.PasswordCallback; +import javax.security.auth.callback.TextOutputCallback; +import javax.security.auth.callback.UnsupportedCallbackException; + +import org.argeo.ArgeoException; +import org.argeo.util.LocaleCallback; + +/** Callback handler to be used with a command line UI. */ +public class ConsoleCallbackHandler implements CallbackHandler { + + @Override + public void handle(Callback[] callbacks) throws IOException, + UnsupportedCallbackException { + Console console = System.console(); + if (console == null) + throw new ArgeoException("No console available"); + + PrintWriter writer = console.writer(); + for (int i = 0; i < callbacks.length; i++) { + if (callbacks[i] instanceof TextOutputCallback) { + TextOutputCallback callback = (TextOutputCallback) callbacks[i]; + writer.write(callback.getMessage()); + } else if (callbacks[i] instanceof NameCallback) { + NameCallback callback = (NameCallback) callbacks[i]; + writer.write(callback.getPrompt()); + if (callback.getDefaultName() != null) + writer.write(" (" + callback.getDefaultName() + ")"); + writer.write(" : "); + String answer = console.readLine(); + if (callback.getDefaultName() != null + && answer.trim().equals("")) + callback.setName(callback.getDefaultName()); + else + callback.setName(answer); + } else if (callbacks[i] instanceof PasswordCallback) { + PasswordCallback callback = (PasswordCallback) callbacks[i]; + writer.write(callback.getPrompt()); + char[] answer = console.readPassword(); + callback.setPassword(answer); + } else if (callbacks[i] instanceof LocaleCallback) { + LocaleCallback callback = (LocaleCallback) callbacks[i]; + writer.write(callback.getPrompt()); + writer.write("\n"); + for (int j = 0; j < callback.getAvailableLocales().size(); j++) { + Locale locale = callback.getAvailableLocales().get(j); + writer.print(j + " : " + locale.getDisplayName() + "\n"); + } + writer.write("(" + callback.getDefaultIndex() + ") : "); + String answer = console.readLine(); + if (answer.trim().equals("")) + callback.setSelectedIndex(callback.getDefaultIndex()); + else + callback.setSelectedIndex(new Integer(answer.trim())); + } + } + } + +} -- 2.30.2