Author: vjrj_ Date: 2012-04-03 02:35:11 +0200 (Tue, 03 Apr 2012) New Revision: 1823 Modified: openfireauth/.classpath openfireauth/pom.xml openfireauth/src/main/java/cc/kune/core/server/auth/openfire/KuneAuthProvider.java openfireauth/src/test/java/cc/kune/core/server/auth/openfire/KuneAuthProviderTest.java Log: Openfire AuthProvider now use RPC Modified: openfireauth/.classpath =================================================================== --- openfireauth/.classpath 2012-04-03 00:06:45 UTC (rev 1822) +++ openfireauth/.classpath 2012-04-03 00:35:11 UTC (rev 1823) @@ -5,17 +5,14 @@ <classpathentry kind="src" path="src/test/resources" output="target/test-classes" excluding="**/*.java"/> <classpathentry kind="output" path="target/classes"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> - <classpathentry kind="var" path="M2_REPO/com/google/guava/guava/r09/guava-r09.jar" sourcepath="M2_REPO/com/google/guava/guava/r09/guava-r09-sources.jar"/> - <classpathentry kind="var" path="M2_REPO/com/google/protobuf/protobuf-java/2.3.0/protobuf-java-2.3.0.jar"/> + <classpathentry kind="var" path="M2_REPO/cc/kune/kune/0.1.0-SNAPSHOT/kune-0.1.0-SNAPSHOT.jar"/> + <classpathentry kind="var" path="M2_REPO/com/google/gwt/gwt-user/2.1.1/gwt-user-2.1.1.jar" sourcepath="M2_REPO/com/google/gwt/gwt-user/2.1.1/gwt-user-2.1.1-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/com/googlecode/gwtrpccommlayer/0.0.1-SNAPSHOT/gwtrpccommlayer-0.0.1-SNAPSHOT.jar"/> <classpathentry kind="var" path="M2_REPO/junit/junit/4.9/junit-4.9.jar" sourcepath="M2_REPO/junit/junit/4.9/junit-4.9-sources.jar"/> <classpathentry kind="var" path="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1.jar" sourcepath="M2_REPO/org/hamcrest/hamcrest-core/1.1/hamcrest-core-1.1-sources.jar"/> + <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpclient/4.0.1/httpclient-4.0.1.jar"/> + <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.0.1/httpcore-4.0.1.jar"/> + <classpathentry kind="var" path="M2_REPO/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar"/> + <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.3/commons-codec-1.3.jar" sourcepath="M2_REPO/commons-codec/commons-codec/1.3/commons-codec-1.3-sources.jar"/> <classpathentry kind="var" path="M2_REPO/org/igniterealtime/openfire/3.7.0/openfire-3.7.0.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/box/0.3.13/box-0.3.13.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/box-src/0.3.13/box-src-0.3.13.jar" sourcepath="M2_REPO/org/waveprotocol/box-src/0.3.13/box-src-0.3.13-sources.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/model/0.3.13/model-0.3.13.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/model-src/0.3.13/model-src-0.3.13.jar" sourcepath="M2_REPO/org/waveprotocol/model-src/0.3.13/model-src-0.3.13-sources.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/proto/0.3.13/proto-0.3.13.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/proto-src/0.3.13/proto-src-0.3.13.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/util/0.3.13/util-0.3.13.jar"/> - <classpathentry kind="var" path="M2_REPO/org/waveprotocol/util-src/0.3.13/util-src-0.3.13.jar" sourcepath="M2_REPO/org/waveprotocol/util-src/0.3.13/util-src-0.3.13-sources.jar"/> </classpath> \ No newline at end of file Modified: openfireauth/pom.xml =================================================================== --- openfireauth/pom.xml 2012-04-03 00:06:45 UTC (rev 1822) +++ openfireauth/pom.xml 2012-04-03 00:35:11 UTC (rev 1823) @@ -3,7 +3,7 @@ <modelVersion>4.0.0</modelVersion> <groupId>cc.kune</groupId> <artifactId>kune-openfireauth</artifactId> - <version>0.0.1-SNAPSHOT</version> + <version>0.0.2-SNAPSHOT</version> <name>Kune Openfire Auth Lib</name> <description>The jar generated, can be installed in /lib/ directory and allow to auth openfire users throw kune session tokens (see HybridAuthProvider)</description> <properties> @@ -11,6 +11,7 @@ <maven.compiler.target>1.6</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <wiab.version>0.3.13</wiab.version> + <gwt.version>2.1.1</gwt.version> </properties> <repositories> <repository> @@ -20,66 +21,42 @@ </repositories> <dependencies> <dependency> - <groupId>com.google.guava</groupId> - <artifactId>guava</artifactId> - <version>r09</version> - </dependency> - <dependency> - <groupId>com.google.protobuf</groupId> - <artifactId>protobuf-java</artifactId> - <version>2.3.0</version> - </dependency> - <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>model</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>model-src</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>box</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>box-src</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> <groupId>org.igniterealtime</groupId> <artifactId>openfire</artifactId> <version>3.7.0</version> </dependency> <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>proto</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>proto-src</artifactId> - <version>${wiab.version}</version> - </dependency> - <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.9</version> <scope>test</scope> </dependency> <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>util</artifactId> - <version>${wiab.version}</version> + <groupId>com.googlecode</groupId> + <artifactId>gwtrpccommlayer</artifactId> + <version>0.0.1-SNAPSHOT</version> </dependency> <dependency> - <groupId>org.waveprotocol</groupId> - <artifactId>util-src</artifactId> - <version>${wiab.version}</version> + <groupId>cc.kune</groupId> + <artifactId>kune</artifactId> + <version>0.1.0-SNAPSHOT</version> </dependency> + <dependency> + <groupId>com.google.gwt</groupId> + <artifactId>gwt-user</artifactId> + <version>${gwt.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpclient</artifactId> + <version>4.0.1</version> + </dependency> + <dependency> + <groupId>org.apache.httpcomponents</groupId> + <artifactId>httpcore</artifactId> + <version>4.0.1</version> + </dependency> </dependencies> <build> <plugins> @@ -105,4 +82,4 @@ </plugin> </plugins> </build> -</project> \ No newline at end of file +</project> Modified: openfireauth/src/main/java/cc/kune/core/server/auth/openfire/KuneAuthProvider.java =================================================================== --- openfireauth/src/main/java/cc/kune/core/server/auth/openfire/KuneAuthProvider.java 2012-04-03 00:06:45 UTC (rev 1822) +++ openfireauth/src/main/java/cc/kune/core/server/auth/openfire/KuneAuthProvider.java 2012-04-03 00:35:11 UTC (rev 1823) @@ -1,12 +1,7 @@ package cc.kune.core.server.auth.openfire; -import java.io.DataInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.ObjectInputStream; -import java.util.Properties; +import java.net.MalformedURLException; +import java.net.URL; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -15,137 +10,34 @@ import org.jivesoftware.openfire.auth.InternalUnauthenticatedException; import org.jivesoftware.openfire.auth.UnauthorizedException; import org.jivesoftware.openfire.user.UserNotFoundException; -import org.waveprotocol.box.server.CoreSettings; -import org.waveprotocol.box.server.account.AccountData; -import org.waveprotocol.box.server.persistence.PersistenceException; -import org.waveprotocol.box.server.persistence.file.FileAccountStore; -import org.waveprotocol.wave.model.wave.ParticipantId; -public class KuneAuthProvider implements AuthProvider { +import cc.kune.core.client.rpcservices.UserService; - protected class ClassLoadingObjectInputStream extends ObjectInputStream { +import com.googlecode.gwtrpccommlayer.client.impl.GwtRpcCommLayerClient; - /** - * Code copied from HashSessionManager - * - * @throws IOException - */ - public ClassLoadingObjectInputStream() throws IOException { - super(); - } +public class KuneAuthProvider implements AuthProvider { - public ClassLoadingObjectInputStream(final java.io.InputStream in) throws IOException { - super(in); - } - - @Override - public Class<?> resolveClass(final java.io.ObjectStreamClass cl) throws IOException, - ClassNotFoundException { - try { - return Class.forName(cl.getName(), false, Thread.currentThread().getContextClassLoader()); - } catch (final ClassNotFoundException e) { - return super.resolveClass(cl); - } - } - } - - private static final String INCORRECT_USERNAME = "Incorrect username"; public static final Log LOG = LogFactory.getLog(KuneAuthProvider.class); private static final String USER_NOT_LOGGED = "User not logged"; - private final FileAccountStore accountStore; - private final Properties prop; + private final UserService userService; - public KuneAuthProvider() { - prop = new Properties(); - try { - final InputStream is = this.getClass().getClassLoader().getResourceAsStream( - "wave-server.properties"); + public KuneAuthProvider() throws MalformedURLException, ClassNotFoundException, + IllegalAccessException, InstantiationException { - // final String location = - // getClass().getProtectionDomain().getCodeSource().getLocation().toString(); - // LOG.info("Location: " + location); - // final String path = location.substring(5); - // final FileInputStream fis = new FileInputStream(new File(path + - // "wave-server.properties")); - prop.load(is); - } catch (final IOException e) { - LOG.error("Error openning property files", e); - } - final String acStoreLocation = getProp(CoreSettings.ACCOUNT_STORE_DIRECTORY); - LOG.warn("Account store location: " + acStoreLocation); - accountStore = new FileAccountStore(acStoreLocation); + // http://googlewebtoolkit.blogspot.com.es/2010/07/gwtrpccommlayer-extending-gw... + + final URL url = new URL("http://127.0.0.1:8888/ws/UserService"); + final GwtRpcCommLayerClient client = new GwtRpcCommLayerClient(url); + userService = client.createRemoteServicePojoProxy(UserService.class); } @Override - @SuppressWarnings("unused") public void authenticate(final String username, final String passwdOrToken) - throws UnauthorizedException, ConnectionException, InternalUnauthenticatedException { + throws UnauthorizedException { try { - final String accountName = username + ParticipantId.DOMAIN_PREFIX - + getProp(CoreSettings.WAVE_SERVER_DOMAIN); - // LOG.warn("Trying to check account " + accountName); - final AccountData account = accountStore.getAccount(ParticipantId.ofUnsafe(accountName)); - if (account.asHuman().getPasswordDigest().verify(passwdOrToken.toCharArray())) { - // Great ... authenticated - } else { - boolean logged = false; - final String sessionName = getProp(CoreSettings.SESSIONS_STORE_DIRECTORY) + File.separator - + passwdOrToken; - // LOG.warn("Session name: " + sessionName); - try { - final File session = new File(sessionName); - if (session.exists()) { - final FileInputStream is = new FileInputStream(session); - final DataInputStream in = new DataInputStream(is); - - final String clusterId = in.readUTF(); - in.readUTF(); // nodeId - final long created = in.readLong(); - final long accessed = in.readLong(); - final int requests = in.readInt(); - - final int size = in.readInt(); - if (size > 0) { - final ClassLoadingObjectInputStream ois = new ClassLoadingObjectInputStream(in); - for (int i = 0; i < size; i++) { - try { - final String key = ois.readUTF(); - final Object value = ois.readObject(); - if (value instanceof ParticipantId) { - if (((ParticipantId) value).getAddress().startsWith(username + "@")) { - // LOG.warn("Participation id found in session"); - logged = true; - break; - } - } - } catch (final ClassNotFoundException e) { - } catch (final IOException e) { - LOG.warn("Persisted in kune session unexpected object: " + e.getMessage()); - } - } - ois.close(); - } - in.close(); - is.close(); - if (!logged) { - // LOG.warn("Participation id not found in session"); - throw new UnauthorizedException(INCORRECT_USERNAME); - } else { - // LOG.warn("Participation id found in session"); - // Great ... authenticated - } - } else { - // LOG.warn("Session file doesn't exists"); - throw new UnauthorizedException(USER_NOT_LOGGED); - } - } catch (final IOException e) { - LOG.warn("File session io error", e); - throw new UnauthorizedException(USER_NOT_LOGGED, e); - } - } - } catch (final PersistenceException e) { - LOG.warn("File session persistence error"); - throw new UnauthorizedException(INCORRECT_USERNAME, e); + userService.checkUserAndHash(username, passwdOrToken); + } catch (final Exception e) { + throw new UnauthorizedException(USER_NOT_LOGGED, e); } } @@ -161,10 +53,6 @@ throw new UnsupportedOperationException(); } - private String getProp(final String key) { - return (String) prop.get(key); - } - @Override public boolean isDigestSupported() { return false; Modified: openfireauth/src/test/java/cc/kune/core/server/auth/openfire/KuneAuthProviderTest.java =================================================================== --- openfireauth/src/test/java/cc/kune/core/server/auth/openfire/KuneAuthProviderTest.java 2012-04-03 00:06:45 UTC (rev 1822) +++ openfireauth/src/test/java/cc/kune/core/server/auth/openfire/KuneAuthProviderTest.java 2012-04-03 00:35:11 UTC (rev 1823) @@ -1,5 +1,7 @@ package cc.kune.core.server.auth.openfire; +import java.net.MalformedURLException; + import org.jivesoftware.openfire.auth.ConnectionException; import org.jivesoftware.openfire.auth.InternalUnauthenticatedException; import org.jivesoftware.openfire.auth.UnauthorizedException; @@ -9,32 +11,38 @@ @Test public void maintest() throws UnauthorizedException, ConnectionException, - InternalUnauthenticatedException { + InternalUnauthenticatedException, MalformedURLException, ClassNotFoundException, + IllegalAccessException, InstantiationException { final KuneAuthProvider auth = new KuneAuthProvider(); auth.authenticate("admin", "easyeasy"); - auth.authenticate("vjrj", "6rzonw7n39p01td1p0rfujvu3"); - auth.authenticate("admin", "x04c5575ycquu96k4kajldaq"); + // Test with a valid session hash also + auth.authenticate("admin", "1lvy0m668xv9w1csre15n874hx"); + // auth.authenticate("vjrj", "6rzonw7n39p01td1p0rfujvu3"); + // auth.authenticate("admin", "x04c5575ycquu96k4kajldaq"); // Only usersession!!! // auth.authenticate("vjrj", "1006oh5apswj81tl4vcsk1gqpj"); } @Test(expected = UnauthorizedException.class) public void wrongFileSession() throws UnauthorizedException, ConnectionException, - InternalUnauthenticatedException { + InternalUnauthenticatedException, MalformedURLException, ClassNotFoundException, + IllegalAccessException, InstantiationException { final KuneAuthProvider auth = new KuneAuthProvider(); auth.authenticate("admin", "6rzonw7n39p01td1p0rfujvu3a"); } @Test(expected = UnauthorizedException.class) public void wrongPass() throws UnauthorizedException, ConnectionException, - InternalUnauthenticatedException { + InternalUnauthenticatedException, MalformedURLException, ClassNotFoundException, + IllegalAccessException, InstantiationException { final KuneAuthProvider auth = new KuneAuthProvider(); auth.authenticate("admin", "easyeasy2"); } @Test(expected = UnauthorizedException.class) public void wrongSession() throws UnauthorizedException, ConnectionException, - InternalUnauthenticatedException { + InternalUnauthenticatedException, MalformedURLException, ClassNotFoundException, + IllegalAccessException, InstantiationException { final KuneAuthProvider auth = new KuneAuthProvider(); auth.authenticate("admin", "6rzonw7n39p01td1p0rfujvu3"); }