JAMES-1718 AccessTokenRepository should not throw upon already stored AccessToken
Project: http://git-wip-us.apache.org/repos/asf/james-project/repo Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/231beb50 Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/231beb50 Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/231beb50 Branch: refs/heads/master Commit: 231beb503f826742698e73ff81038246da178385 Parents: 0cc164a Author: Benoit Tellier <[email protected]> Authored: Mon Apr 11 18:39:23 2016 +0700 Committer: Benoit Tellier <[email protected]> Committed: Fri Apr 15 15:50:26 2016 +0700 ---------------------------------------------------------------------- .../access/CassandraAccessTokenDAO.java | 11 ++++---- .../access/CassandraAccessTokenRepository.java | 7 ++--- .../james/jmap/api/access/AccessToken.java | 2 +- .../jmap/api/access/AccessTokenRepository.java | 3 +- .../exceptions/AccessTokenAlreadyStored.java | 29 -------------------- .../access/MemoryAccessTokenRepository.java | 7 ++--- .../AbstractAccessTokenRepositoryTest.java | 7 ----- 7 files changed, 11 insertions(+), 55 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java index 43e4811..b5c884c 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenDAO.java @@ -56,7 +56,6 @@ public class CassandraAccessTokenDAO { .where(eq(CassandraAccessTokenTable.TOKEN, bindMarker(CassandraAccessTokenTable.TOKEN)))); this.insertStatement = session.prepare(insertInto(CassandraAccessTokenTable.TABLE_NAME) - .ifNotExists() .value(CassandraAccessTokenTable.TOKEN, bindMarker(CassandraAccessTokenTable.TOKEN)) .value(CassandraAccessTokenTable.USERNAME, bindMarker(CassandraAccessTokenTable.USERNAME)) .using(ttl(bindMarker(TTL)))); @@ -66,21 +65,21 @@ public class CassandraAccessTokenDAO { .where(eq(CassandraAccessTokenTable.TOKEN, bindMarker(CassandraAccessTokenTable.TOKEN)))); } - public CompletableFuture<Boolean> addToken(String username, AccessToken accessToken) { - return cassandraAsyncExecutor.executeReturnApplied(insertStatement.bind() - .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.getToken()) + public CompletableFuture<Void> addToken(String username, AccessToken accessToken) { + return cassandraAsyncExecutor.executeVoid(insertStatement.bind() + .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.asUUID()) .setString(CassandraAccessTokenTable.USERNAME, username) .setInt(TTL, durationInSeconds)); } public CompletableFuture<Void> removeToken(AccessToken accessToken) { return cassandraAsyncExecutor.executeVoid(removeStatement.bind() - .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.getToken())); + .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.asUUID())); } public CompletableFuture<Optional<String>> getUsernameFromToken(AccessToken accessToken) { return cassandraAsyncExecutor.executeSingleRow(selectStatement.bind() - .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.getToken())) + .setUUID(CassandraAccessTokenTable.TOKEN, accessToken.asUUID())) .thenApply(optional -> optional.map(row -> row.getString(CassandraAccessTokenTable.USERNAME))); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java index 2afd24d..0dd51a7 100644 --- a/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java +++ b/server/data/data-jmap-cassandra/src/main/java/org/apache/james/jmap/cassandra/access/CassandraAccessTokenRepository.java @@ -24,7 +24,6 @@ import javax.inject.Named; import org.apache.james.jmap.api.access.AccessToken; import org.apache.james.jmap.api.access.AccessTokenRepository; -import org.apache.james.jmap.api.access.exceptions.AccessTokenAlreadyStored; import org.apache.james.jmap.api.access.exceptions.InvalidAccessToken; import com.datastax.driver.core.Session; @@ -40,14 +39,12 @@ public class CassandraAccessTokenRepository implements AccessTokenRepository { } @Override - public void addToken(String username, AccessToken accessToken) throws AccessTokenAlreadyStored { + public void addToken(String username, AccessToken accessToken) { Preconditions.checkNotNull(username); Preconditions.checkArgument(! username.isEmpty(), "Username should not be empty"); Preconditions.checkNotNull(accessToken); - if (!cassandraAccessTokenDAO.addToken(username, accessToken).join()) { - throw new AccessTokenAlreadyStored(accessToken); - } + cassandraAccessTokenDAO.addToken(username, accessToken).join(); } @Override http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java index ea86453..d206c68 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessToken.java @@ -48,7 +48,7 @@ public class AccessToken { return token.toString(); } - public UUID getToken() { + public UUID asUUID() { return token; } http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java index cd00ff3..6fb3ae0 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/AccessTokenRepository.java @@ -19,14 +19,13 @@ package org.apache.james.jmap.api.access; -import org.apache.james.jmap.api.access.exceptions.AccessTokenAlreadyStored; import org.apache.james.jmap.api.access.exceptions.InvalidAccessToken; public interface AccessTokenRepository { String TOKEN_EXPIRATION_IN_MS = "tokenExpirationInMs"; - void addToken(String username, AccessToken accessToken) throws AccessTokenAlreadyStored; + void addToken(String username, AccessToken accessToken); void removeToken(AccessToken accessToken); http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/AccessTokenAlreadyStored.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/AccessTokenAlreadyStored.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/AccessTokenAlreadyStored.java deleted file mode 100644 index 94e83c9..0000000 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/api/access/exceptions/AccessTokenAlreadyStored.java +++ /dev/null @@ -1,29 +0,0 @@ -/**************************************************************** - * Licensed to the Apache Software Foundation (ASF) under one * - * or more contributor license agreements. See the NOTICE file * - * distributed with this work for additional information * - * regarding copyright ownership. The ASF licenses this file * - * to you under the Apache License, Version 2.0 (the * - * "License"); you may not use this file except in compliance * - * with the License. You may obtain a copy of the License at * - * * - * http://www.apache.org/licenses/LICENSE-2.0 * - * * - * Unless required by applicable law or agreed to in writing, * - * software distributed under the License is distributed on an * - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * - * KIND, either express or implied. See the License for the * - * specific language governing permissions and limitations * - * under the License. * - ****************************************************************/ - -package org.apache.james.jmap.api.access.exceptions; - -import org.apache.james.jmap.api.access.AccessToken; - -public class AccessTokenAlreadyStored extends RuntimeException { - - public AccessTokenAlreadyStored(AccessToken token) { - super(token.serialize() + " is already stored"); - } -} http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java index a333aae..2c16fc2 100644 --- a/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java +++ b/server/data/data-jmap/src/main/java/org/apache/james/jmap/memory/access/MemoryAccessTokenRepository.java @@ -28,7 +28,6 @@ import javax.inject.Singleton; import org.apache.commons.collections4.map.PassiveExpiringMap; import org.apache.james.jmap.api.access.AccessToken; import org.apache.james.jmap.api.access.AccessTokenRepository; -import org.apache.james.jmap.api.access.exceptions.AccessTokenAlreadyStored; import org.apache.james.jmap.api.access.exceptions.InvalidAccessToken; import com.google.common.base.Preconditions; @@ -44,14 +43,12 @@ public class MemoryAccessTokenRepository implements AccessTokenRepository { } @Override - public void addToken(String username, AccessToken accessToken) throws AccessTokenAlreadyStored{ + public void addToken(String username, AccessToken accessToken) { Preconditions.checkNotNull(username); Preconditions.checkArgument(! username.isEmpty(), "Username should not be empty"); Preconditions.checkNotNull(accessToken); synchronized (tokensExpirationDates) { - if (tokensExpirationDates.putIfAbsent(accessToken, username) != null) { - throw new AccessTokenAlreadyStored(accessToken); - } + tokensExpirationDates.put(accessToken, username); } } http://git-wip-us.apache.org/repos/asf/james-project/blob/231beb50/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AbstractAccessTokenRepositoryTest.java ---------------------------------------------------------------------- diff --git a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AbstractAccessTokenRepositoryTest.java b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AbstractAccessTokenRepositoryTest.java index 648a92e..04482be 100644 --- a/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AbstractAccessTokenRepositoryTest.java +++ b/server/data/data-jmap/src/test/java/org/apache/james/jmap/api/access/AbstractAccessTokenRepositoryTest.java @@ -22,7 +22,6 @@ package org.apache.james.jmap.api.access; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import org.apache.james.jmap.api.access.exceptions.AccessTokenAlreadyStored; import org.apache.james.jmap.api.access.exceptions.InvalidAccessToken; import org.junit.Before; import org.junit.Test; @@ -61,12 +60,6 @@ public abstract class AbstractAccessTokenRepositoryTest { } @Test - public void addTokenMustThrowWhenTokenIsAlreadyStored() throws Exception { - accessTokenRepository.addToken(USERNAME, TOKEN); - assertThatThrownBy(() -> accessTokenRepository.addToken(USERNAME, TOKEN)).isInstanceOf(AccessTokenAlreadyStored.class); - } - - @Test public void outDatedTokenMustBeInvalid() throws Exception { accessTokenRepository.addToken(USERNAME, TOKEN); Thread.sleep(2 * TTL_IN_MS); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
