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.PasswordPolicyResponse;
25 import org.apache.directory.api.ldap.extras.controls.ppolicy.PasswordPolicyResponseImpl;
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 public abstract class AbstractPasswordPolicyResponder implements PasswordPolicyResponder
44 {
45 private final PasswordPolicyResponse passwordPolicyResponseControl;
46
47
48 protected AbstractPasswordPolicyResponder( LdapApiService ldapApiService )
49 {
50 this.passwordPolicyResponseControl = new PasswordPolicyResponseImpl();
51 }
52
53
54
55
56
57
58
59
60
61
62 protected PasswordException exception( LdapException e )
63 {
64 return new PasswordException().setLdapException( e );
65 }
66
67
68
69
70
71
72
73
74
75
76
77 protected PasswordException fail( ResultResponse resultResponse,
78 PasswordPolicyResponse passwordPolicyResponse, ResultCodeEnum resultCode )
79 {
80 String diagnosticMessage = "";
81
82 if ( ( resultResponse != null ) && resultResponse.getLdapResult() != null )
83 {
84 diagnosticMessage = resultResponse.getLdapResult().getDiagnosticMessage();
85 }
86
87 PasswordException exception = new PasswordException( diagnosticMessage );
88 exception.setResultCode( resultCode );
89
90 if ( passwordPolicyResponse != null
91 && passwordPolicyResponse.getPasswordPolicyError() != null )
92 {
93 exception.setPasswordPolicyError( passwordPolicyResponse.getPasswordPolicyError() );
94 }
95 return exception;
96 }
97
98
99 private PasswordPolicyResponse getPasswordPolicy( Response response )
100 {
101 Control control = response.getControls().get( passwordPolicyResponseControl.getOid() );
102
103 return control == null
104 ? null
105 : ( PasswordPolicyResponse ) control;
106 }
107
108
109
110
111
112 @Override
113 public final PasswordWarning process( PasswordPolicyOperation operation )
114 throws PasswordException
115 {
116 try
117 {
118 ResultResponse response = operation.process();
119 PasswordPolicyResponse passwordPolicyResponse = getPasswordPolicy( response );
120 ResultCodeEnum resultCode = response.getLdapResult().getResultCode();
121
122 if ( resultCode == ResultCodeEnum.SUCCESS )
123 {
124 return success( passwordPolicyResponse );
125 }
126 else
127 {
128 throw fail( response, passwordPolicyResponse, resultCode );
129 }
130 }
131 catch ( LdapException e )
132 {
133 throw new PasswordException().setLdapException( e );
134 }
135 }
136
137
138
139
140
141
142
143
144 protected PasswordWarning success( PasswordPolicyResponse passwordPolicyResponse )
145 {
146 return passwordPolicyResponse == null
147 ? null
148 : PasswordWarningImpl.newWarning( passwordPolicyResponse );
149 }
150 }