Return-Path: X-Original-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Delivered-To: apmail-jackrabbit-oak-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id E2220D4B5 for ; Tue, 14 Aug 2012 15:51:47 +0000 (UTC) Received: (qmail 18671 invoked by uid 500); 14 Aug 2012 15:51:47 -0000 Delivered-To: apmail-jackrabbit-oak-commits-archive@jackrabbit.apache.org Received: (qmail 18655 invoked by uid 500); 14 Aug 2012 15:51:47 -0000 Mailing-List: contact oak-commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: oak-dev@jackrabbit.apache.org Delivered-To: mailing list oak-commits@jackrabbit.apache.org Received: (qmail 18647 invoked by uid 99); 14 Aug 2012 15:51:47 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Aug 2012 15:51:47 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 14 Aug 2012 15:51:44 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 71D2F2388962; Tue, 14 Aug 2012 15:51:00 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1372944 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/authentication/token: TokenProvider.java TokenProviderImpl.java Date: Tue, 14 Aug 2012 15:51:00 -0000 To: oak-commits@jackrabbit.apache.org From: angela@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20120814155100.71D2F2388962@eris.apache.org> 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 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 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); } //--------------------------------------------------------------------------