Author: matthieu
Date: Fri Dec 11 12:36:19 2015
New Revision: 1719398
URL: http://svn.apache.org/viewvc?rev=1719398&view=rev
Log:
JAMES-1644 Authentication endpoint provides other endpoints URLs
Added:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/CassandraJmapAuthenticationTest.java
- copied, changed from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java
- copied, changed from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
- copied, changed from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/UserCredentials.java
- copied, changed from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
Removed:
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/AuthenticationServlet.java
Copied:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/CassandraJmapAuthenticationTest.java
(from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/CassandraJmapAuthenticationTest.java?p2=james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/CassandraJmapAuthenticationTest.java&p1=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java&r1=1719397&r2=1719398&rev=1719398&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
(original)
+++
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/CassandraJmapAuthenticationTest.java
Fri Dec 11 12:36:19 2015
@@ -16,51 +16,24 @@
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
-
package org.apache.james.jmap;
-public class UserCredentials {
-
- public static Builder builder() {
- return new Builder();
+import org.apache.james.backends.cassandra.EmbeddedCassandra;
+import org.apache.james.jmap.cassandra.CassandraJmapServer;
+import org.apache.james.jmap.utils.ZonedDateTimeProvider;
+import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch;
+import org.junit.rules.TemporaryFolder;
+
+import com.google.inject.util.Modules;
+
+public class CassandraJmapAuthenticationTest extends JMAPAuthenticationTest {
+
+ @Override
+ protected JmapServer jmapServer(TemporaryFolder temporaryFolder,
EmbeddedElasticSearch embeddedElasticSearch, EmbeddedCassandra cassandra,
ZonedDateTimeProvider zonedDateTimeProvider) {
+ return new CassandraJmapServer(
+ Modules.combine(
+
CassandraJmapServer.defaultOverrideModule(temporaryFolder,
embeddedElasticSearch, cassandra),
+ (binder) ->
binder.bind(ZonedDateTimeProvider.class).toInstance(zonedDateTimeProvider)));
}
- public static class Builder {
-
- private String username;
- private String password;
-
- private Builder() {
- }
-
- public Builder username(String username) {
- this.username = username;
- return this;
- }
-
- public Builder password(String password) {
- this.password = password;
- return this;
- }
-
- public UserCredentials build() {
- return new UserCredentials(username, password);
- }
- }
-
- private final String username;
- private final String password;
-
- private UserCredentials(String username, String password) {
- this.username = username;
- this.password = password;
- }
-
- public String getUsername() {
- return username;
- }
-
- public String getPassword() {
- return password;
- }
}
Copied:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java
(from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java?p2=james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java&p1=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java&r1=1719397&r2=1719398&rev=1719398&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java
(original)
+++
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/FixedDateZonedDateTimeProvider.java
Fri Dec 11 12:36:19 2015
@@ -19,48 +19,21 @@
package org.apache.james.jmap;
-public class UserCredentials {
+import java.time.ZonedDateTime;
- public static Builder builder() {
- return new Builder();
- }
-
- public static class Builder {
-
- private String username;
- private String password;
-
- private Builder() {
- }
-
- public Builder username(String username) {
- this.username = username;
- return this;
- }
-
- public Builder password(String password) {
- this.password = password;
- return this;
- }
-
- public UserCredentials build() {
- return new UserCredentials(username, password);
- }
- }
+import org.apache.james.jmap.utils.ZonedDateTimeProvider;
- private final String username;
- private final String password;
+public class FixedDateZonedDateTimeProvider implements ZonedDateTimeProvider {
- private UserCredentials(String username, String password) {
- this.username = username;
- this.password = password;
- }
+ private ZonedDateTime zonedDateTime;
- public String getUsername() {
- return username;
+ public void setFixedDateTime(ZonedDateTime zonedDateTime) {
+ this.zonedDateTime = zonedDateTime;
}
- public String getPassword() {
- return password;
+ @Override
+ public ZonedDateTime get() {
+ return zonedDateTime;
}
+
}
Copied:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
(from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java?p2=james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java&p1=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java&r1=1719397&r2=1719398&rev=1719398&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
(original)
+++
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/JMAPAuthenticationTest.java
Fri Dec 11 12:36:19 2015
@@ -22,92 +22,71 @@ import static com.jayway.restassured.Res
import static com.jayway.restassured.RestAssured.with;
import static com.jayway.restassured.config.EncoderConfig.encoderConfig;
import static com.jayway.restassured.config.RestAssuredConfig.newConfig;
-import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.Matchers.hasItem;
-import static org.hamcrest.Matchers.isA;
-import static org.mockito.Mockito.mock;
+import static org.hamcrest.Matchers.*;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-import javax.servlet.Filter;
-
-import org.apache.james.http.jetty.Configuration;
-import org.apache.james.http.jetty.JettyHttpServer;
-import org.apache.james.jmap.api.AccessTokenManager;
-import org.apache.james.jmap.api.access.AccessToken;
-import org.apache.james.jmap.crypto.AccessTokenManagerImpl;
-import org.apache.james.jmap.crypto.JamesSignatureHandlerProvider;
-import org.apache.james.jmap.crypto.SignedContinuationTokenManager;
-import org.apache.james.jmap.memory.access.MemoryAccessTokenRepository;
+import org.apache.james.backends.cassandra.EmbeddedCassandra;
import org.apache.james.jmap.model.ContinuationToken;
-import org.apache.james.mailbox.MailboxManager;
-import org.apache.james.user.api.UsersRepository;
-import org.apache.james.user.lib.mock.InMemoryUsersRepository;
-import org.junit.After;
+import org.apache.james.jmap.utils.ZonedDateTimeProvider;
+import org.apache.james.mailbox.elasticsearch.EmbeddedElasticSearch;
import org.junit.Before;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.RuleChain;
+import org.junit.rules.TemporaryFolder;
import com.google.common.base.Charsets;
import com.jayway.restassured.RestAssured;
import com.jayway.restassured.http.ContentType;
-public class JMAPAuthenticationTest {
+public abstract class JMAPAuthenticationTest {
private static final ZonedDateTime oldDate =
ZonedDateTime.parse("2011-12-03T10:15:30+01:00",
DateTimeFormatter.ISO_OFFSET_DATE_TIME);
private static final ZonedDateTime newDate =
ZonedDateTime.parse("2011-12-03T10:16:30+01:00",
DateTimeFormatter.ISO_OFFSET_DATE_TIME);
private static final ZonedDateTime afterExpirationDate =
ZonedDateTime.parse("2011-12-03T10:30:31+01:00",
DateTimeFormatter.ISO_OFFSET_DATE_TIME);
- private JettyHttpServer server;
+
+ private TemporaryFolder temporaryFolder = new TemporaryFolder();
+ private EmbeddedElasticSearch embeddedElasticSearch = new
EmbeddedElasticSearch(temporaryFolder);
+ private EmbeddedCassandra cassandra =
EmbeddedCassandra.createStartServer();
+ private FixedDateZonedDateTimeProvider zonedDateTimeProvider = new
FixedDateZonedDateTimeProvider();
+ private JmapServer jmapServer = jmapServer(temporaryFolder,
embeddedElasticSearch, cassandra, zonedDateTimeProvider);
+
- private UsersRepository usersRepository;
- private FixedDateZonedDateTimeProvider zonedDateTimeProvider;
- private AccessTokenManager accessTokenManager;
- private SignedContinuationTokenManager continuationTokenManager;
+
+ protected abstract JmapServer jmapServer(TemporaryFolder temporaryFolder,
EmbeddedElasticSearch embeddedElasticSearch, EmbeddedCassandra cassandra,
ZonedDateTimeProvider zonedDateTimeProvider);
+
+ @Rule
+ public RuleChain chain = RuleChain
+ .outerRule(temporaryFolder)
+ .around(embeddedElasticSearch)
+ .around(jmapServer);
+
private UserCredentials userCredentials;
@Before
public void setup() throws Exception {
- usersRepository = new InMemoryUsersRepository();
- zonedDateTimeProvider = new FixedDateZonedDateTimeProvider();
- MailboxManager mockedMailboxManager = mock(MailboxManager.class);
- accessTokenManager = new AccessTokenManagerImpl(new
MemoryAccessTokenRepository(TimeUnit.MILLISECONDS.convert(1, TimeUnit.HOURS)));
- continuationTokenManager = new SignedContinuationTokenManager(new
JamesSignatureHandlerProvider().provide(), zonedDateTimeProvider);
-
- AuthenticationServlet authenticationServlet = new
AuthenticationServlet(usersRepository, continuationTokenManager,
accessTokenManager);
+ RestAssured.port = jmapServer.getPort();
+ RestAssured.config =
newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8));
- AuthenticationFilter authenticationFilter = new
AuthenticationFilter(accessTokenManager, mockedMailboxManager);
- Filter getAuthenticationFilter = new
BypassOnPostFilter(authenticationFilter);
- server = JettyHttpServer.create(
- Configuration.builder()
- .filter("/*")
- .with(getAuthenticationFilter)
- .serve("/*")
- .with(authenticationServlet)
- .randomPort()
- .build());
+ userCredentials = UserCredentials.builder()
+ .username("[email protected]")
+ .password("password")
+ .build();
- server.start();
- RestAssured.port = server.getPort();
- RestAssured.config =
newConfig().encoderConfig(encoderConfig().defaultContentCharset(Charsets.UTF_8));
-
- userCredentials = UserCredentials.builder()
- .username("user")
- .password("password")
- .build();
- usersRepository.addUser(userCredentials.getUsername(),
userCredentials.getPassword());
+ String domain = "domain.tld";
+ jmapServer.serverProbe().addDomain(domain);
+ jmapServer.serverProbe().addUser(userCredentials.getUsername(),
userCredentials.getPassword());
+
zonedDateTimeProvider.setFixedDateTime(oldDate);
}
- @After
- public void teardown() throws Exception {
- server.stop();
- }
-
@Test
public void mustReturnMalformedRequestWhenContentTypeIsMissing() {
given()
@@ -270,12 +249,10 @@ public class JMAPAuthenticationTest {
public void mustReturnAuthenticationFailedWhenUsersRepositoryException()
throws Exception {
String continuationToken = fromGoodContinuationTokenRequest();
- usersRepository.removeUser(userCredentials.getUsername());
-
given()
.contentType(ContentType.JSON)
.accept(ContentType.JSON)
- .body("{\"token\": \"" + continuationToken + "\", \"method\":
\"password\", \"password\": \"" + userCredentials.getPassword() + "\"}")
+ .body("{\"token\": \"" + continuationToken + "\", \"method\":
\"password\", \"password\": \"" + "wrong password" + "\"}")
.when()
.post("/authentication")
.then()
@@ -298,7 +275,7 @@ public class JMAPAuthenticationTest {
}
@Test
- public void mustSendJsonContainingAccessTokenWhenGoodPassword() throws
Exception {
+ public void
mustSendJsonContainingAccessTokenAndEndpointsWhenGoodPassword() throws
Exception {
String continuationToken = fromGoodContinuationTokenRequest();
zonedDateTimeProvider.setFixedDateTime(newDate);
@@ -309,7 +286,11 @@ public class JMAPAuthenticationTest {
.when()
.post("/authentication")
.then()
- .body("accessToken", isA(String.class));
+ .body("accessToken", isA(String.class))
+ .body("api", equalTo("/jmap"))
+ .body("eventSource", both(isA(String.class)).and(notNullValue()))
+ .body("upload", both(isA(String.class)).and(notNullValue()))
+ .body("download", both(isA(String.class)).and(notNullValue()));
}
@Test
@@ -333,14 +314,19 @@ public class JMAPAuthenticationTest {
@Test
public void getMustReturnEndpointsWhenValidAuthorizationHeader() throws
Exception {
- AccessToken token = accessTokenManager.grantAccessToken("username");
+ String continuationToken = fromGoodContinuationTokenRequest();
+ String token = fromGoodAccessTokenRequest(continuationToken);
+
given()
- .header("Authorization", token.serialize())
+ .header("Authorization", token)
.when()
.get("/authentication")
.then()
.statusCode(200)
- .body("api", isA(String.class));
+ .body("api", equalTo("/jmap"))
+ .body("eventSource", both(isA(String.class)).and(notNullValue()))
+ .body("upload", both(isA(String.class)).and(notNullValue()))
+ .body("download", both(isA(String.class)).and(notNullValue()));
}
@Test
@@ -380,9 +366,10 @@ public class JMAPAuthenticationTest {
@Test
public void deleteMustReturnOKNoContentOnValidAuthorizationToken() throws
Exception {
- AccessToken token = accessTokenManager.grantAccessToken("username");
+ String continuationToken = fromGoodContinuationTokenRequest();
+ String token = fromGoodAccessTokenRequest(continuationToken);
given()
- .header("Authorization", token.serialize())
+ .header("Authorization", token)
.when()
.delete("/authentication")
.then()
@@ -390,15 +377,6 @@ public class JMAPAuthenticationTest {
}
@Test
- public void deleteMustInvalidTokenOnValidAuthorizationToken() throws
Exception {
- AccessToken token = accessTokenManager.grantAccessToken("username");
- with()
- .header("Authorization", token.serialize())
- .delete("/authentication");
- assertThat(accessTokenManager.isValid(token)).isFalse();
- }
-
- @Test
public void deleteMustInvalidAuthorizationOnCorrectAuthorization() throws
Exception {
String continuationToken = fromGoodContinuationTokenRequest();
zonedDateTimeProvider.setFixedDateTime(newDate);
Copied:
james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/UserCredentials.java
(from r1719397,
james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java)
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/UserCredentials.java?p2=james/project/trunk/server/protocols/jmap-integration-testing/src/test/java/org/apache/james/jmap/UserCredentials.java&p1=james/project/trunk/server/protocols/jmap/src/test/java/org/apache/james/jmap/UserCredentials.java&r1=1719397&r2=1719398&rev=1719398&view=diff
==============================================================================
(empty)
Modified:
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/AuthenticationServlet.java
URL:
http://svn.apache.org/viewvc/james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/AuthenticationServlet.java?rev=1719398&r1=1719397&r2=1719398&view=diff
==============================================================================
---
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/AuthenticationServlet.java
(original)
+++
james/project/trunk/server/protocols/jmap/src/main/java/org/apache/james/jmap/AuthenticationServlet.java
Fri Dec 11 12:36:19 2015
@@ -181,7 +181,10 @@ public class AuthenticationServlet exten
AccessTokenResponse response = AccessTokenResponse
.builder()
.accessToken(accessTokenManager.grantAccessToken(username))
- // TODO Send API endpoints
+ .api("/jmap")
+ .eventSource("/notImplemented")
+ .upload("/notImplemented")
+ .download("/notImplemented")
.build();
mapper.writeValue(resp.getOutputStream(), response);
}
@@ -191,8 +194,10 @@ public class AuthenticationServlet exten
resp.setStatus(HttpServletResponse.SC_OK);
EndPointsResponse response = EndPointsResponse
.builder()
- .api("/api")
- // TODO Send other API endpoints
+ .api("/jmap")
+ .eventSource("/notImplemented")
+ .upload("/notImplemented")
+ .download("/notImplemented")
.build();
mapper.writeValue(resp.getOutputStream(), response);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]