25
25
import com .novell .ldapchai .ChaiPasswordPolicy ;
26
26
import com .novell .ldapchai .ChaiPasswordRule ;
27
27
import com .novell .ldapchai .util .StringHelper ;
28
+ import lombok .Builder ;
29
+ import lombok .Value ;
28
30
import password .pwm .config .option .ADPolicyComplexity ;
29
31
import password .pwm .config .value .data .UserPermission ;
30
32
import password .pwm .health .HealthMessage ;
31
33
import password .pwm .health .HealthRecord ;
34
+ import password .pwm .util .java .JavaHelper ;
32
35
import password .pwm .util .java .JsonUtil ;
33
36
import password .pwm .util .java .StringUtil ;
34
37
import password .pwm .util .logging .PwmLogger ;
44
47
import java .util .Locale ;
45
48
import java .util .Map ;
46
49
import java .util .Set ;
50
+ import java .util .TreeSet ;
47
51
import java .util .regex .Pattern ;
48
52
49
53
@@ -65,12 +69,26 @@ public class PwmPasswordPolicy implements Profile, Serializable
65
69
private List <UserPermission > userPermissions ;
66
70
private String ruleText ;
67
71
72
+ public static PwmPasswordPolicy createPwmPasswordPolicy ( final Map <String , String > policyMap )
73
+ {
74
+ return createPwmPasswordPolicy ( policyMap , null );
75
+ }
76
+
68
77
public static PwmPasswordPolicy createPwmPasswordPolicy (
69
78
final Map <String , String > policyMap ,
70
79
final ChaiPasswordPolicy chaiPasswordPolicy
71
80
)
72
81
{
73
- return new PwmPasswordPolicy ( policyMap , chaiPasswordPolicy );
82
+ return new PwmPasswordPolicy ( policyMap , chaiPasswordPolicy , null );
83
+ }
84
+
85
+ public static PwmPasswordPolicy createPwmPasswordPolicy (
86
+ final Map <String , String > policyMap ,
87
+ final ChaiPasswordPolicy chaiPasswordPolicy ,
88
+ final PolicyMetaData policyMetaData
89
+ )
90
+ {
91
+ return new PwmPasswordPolicy ( policyMap , chaiPasswordPolicy , policyMetaData );
74
92
}
75
93
76
94
public String getIdentifier ( )
@@ -110,7 +128,8 @@ public static PwmPasswordPolicy defaultPolicy( )
110
128
111
129
private PwmPasswordPolicy (
112
130
final Map <String , String > policyMap ,
113
- final ChaiPasswordPolicy chaiPasswordPolicy
131
+ final ChaiPasswordPolicy chaiPasswordPolicy ,
132
+ final PolicyMetaData policyMetaData
114
133
)
115
134
{
116
135
if ( policyMap != null )
@@ -129,6 +148,12 @@ else if ( Boolean.parseBoolean( chaiPasswordPolicy.getValue( ChaiPasswordRule.AD
129
148
}
130
149
}
131
150
this .chaiPasswordPolicy = chaiPasswordPolicy ;
151
+ if ( policyMetaData != null )
152
+ {
153
+ this .ruleText = policyMetaData .getRuleText ();
154
+ this .userPermissions = policyMetaData .getUserPermissions ();
155
+ this .profileID = policyMetaData .getProfileID ();
156
+ }
132
157
}
133
158
134
159
@ Override
@@ -152,31 +177,18 @@ public String getValue( final PwmPasswordRule rule )
152
177
return policyMap .get ( rule .getKey () );
153
178
}
154
179
155
- public void setProfileID ( final String profileID )
156
- {
157
- this .profileID = profileID ;
158
- }
180
+
159
181
160
182
public List <UserPermission > getUserPermissions ( )
161
183
{
162
184
return userPermissions ;
163
185
}
164
186
165
- public void setUserPermissions ( final List <UserPermission > userPermissions )
166
- {
167
- this .userPermissions = userPermissions ;
168
- }
169
-
170
187
public String getRuleText ( )
171
188
{
172
189
return ruleText ;
173
190
}
174
191
175
- public void setRuleText ( final String ruleText )
176
- {
177
- this .ruleText = ruleText ;
178
- }
179
-
180
192
public PwmPasswordPolicy merge ( final PwmPasswordPolicy otherPolicy )
181
193
{
182
194
if ( otherPolicy == null )
@@ -230,6 +242,10 @@ public PwmPasswordPolicy merge( final PwmPasswordPolicy otherPolicy )
230
242
newPasswordPolicies .put ( ruleKey , mergeMin ( minimumLifetimeLocalValue , minimumLifetimeOtherValue ) );
231
243
break ;
232
244
245
+ case ADComplexityLevel :
246
+ newPasswordPolicies .put ( ruleKey , mergeADComplexityLevel ( policyMap .get ( ruleKey ), otherPolicy .policyMap .get ( ruleKey ) ) );
247
+ break ;
248
+
233
249
default :
234
250
final String localValueString = StringUtil .defaultString ( policyMap .get ( ruleKey ), rule .getDefaultValue () );
235
251
final String otherValueString = StringUtil .defaultString ( otherPolicy .policyMap .get ( ruleKey ), rule .getDefaultValue () );
@@ -269,10 +285,18 @@ public PwmPasswordPolicy merge( final PwmPasswordPolicy otherPolicy )
269
285
final ChaiPasswordPolicy backingPolicy = this .chaiPasswordPolicy != null ? chaiPasswordPolicy : otherPolicy .chaiPasswordPolicy ;
270
286
final PwmPasswordPolicy returnPolicy = createPwmPasswordPolicy ( newPasswordPolicies , backingPolicy );
271
287
final String newRuleText = ( ruleText != null && !ruleText .isEmpty () ) ? ruleText : otherPolicy .ruleText ;
272
- returnPolicy .setRuleText ( newRuleText );
288
+ returnPolicy .ruleText = ( newRuleText );
273
289
return returnPolicy ;
274
290
}
275
291
292
+ private static String mergeADComplexityLevel ( final String value1 , final String value2 )
293
+ {
294
+ final TreeSet <ADPolicyComplexity > seenValues = new TreeSet <>();
295
+ seenValues .add ( JavaHelper .readEnumFromString ( ADPolicyComplexity .class , ADPolicyComplexity .NONE , value1 ) );
296
+ seenValues .add ( JavaHelper .readEnumFromString ( ADPolicyComplexity .class , ADPolicyComplexity .NONE , value2 ) );
297
+ return seenValues .last ().name ();
298
+ }
299
+
276
300
protected static String mergeMin ( final String value1 , final String value2 )
277
301
{
278
302
final int iValue1 = StringHelper .convertStrToInt ( value1 , 0 );
@@ -304,11 +328,6 @@ protected static String mergeMax( final String value1, final String value2 )
304
328
return returnValue ;
305
329
}
306
330
307
- public static PwmPasswordPolicy createPwmPasswordPolicy ( final Map <String , String > policyMap )
308
- {
309
- return createPwmPasswordPolicy ( policyMap , null );
310
- }
311
-
312
331
public Map <String , String > getPolicyMap ( )
313
332
{
314
333
return Collections .unmodifiableMap ( policyMap );
@@ -372,4 +391,13 @@ public List<HealthRecord> health( final Locale locale )
372
391
373
392
return Collections .unmodifiableList ( returnList );
374
393
}
394
+
395
+ @ Value
396
+ @ Builder
397
+ public static class PolicyMetaData
398
+ {
399
+ private String profileID ;
400
+ private List <UserPermission > userPermissions ;
401
+ private String ruleText ;
402
+ }
375
403
}
0 commit comments