2222import com .stormpath .sdk .cache .Cache ;
2323import com .stormpath .sdk .client .Client ;
2424import com .stormpath .sdk .directory .AccountStore ;
25- import com .stormpath .sdk .directory .AccountStoreVisitor ;
2625import com .stormpath .sdk .directory .AccountStoreVisitorAdapter ;
2726import 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 ;
3127import com .stormpath .sdk .lang .Assert ;
32- import com .stormpath .sdk .lang .Strings ;
3328import com .stormpath .sdk .organization .Organization ;
34- import com .stormpath .sdk .organization .OrganizationList ;
3529import com .stormpath .sdk .servlet .account .event .impl .DefaultRegisteredAccountRequestEvent ;
3630import com .stormpath .sdk .servlet .application .ApplicationResolver ;
3731import com .stormpath .sdk .servlet .authc .impl .TransientAuthenticationResult ;
4034import com .stormpath .sdk .servlet .http .Saver ;
4135import com .stormpath .sdk .servlet .http .authc .AccountStoreResolver ;
4236import com .stormpath .sdk .servlet .mvc .provider .AccountStoreModelFactory ;
37+ import com .stormpath .sdk .servlet .mvc .provider .DefaultPasswordStrengthModelFactory ;
4338import com .stormpath .sdk .servlet .mvc .provider .ExternalAccountStoreModelFactory ;
39+ import com .stormpath .sdk .servlet .mvc .provider .PasswordStrengthModelFactory ;
4440import org .slf4j .Logger ;
4541import org .slf4j .LoggerFactory ;
4642
4743import javax .servlet .http .HttpServletRequest ;
4844import javax .servlet .http .HttpServletResponse ;
4945import java .util .Arrays ;
5046import java .util .Collections ;
51- import java .util .HashMap ;
5247import java .util .LinkedHashMap ;
5348import java .util .List ;
5449import java .util .Map ;
@@ -70,6 +65,7 @@ public class RegisterController extends FormController {
7065 private Saver <AuthenticationResult > authenticationResultSaver ;
7166 private AccountModelFactory accountModelFactory ;
7267 private AccountStoreModelFactory accountStoreModelFactory ;
68+ private PasswordStrengthModelFactory passwordStrengthModelFactory ;
7369 private ErrorModelFactory errorModelFactory ;
7470 private WebHandler preRegisterHandler ;
7571 private WebHandler postRegisterHandler ;
@@ -103,6 +99,10 @@ public void setAccountStoreModelFactory(AccountStoreModelFactory accountStoreMod
10399 this .accountStoreModelFactory = accountStoreModelFactory ;
104100 }
105101
102+ public void setPasswordStrengthModelFactory (PasswordStrengthModelFactory passwordStrengthModelFactory ) {
103+ this .passwordStrengthModelFactory = passwordStrengthModelFactory ;
104+ }
105+
106106 public void setErrorModelFactory (ErrorModelFactory errorModelFactory ) {
107107 this .errorModelFactory = errorModelFactory ;
108108 }
@@ -133,6 +133,9 @@ public void init() throws Exception {
133133 if (this .accountStoreModelFactory == null ) {
134134 this .accountStoreModelFactory = new ExternalAccountStoreModelFactory ();
135135 }
136+ if (this .passwordStrengthModelFactory == null ) {
137+ this .passwordStrengthModelFactory = new DefaultPasswordStrengthModelFactory ();
138+ }
136139 if (this .errorModelFactory == null ) {
137140 this .errorModelFactory = new RegisterErrorModelFactory (this .messageSource );
138141 }
@@ -145,6 +148,7 @@ public void init() throws Exception {
145148 Assert .notNull (this .postRegisterHandler , "postRegisterHandler cannot be null." );
146149 Assert .notNull (this .accountModelFactory , "accountModelFactory cannot be null." );
147150 Assert .notNull (this .accountStoreModelFactory , "accountStoreModelFactory cannot be null." );
151+ Assert .notNull (this .passwordStrengthModelFactory , "passwordStrengthModelFactory cannot be null." );
148152 Assert .notNull (this .errorModelFactory , "errorModelFactory cannot be null." );
149153 Assert .notNull (this .accountStoreResolver , "accountStoreResolver cannot be null." );
150154 }
@@ -161,7 +165,7 @@ protected void appendModel(HttpServletRequest request, HttpServletResponse respo
161165 model .put ("loginUri" , loginUri );
162166 } else {
163167 model .put ("accountStores" , accountStoreModelFactory .getAccountStores (request ));
164- model .put ("passwordPolicy" , getPasswordPolicy (request ));
168+ model .put ("passwordPolicy" , passwordStrengthModelFactory . getPasswordPolicy (request ));
165169 }
166170 }
167171
@@ -319,97 +323,5 @@ private Map<String, Object> getCustomData(HttpServletRequest request, Form form)
319323 return result ;
320324 }
321325
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 );
373326
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- }
415327}
0 commit comments