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

Commit dbc7aa5

Browse files
committed
issue-1251 adding passwordPolicy to registration page response
1 parent 4e0fbf7 commit dbc7aa5

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

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

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,16 @@
2222
import com.stormpath.sdk.cache.Cache;
2323
import com.stormpath.sdk.client.Client;
2424
import com.stormpath.sdk.directory.AccountStore;
25+
import com.stormpath.sdk.directory.AccountStoreVisitor;
2526
import com.stormpath.sdk.directory.AccountStoreVisitorAdapter;
2627
import com.stormpath.sdk.directory.Directory;
28+
import com.stormpath.sdk.directory.PasswordStrength;
29+
import com.stormpath.sdk.group.Group;
30+
import com.stormpath.sdk.impl.resource.AbstractResource;
2731
import com.stormpath.sdk.lang.Assert;
32+
import com.stormpath.sdk.lang.Strings;
2833
import com.stormpath.sdk.organization.Organization;
34+
import com.stormpath.sdk.organization.OrganizationList;
2935
import com.stormpath.sdk.servlet.account.event.impl.DefaultRegisteredAccountRequestEvent;
3036
import com.stormpath.sdk.servlet.application.ApplicationResolver;
3137
import com.stormpath.sdk.servlet.authc.impl.TransientAuthenticationResult;
@@ -42,6 +48,7 @@
4248
import javax.servlet.http.HttpServletResponse;
4349
import java.util.Arrays;
4450
import java.util.Collections;
51+
import java.util.HashMap;
4552
import java.util.LinkedHashMap;
4653
import java.util.List;
4754
import java.util.Map;
@@ -154,6 +161,7 @@ protected void appendModel(HttpServletRequest request, HttpServletResponse respo
154161
model.put("loginUri", loginUri);
155162
} else {
156163
model.put("accountStores", accountStoreModelFactory.getAccountStores(request));
164+
model.put("passwordPolicy", getPasswordPolicy(request));
157165
}
158166
}
159167

@@ -310,4 +318,98 @@ private Map<String, Object> getCustomData(HttpServletRequest request, Form form)
310318

311319
return result;
312320
}
321+
322+
private Map<String, Object> getPasswordPolicy(HttpServletRequest request) {
323+
324+
String onk = request.getParameter("organizationNameKey");
325+
326+
PasswordStrength passwordStrength;
327+
328+
if (Strings.hasText(onk)) {
329+
passwordStrength = findPasswordStrengthByOrganization(onk);
330+
} else {
331+
passwordStrength = getApplicationPasswordStrength(request);
332+
}
333+
334+
if (passwordStrength == null) {
335+
return null;
336+
}
337+
338+
return convertPasswordStrengthToMap(passwordStrength);
339+
}
340+
341+
private PasswordStrength getApplicationPasswordStrength(HttpServletRequest request) {
342+
AccountStore defaultAccountStore = getApplication(request).getDefaultAccountStore();
343+
344+
if (defaultAccountStore == null) {
345+
return null;
346+
}
347+
348+
final PasswordStrength[] passwordStrength = new PasswordStrength[1];
349+
defaultAccountStore.accept(new AccountStoreVisitor() {
350+
@Override
351+
public void visit(Group group) {
352+
passwordStrength[0] = group.getDirectory().getPasswordPolicy().getStrength();
353+
}
354+
355+
@Override
356+
public void visit(Directory directory) {
357+
passwordStrength[0] = directory.getPasswordPolicy().getStrength();
358+
}
359+
360+
@Override
361+
public void visit(Organization organization) {
362+
passwordStrength[0] = getOrganizationPasswordStrength(organization);
363+
}
364+
});
365+
366+
return passwordStrength[0];
367+
}
368+
369+
private PasswordStrength findPasswordStrengthByOrganization(String onk) {
370+
HashMap<String, Object> query = new HashMap<>();
371+
query.put("nameKey", onk);
372+
OrganizationList organizations = client.getOrganizations(query);
373+
374+
if (organizations.getSize() != 1) {
375+
return null;
376+
}
377+
378+
return getOrganizationPasswordStrength(organizations.single());
379+
}
380+
381+
private PasswordStrength getOrganizationPasswordStrength(Organization organization) {
382+
AccountStore organizationDefaultAccountStore = organization.getDefaultAccountStore();
383+
384+
if (organizationDefaultAccountStore == null) {
385+
return null;
386+
}
387+
388+
final PasswordStrength[] passwordStrength = new PasswordStrength[1];
389+
organizationDefaultAccountStore.accept(new AccountStoreVisitorAdapter() {
390+
@Override
391+
public void visit(Group group) {
392+
passwordStrength[0] = group.getDirectory().getPasswordPolicy().getStrength();
393+
}
394+
395+
@Override
396+
public void visit(Directory directory) {
397+
passwordStrength[0] = directory.getPasswordPolicy().getStrength();
398+
}
399+
});
400+
401+
return passwordStrength[0];
402+
}
403+
404+
private Map<String, Object> convertPasswordStrengthToMap(PasswordStrength passwordStrength) {
405+
AbstractResource abstractResource = (AbstractResource) passwordStrength;
406+
407+
Map<String, Object> strength = new HashMap<>();
408+
409+
for (String propertyName : abstractResource.getPropertyDescriptors().keySet()) {
410+
strength.put(propertyName, abstractResource.getProperty(propertyName));
411+
}
412+
413+
return strength;
414+
}
313415
}

0 commit comments

Comments
 (0)