1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.directory.ldap.client.template;
21
22
23 import org.apache.directory.api.ldap.codec.api.LdapApiService;
24 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicy;
25 import org.apache.directory.api.ldap.extras.controls.ppolicy_impl.PasswordPolicyDecorator;
26 import org.apache.directory.api.ldap.model.exception.LdapException;
27 import org.apache.directory.api.ldap.model.message.Control;
28 import org.apache.directory.api.ldap.model.message.Response;
29 import org.apache.directory.api.ldap.model.message.ResultCodeEnum;
30 import org.apache.directory.api.ldap.model.message.ResultResponse;
31 import org.apache.directory.ldap.client.template.exception.PasswordException;
32
33
34
35
36
37
38
39
40
41
42
43 abstract public class AbstractPasswordPolicyResponder implements PasswordPolicyResponder
44 {
45 private final PasswordPolicyDecorator passwordPolicyRequestControl;
46
47
48 protected AbstractPasswordPolicyResponder( LdapApiService ldapApiService )
49 {
50 this.passwordPolicyRequestControl = new PasswordPolicyDecorator(
51 ldapApiService );
52 }
53
54
55
56
57
58
59
60
61
62
63 protected PasswordException exception( LdapException e )
64 {
65 return new PasswordException().setLdapException( e );
66 }
67
68
69
70
71
72
73
74
75
76
77
78 protected PasswordException fail( ResultResponse resultResponse,
79 PasswordPolicy passwordPolicy, ResultCodeEnum resultCode )
80 {
81 PasswordException exception = new PasswordException();
82 exception.setResultCode( resultCode );
83 if ( passwordPolicy != null
84 && passwordPolicy.getResponse() != null
85 && passwordPolicy.getResponse().getPasswordPolicyError() != null )
86 {
87 exception.setPasswordPolicyError( passwordPolicy.getResponse().getPasswordPolicyError() );
88 }
89 return exception;
90 }
91
92
93 private PasswordPolicy getPasswordPolicy( Response response )
94 {
95 Control control = response.getControls().get( passwordPolicyRequestControl.getOid() );
96 return control == null
97 ? null
98 : ( ( PasswordPolicyDecorator ) control ).getDecorated();
99 }
100
101
102 @Override
103 final public PasswordWarning process( PasswordPolicyOperation operation )
104 throws PasswordException
105 {
106 try
107 {
108 ResultResponse response = operation.process();
109 PasswordPolicy passwordPolicy = getPasswordPolicy( response );
110 ResultCodeEnum resultCode = response.getLdapResult().getResultCode();
111 if ( resultCode == ResultCodeEnum.SUCCESS )
112 {
113 return success( passwordPolicy );
114 }
115 else
116 {
117 throw fail( response, passwordPolicy, resultCode );
118 }
119 }
120 catch ( LdapException e )
121 {
122 throw new PasswordException().setLdapException( e );
123 }
124 }
125
126
127
128
129
130
131
132
133 protected PasswordWarning success( PasswordPolicy passwordPolicy )
134 {
135 return passwordPolicy == null
136 ? null
137 : PasswordWarningImpl.newWarning( passwordPolicy );
138 }
139 }