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

Commit c0ebbb2

Browse files
authored
Merge pull request #1201 from stormpath/issue/1198_1.3.0
Fixed register/unverified bug
2 parents 5a04569 + 5f0db58 commit c0ebbb2

File tree

2 files changed

+56
-5
lines changed

2 files changed

+56
-5
lines changed

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

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@
1919
import com.stormpath.sdk.account.AccountStatus;
2020
import com.stormpath.sdk.application.Application;
2121
import com.stormpath.sdk.authc.AuthenticationResult;
22+
import com.stormpath.sdk.cache.Cache;
2223
import com.stormpath.sdk.client.Client;
2324
import com.stormpath.sdk.directory.AccountStore;
2425
import com.stormpath.sdk.directory.AccountStoreVisitorAdapter;
2526
import com.stormpath.sdk.directory.Directory;
26-
import com.stormpath.sdk.group.Group;
2727
import com.stormpath.sdk.lang.Assert;
2828
import com.stormpath.sdk.organization.Organization;
2929
import com.stormpath.sdk.servlet.account.event.impl.DefaultRegisteredAccountRequestEvent;
@@ -46,8 +46,6 @@
4646
import java.util.List;
4747
import java.util.Map;
4848

49-
import static com.stormpath.sdk.servlet.mvc.View.STORMPATH_JSON_VIEW_NAME;
50-
5149
/**
5250
* @since 1.0.RC4
5351
*/
@@ -277,11 +275,20 @@ public void visit(Organization organization) {
277275
return new DefaultViewModel(loginUri + "?status=created").setRedirect(true);
278276
}
279277
} else if (status == AccountStatus.UNVERIFIED) {
278+
// purge account from cache in case status is updated on the backend
279+
invalidateAccountCache(account);
280280
return new DefaultViewModel(loginUri + "?status=unverified").setRedirect(true);
281281
}
282282
return new DefaultViewModel(nextUri).setRedirect(true);
283283
}
284284

285+
// resolves https://github.com/stormpath/stormpath-sdk-java/issues/1198
286+
@SuppressWarnings("unchecked")
287+
private void invalidateAccountCache(Account account) {
288+
Cache accountCache = client.getCacheManager().getCache(Account.class.getName());
289+
accountCache.remove(account.getHref());
290+
}
291+
285292
private Map<String, Object> getCustomData(HttpServletRequest request, Form form) {
286293
//Custom fields are either declared as form fields which shouldn't not be account fields or through a customField attribute
287294
Map<String, Object> result = new LinkedHashMap<String, Object>();

extensions/servlet/src/test/groovy/com/stormpath/sdk/servlet/mvc/RegisterControllerTest.groovy

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,16 @@
1616
package com.stormpath.sdk.servlet.mvc
1717

1818
import com.stormpath.sdk.account.Account
19+
import com.stormpath.sdk.account.AccountStatus
1920
import com.stormpath.sdk.application.Application
21+
import com.stormpath.sdk.cache.Cache
22+
import com.stormpath.sdk.cache.CacheManager
2023
import com.stormpath.sdk.client.Client
2124
import com.stormpath.sdk.directory.CustomData
2225
import com.stormpath.sdk.directory.Directory
2326
import com.stormpath.sdk.group.Group
2427
import com.stormpath.sdk.impl.account.DefaultAccount
2528
import com.stormpath.sdk.impl.directory.DefaultDirectory
26-
import com.stormpath.sdk.impl.ds.InternalDataStore
2729
import com.stormpath.sdk.impl.group.DefaultGroup
2830
import com.stormpath.sdk.impl.organization.DefaultOrganization
2931
import com.stormpath.sdk.organization.Organization
@@ -47,7 +49,6 @@ import javax.servlet.http.HttpServletResponse
4749
import static org.easymock.EasyMock.anyObject
4850
import static org.easymock.EasyMock.createMock
4951
import static org.easymock.EasyMock.createNiceMock
50-
import static org.easymock.EasyMock.createStrictMock
5152
import static org.easymock.EasyMock.expect
5253
import static org.easymock.EasyMock.partialMockBuilder
5354
import static org.easymock.EasyMock.replay
@@ -133,6 +134,49 @@ public class RegisterControllerTest {
133134
assertNotNull(vm, "ViewModel should not be empty")
134135
}
135136

137+
@Test
138+
void testAccountUnverifiedRemovedFromCache() {
139+
def HREF = "a real href"
140+
def cacheManager = createMock(CacheManager)
141+
def cache = createMock(Cache)
142+
143+
RegisterController registerController = new RegisterController(
144+
client: client,
145+
preRegisterHandler: registerPreHandler,
146+
csrfTokenManager: csrfTokenManager,
147+
fieldValueResolver: requestFieldValueResolver,
148+
produces: Arrays.asList(MediaType.TEXT_HTML),
149+
eventPublisher: eventPublisher,
150+
accountStoreResolver: accountStoreResolver
151+
)
152+
153+
expect(client.instantiate(Account.class)).andReturn account
154+
expect(requestFieldValueResolver.getAllFields(request)).andReturn new HashMap<String, Object>()
155+
expect(request.getAttribute(Application.class.getName())).andReturn ((Application)application)
156+
expect(accountStoreResolver.getAccountStore(request, response)).andReturn directory
157+
expect(registerPreHandler.handle(request, response, account)).andReturn true
158+
expect(account.setGivenName("UNKNOWN")).andReturn account
159+
expect(account.setSurname("UNKNOWN")).andReturn account
160+
expect(account.getStatus()).andReturn AccountStatus.UNVERIFIED
161+
expect(account.getHref()).andReturn HREF
162+
expect(account.getCustomData()).andReturn customData
163+
expect(directory.createAccount(account)).andReturn account
164+
expect(eventPublisher.publish(anyObject()))
165+
166+
expect(request.getAttribute(UserAgents.USER_AGENT_REQUEST_ATTRIBUTE_NAME)).andReturn new DefaultUserAgent(request)
167+
expect(request.getHeader("Accept")).andReturn "text/html"
168+
169+
expect(client.getCacheManager()).andReturn cacheManager
170+
expect(cacheManager.getCache(Account.class.name)).andReturn cache
171+
expect(cache.remove(HREF)).andReturn(cache).once()
172+
173+
replay eventPublisher, registerPreHandler, request, response, client, cacheManager, cache, requestFieldValueResolver, application, account, accountStoreResolver, directory
174+
175+
def vm = registerController.onValidSubmit(request, response, form)
176+
177+
verify eventPublisher, registerPreHandler, request, response, client, cacheManager, cache, requestFieldValueResolver, application, account, accountStoreResolver, directory
178+
}
179+
136180
@Test(expectedExceptions = [IllegalStateException])
137181
void testAccountStoreResolverResolvesGroup() {
138182
RegisterController registerController = new RegisterController(

0 commit comments

Comments
 (0)