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]

Reply via email to