Skip to content
This repository was archived by the owner on Dec 12, 2018. It is now read-only.

Commit 7be6d0c

Browse files
author
mrioan
authored
Merge pull request #1245 from stormpath/1242_idsite_prepost_handlers
1242 idsite pre and post handlers
2 parents 3252671 + 7ededae commit 7be6d0c

File tree

13 files changed

+244
-26
lines changed

13 files changed

+244
-26
lines changed
Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,13 @@
2626
/**
2727
* @since 1.0.0
2828
*/
29-
public abstract class IDSiteFilterFactory extends ControllerFilterFactory<IdSiteController> {
29+
public abstract class AbstractIDSiteFilterFactory<T extends IdSiteController> extends ControllerFilterFactory<T> {
3030

3131
@Override
32-
protected IdSiteController newController() {
33-
return new IdSiteController();
34-
}
32+
protected abstract T newController();
3533

3634
@Override
37-
protected void configure(IdSiteController controller, Config config) throws Exception {
35+
protected void configure(T controller, Config config) throws Exception {
3836

3937
SubdomainResolver subdomainResolver = new SubdomainResolver();
4038
subdomainResolver.setBaseDomainName(config.get("stormpath.web.application.domain"));
@@ -58,5 +56,5 @@ protected void configure(IdSiteController controller, Config config) throws Exce
5856
doConfigure(controller, config);
5957
}
6058

61-
public abstract void doConfigure(IdSiteController controller, Config config);
59+
public abstract void doConfigure(T controller, Config config);
6260
}

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/config/filter/IDSiteForgotFilterFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
/**
2222
* @since 1.0.0
2323
*/
24-
public class IDSiteForgotFilterFactory extends IDSiteFilterFactory {
24+
public class IDSiteForgotFilterFactory extends AbstractIDSiteFilterFactory<IdSiteController> {
2525

2626
@Override
2727
protected IdSiteController newController() {

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/config/filter/IDSiteLoginFilterFactory.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016 Stormpath, Inc.
2+
* Copyright 2017 Stormpath, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -17,19 +17,21 @@
1717

1818
import com.stormpath.sdk.servlet.config.Config;
1919
import com.stormpath.sdk.servlet.mvc.IdSiteController;
20+
import com.stormpath.sdk.servlet.mvc.IdSiteLoginController;
2021

2122
/**
22-
* @since 1.0.0
23+
* @since 1.5.0
2324
*/
24-
public class IDSiteLoginFilterFactory extends IDSiteFilterFactory {
25+
public class IDSiteLoginFilterFactory extends AbstractIDSiteFilterFactory<IdSiteLoginController> {
2526

2627
@Override
27-
protected IdSiteController newController() {
28-
return new IdSiteController();
28+
protected IdSiteLoginController newController() {
29+
return new IdSiteLoginController();
2930
}
3031

31-
public void doConfigure(IdSiteController controller, Config config) {
32+
public void doConfigure(IdSiteLoginController controller, Config config) {
3233
controller.setIdSiteUri(config.get("stormpath.web.idSite.loginUri"));
3334
controller.setNextUri(config.get("stormpath.web.login.nextUri"));
35+
controller.setPreLoginHandler(config.getLoginPreHandler());
3436
}
3537
}

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/config/filter/IDSiteRegisterFilterFactory.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2016 Stormpath, Inc.
2+
* Copyright 2017 Stormpath, Inc.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -16,22 +16,23 @@
1616
package com.stormpath.sdk.servlet.config.filter;
1717

1818
import com.stormpath.sdk.servlet.config.Config;
19-
import com.stormpath.sdk.servlet.mvc.IdSiteController;
19+
import com.stormpath.sdk.servlet.mvc.IdSiteRegisterController;
2020

2121
/**
22-
* @since 1.0.0
22+
* @since 1.5.0
2323
*/
24-
public class IDSiteRegisterFilterFactory extends IDSiteFilterFactory {
24+
public class IDSiteRegisterFilterFactory extends AbstractIDSiteFilterFactory<IdSiteRegisterController> {
2525

2626
@Override
27-
protected IdSiteController newController() {
28-
return new IdSiteController();
27+
protected IdSiteRegisterController newController() {
28+
return new IdSiteRegisterController();
2929
}
3030

3131
@Override
32-
public void doConfigure(IdSiteController controller, Config config) {
32+
public void doConfigure(IdSiteRegisterController controller, Config config) {
3333
controller.setIdSiteUri(config.get("stormpath.web.idSite.registerUri"));
3434
controller.setNextUri(config.get("stormpath.web.register.nextUri"));
35+
controller.setPreRegisterHandler(config.getRegisterPreHandler());
3536
}
3637

3738
}

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/config/filter/IDSiteResultFilterFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ protected IdSiteResultController newController() {
3131
@Override
3232
public void doConfigure(IdSiteResultController controller, Config config) {
3333
controller.setRegisterNextUri(config.getRegisterConfig().getNextUri());
34+
controller.setPostRegisterHandler(config.getRegisterPostHandler());
35+
controller.setPostLoginHandler(config.getLoginPostHandler());
3436
}
3537

3638
}

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/mvc/CallbackController.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.stormpath.sdk.authc.AuthenticationResult;
2020
import com.stormpath.sdk.idsite.LogoutResult;
2121
import com.stormpath.sdk.lang.Assert;
22-
import com.stormpath.sdk.lang.Strings;
2322
import com.stormpath.sdk.saml.SamlResultListener;
2423
import com.stormpath.sdk.servlet.application.ApplicationResolver;
2524
import com.stormpath.sdk.servlet.authc.impl.DefaultSuccessfulAuthenticationRequestEvent;
@@ -43,6 +42,8 @@ public abstract class CallbackController extends AbstractController {
4342
protected Saver<AuthenticationResult> authenticationResultSaver;
4443
protected Publisher<RequestEvent> eventPublisher;
4544
protected List<SamlResultListener> samlResultListeners = new ArrayList<SamlResultListener>();
45+
protected WebHandler postLoginHandler;
46+
protected WebHandler postRegisterHandler;
4647

4748
public void setLoginNextUri(String loginNextUri) {
4849
this.loginNextUri = loginNextUri;
@@ -106,6 +107,10 @@ protected ViewModel onAuthentication(HttpServletRequest request,
106107

107108
publish(new DefaultSuccessfulAuthenticationRequestEvent(request, response, null, authcResult));
108109

110+
if (postLoginHandler != null && !postLoginHandler.handle(request, response, result.getAccount())) {
111+
return null;
112+
}
113+
109114
return new DefaultViewModel(loginNextUri).setRedirect(true);
110115
}
111116

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2017 Stormpath, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.stormpath.sdk.servlet.mvc;
17+
18+
import javax.servlet.http.HttpServletRequest;
19+
import javax.servlet.http.HttpServletResponse;
20+
21+
/**
22+
* @since 1.5.0
23+
*/
24+
public class IdSiteLoginController extends IdSiteController {
25+
26+
protected WebHandler preLoginHandler;
27+
28+
public void setPreLoginHandler(WebHandler preLoginHandler) {
29+
this.preLoginHandler = preLoginHandler;
30+
}
31+
32+
@Override
33+
protected ViewModel doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
34+
35+
if (preLoginHandler != null) {
36+
if (!preLoginHandler.handle(request, response, null)) {
37+
return null;
38+
}
39+
}
40+
41+
return super.doGet(request, response);
42+
}
43+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/*
2+
* Copyright 2017 Stormpath, Inc.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.stormpath.sdk.servlet.mvc;
17+
18+
import javax.servlet.http.HttpServletRequest;
19+
import javax.servlet.http.HttpServletResponse;
20+
21+
/**
22+
* @since 1.5.0
23+
*/
24+
public class IdSiteRegisterController extends IdSiteController {
25+
26+
protected WebHandler preRegisterHandler;
27+
28+
public void setPreRegisterHandler(WebHandler preRegisterHandler) {
29+
this.preRegisterHandler = preRegisterHandler;
30+
}
31+
32+
@Override
33+
protected ViewModel doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
34+
35+
if (preRegisterHandler != null) {
36+
if (!preRegisterHandler.handle(request, response, null)) {
37+
return null;
38+
}
39+
}
40+
41+
return super.doGet(request, response);
42+
}
43+
}

extensions/servlet/src/main/java/com/stormpath/sdk/servlet/mvc/IdSiteResultController.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import com.stormpath.sdk.application.Application;
2121
import com.stormpath.sdk.authc.AuthenticationResult;
2222
import com.stormpath.sdk.client.Client;
23+
import com.stormpath.sdk.idsite.AccountResult;
2324
import com.stormpath.sdk.idsite.IdSiteCallbackHandler;
2425
import com.stormpath.sdk.idsite.IdSiteResultListener;
2526
import com.stormpath.sdk.idsite.LogoutResult;
@@ -106,7 +107,7 @@ public void onLogout(LogoutResult result) {
106107
idSiteCallbackHandler.addResultListener(resultListener);
107108
}
108109

109-
idSiteCallbackHandler.getAccountResult();
110+
AccountResult accountResult = idSiteCallbackHandler.getAccountResult();
110111

111112
return viewModel[0];
112113
}
@@ -126,7 +127,12 @@ private ViewModel onRegistration(final HttpServletRequest request, final HttpSer
126127
AuthenticationResult authcResult = new TransientAuthenticationResult(account);
127128
saveResult(request, response, authcResult);
128129
}
129-
// else - do we need to do anything else?
130+
131+
if (postRegisterHandler != null) {
132+
if (!postRegisterHandler.handle(request, response, account)) {
133+
return null;
134+
}
135+
}
130136

131137
//just redirect to post-register view:
132138
return new DefaultViewModel(registerNextUri).setRedirect(true);
@@ -136,4 +142,12 @@ private RegisteredAccountRequestEvent createRegisteredEvent(HttpServletRequest r
136142
HttpServletResponse response, Account account) {
137143
return new DefaultRegisteredAccountRequestEvent(request, response, account);
138144
}
145+
146+
public void setPostRegisterHandler(WebHandler postRegisterHandler) {
147+
this.postRegisterHandler = postRegisterHandler;
148+
}
149+
150+
public void setPostLoginHandler(WebHandler postLoginHandler) {
151+
this.postLoginHandler = postLoginHandler;
152+
}
139153
}

extensions/spring/boot/stormpath-webmvc-spring-boot-starter/src/test/groovy/com/stormpath/spring/boot/autoconfigure/StormpathWebSecurityAutoConfigurationIT.groovy

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,27 +17,62 @@ package com.stormpath.spring.boot.autoconfigure
1717

1818
import autoconfigure.StormpathWebSecurityAutoConfigurationTestApplication
1919
import com.stormpath.sdk.servlet.csrf.CsrfTokenManager
20+
import com.stormpath.sdk.servlet.filter.StormpathFilter
21+
import com.stormpath.sdk.servlet.mvc.Controller
22+
import com.stormpath.sdk.servlet.mvc.IdSiteLoginController
23+
import com.stormpath.sdk.servlet.mvc.LoginController
2024
import com.stormpath.spring.config.TwoAppTenantStormpathTestConfiguration
2125
import org.springframework.beans.factory.annotation.Autowired
26+
import org.springframework.beans.factory.annotation.Qualifier
27+
import org.springframework.beans.factory.annotation.Value
2228
import org.springframework.boot.test.context.SpringBootTest
29+
import org.springframework.test.context.TestPropertySource
2330
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests
2431
import org.springframework.test.context.web.WebAppConfiguration
2532
import org.testng.annotations.Test
2633

2734
import static org.testng.Assert.assertEquals
35+
import static org.testng.Assert.assertNotNull
36+
import static org.testng.Assert.assertTrue
2837

2938
/**
3039
* @since 1.0.RC5.2
3140
*/
3241
@SpringBootTest(classes = [StormpathWebSecurityAutoConfigurationTestApplication.class, TwoAppTenantStormpathTestConfiguration.class])
3342
@WebAppConfiguration
43+
@TestPropertySource(locations = "classpath:it.application.properties")
3444
class StormpathWebSecurityAutoConfigurationIT extends AbstractTestNGSpringContextTests {
3545

3646
@Autowired
3747
CsrfTokenManager csrfTokenManager
3848

49+
@Autowired
50+
@Qualifier("stormpathLoginController")
51+
Controller login
52+
53+
@Autowired
54+
@Qualifier("stormpathRegisterController")
55+
Controller register
56+
57+
@Autowired
58+
@Qualifier("stormpathIdSiteResultController")
59+
Controller idSiteResultController
60+
61+
@Value("#{ @environment['stormpath.web.idSite.enabled'] ?: false }")
62+
protected boolean idSiteEnabled;
63+
3964
@Test
4065
void testCsrfTokenManager() {
4166
assertEquals csrfTokenManager.tokenName, 'csrfToken'
4267
}
68+
69+
//asserts https://github.com/stormpath/stormpath-sdk-java/issues/1242
70+
@Test
71+
void assertPrePostHandlersArePresentWhenIDSiteIsEnabled() {
72+
assertTrue idSiteEnabled
73+
assertTrue(register.preRegisterHandler instanceof StormpathWebSecurityAutoConfigurationTestApplication.CustomRegisterPreHandler)
74+
assertTrue(idSiteResultController.postRegisterHandler instanceof StormpathWebSecurityAutoConfigurationTestApplication.CustomRegisterPostHandler)
75+
assertTrue(login.preLoginHandler instanceof StormpathWebSecurityAutoConfigurationTestApplication.CustomLoginPreHandler)
76+
assertTrue(idSiteResultController.postLoginHandler instanceof StormpathWebSecurityAutoConfigurationTestApplication.CustomLoginPostHandler)
77+
}
4378
}

0 commit comments

Comments
 (0)