You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2012/08/14 17:51:00 UTC
svn commit: r1372944 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token:
TokenProvider.java TokenProviderImpl.java
Author: angela
Date: Tue Aug 14 15:50:59 2012
New Revision: 1372944
URL: http://svn.apache.org/viewvc?rev=1372944&view=rev
Log:
OAK-91 - Implement Authentication Support (WIP)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProviderImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProvider.java?rev=1372944&r1=1372943&r2=1372944&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProvider.java Tue Aug 14 15:50:59 2012
@@ -16,6 +16,7 @@
*/
package org.apache.jackrabbit.oak.security.authentication.token;
+import javax.annotation.CheckForNull;
import javax.jcr.Credentials;
/**
@@ -30,8 +31,10 @@ public interface TokenProvider {
boolean doCreateToken(Credentials credentials);
+ @CheckForNull
TokenInfo createToken(Credentials credentials);
+ @CheckForNull
TokenInfo getTokenInfo(String token);
boolean removeToken(TokenInfo tokenInfo);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProviderImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProviderImpl.java?rev=1372944&r1=1372943&r2=1372944&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProviderImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token/TokenProviderImpl.java Tue Aug 14 15:50:59 2012
@@ -26,13 +26,11 @@ import java.util.Collections;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
-import java.util.Iterator;
import java.util.Map;
-import java.util.UUID;
import javax.jcr.Credentials;
import javax.jcr.PropertyType;
+import javax.jcr.RepositoryException;
import javax.jcr.SimpleCredentials;
-import javax.jcr.query.Query;
import org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.api.security.authentication.token.TokenCredentials;
@@ -41,13 +39,12 @@ import org.apache.jackrabbit.oak.api.Con
import org.apache.jackrabbit.oak.api.CoreValue;
import org.apache.jackrabbit.oak.api.CoreValueFactory;
import org.apache.jackrabbit.oak.api.PropertyState;
-import org.apache.jackrabbit.oak.api.QueryEngine;
-import org.apache.jackrabbit.oak.api.Result;
-import org.apache.jackrabbit.oak.api.ResultRow;
import org.apache.jackrabbit.oak.api.Root;
import org.apache.jackrabbit.oak.api.Tree;
import org.apache.jackrabbit.oak.core.DefaultConflictHandler;
+import org.apache.jackrabbit.oak.security.user.UserProviderImpl;
import org.apache.jackrabbit.oak.spi.security.user.PasswordUtility;
+import org.apache.jackrabbit.oak.spi.security.user.UserProvider;
import org.apache.jackrabbit.util.ISO8601;
import org.apache.jackrabbit.util.Text;
import org.slf4j.Logger;
@@ -105,12 +102,11 @@ public class TokenProviderImpl implement
if (credentials instanceof SimpleCredentials) {
final SimpleCredentials sc = (SimpleCredentials) credentials;
String userID = sc.getUserID();
- String userPath = getUserPath(contentSession, userID);
Root root = contentSession.getCurrentRoot();
- Tree userTree = (userPath == null) ? null : root.getTree(userPath);
- if (userTree != null) {
- try {
+ try {
+ Tree userTree = getUserTree(contentSession, root, userID);
+ if (userTree != null) {
Tree tokenParent = userTree.getChild(TOKENS_NODE_NAME);
if (tokenParent == null) {
tokenParent = userTree.addChild(TOKENS_NODE_NAME);
@@ -144,16 +140,18 @@ public class TokenProviderImpl implement
// also set the new token to the simple credentials.
sc.setAttribute(TOKEN_ATTRIBUTE, token);
return new TokenInfoImpl(tokenTree, token);
-
- } catch (NoSuchAlgorithmException e) {
- log.debug("Failed to create login token ", e.getMessage());
- } catch (UnsupportedEncodingException e) {
- log.debug("Failed to create login token ", e.getMessage());
- } catch (CommitFailedException e) {
- log.debug("Failed to create login token ", e.getMessage());
+ } else {
+ log.debug("Cannot create login token: No corresponding node for User " + userID + '.');
}
- } else {
- log.debug("Cannot create login token: No corresponding node for User " + userID + '.');
+
+ } catch (NoSuchAlgorithmException e) {
+ log.debug("Failed to create login token ", e.getMessage());
+ } catch (UnsupportedEncodingException e) {
+ log.debug("Failed to create login token ", e.getMessage());
+ } catch (CommitFailedException e) {
+ log.debug("Failed to create login token ", e.getMessage());
+ } catch (RepositoryException e) {
+ log.debug("Failed to create login token ", e.getMessage());
}
}
@@ -246,23 +244,9 @@ public class TokenProviderImpl implement
}
}
- // TODO: move to user related oak-spi that is used both by JCR usermanagement
- // and oak-level functionality.
- private static String getUserPath(ContentSession contentSession, String userID) {
- QueryEngine qe = contentSession.getQueryEngine();
- try {
- String uuid = UUID.nameUUIDFromBytes(userID.toLowerCase().getBytes("UTF-8")).toString();
- Map<String, CoreValue> bindings = Collections.singletonMap("id", contentSession.getCoreValueFactory().createValue(uuid));
- String statement = "SELECT * FROM [rep:User] WHERE [jcr:uuid] = $id";
- Result result = contentSession.getQueryEngine().executeQuery(statement, Query.JCR_SQL2, contentSession, Long.MAX_VALUE, 0, bindings, null);
- Iterator<? extends ResultRow> it = result.getRows().iterator();
- if (it.hasNext()) {
- return it.next().getPath();
- }
- } catch (Exception e) {
- // no such user.
- }
- return null;
+ private static Tree getUserTree(ContentSession contentSession, Root root, String userID) throws RepositoryException {
+ UserProvider userProvider = new UserProviderImpl(contentSession, root, null);
+ return userProvider.getAuthorizable(userID);
}
//--------------------------------------------------------------------------