View Javadoc
1   /*
2    *   Licensed to the Apache Software Foundation (ASF) under one
3    *   or more contributor license agreements.  See the NOTICE file
4    *   distributed with this work for additional information
5    *   regarding copyright ownership.  The ASF licenses this file
6    *   to you under the Apache License, Version 2.0 (the
7    *   "License"); you may not use this file except in compliance
8    *   with the License.  You may obtain a copy of the License at
9    *
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   *
12   *   Unless required by applicable law or agreed to in writing,
13   *   software distributed under the License is distributed on an
14   *   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   *   KIND, either express or implied.  See the License for the
16   *   specific language governing permissions and limitations
17   *   under the License.
18   *
19   */
20  
21  package org.apache.directory.ldap.client.api;
22  
23  
24  import java.util.ArrayList;
25  import java.util.Arrays;
26  import java.util.List;
27  
28  import org.apache.directory.api.ldap.model.constants.SaslQoP;
29  import org.apache.directory.api.ldap.model.constants.SaslSecurityStrength;
30  import org.apache.directory.api.ldap.model.message.Control;
31  import org.apache.directory.api.util.Strings;
32  
33  
34  /**
35   * Holds the data required to complete the SASL operation
36   * 
37   * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
38   */
39  public abstract class SaslRequest
40  {
41      /** The mechanism used to decode user identity */
42      protected String saslMechanism;
43  
44      /** The list of controls */
45      protected List<Control> controls = new ArrayList<>();
46  
47      /** The username */
48      protected String username;
49  
50      /** The credentials */
51      protected byte[] credentials;
52  
53      /** The realm name on the server */
54      protected String realmName;
55  
56      /** The authorization ID of the entity */
57      protected String authorizationId;
58  
59      /** The quality of protection */
60      protected SaslQoP qualityOfProtection;
61  
62      /** The security strength */
63      protected SaslSecurityStrength securityStrength;
64  
65      /** Require mutual authentication */
66      protected boolean mutualAuthentication = false;
67  
68  
69      /**
70       * Creates a new instance of SaslRequest.
71       *
72       * @param saslMechanism
73       *      the SASL mechanism
74       */
75      protected SaslRequest( String saslMechanism )
76      {
77          this.saslMechanism = saslMechanism;
78      }
79  
80  
81      /**
82       * Adds the given controls.
83       *
84       * @param controls the controls
85       */
86      public void addAllControls( Control[] controls )
87      {
88          this.controls.addAll( Arrays.asList( controls ) );
89      }
90  
91  
92      /**
93       * Adds the given control.
94       *
95       * @param control the control
96       */
97      public void addControl( Control control )
98      {
99          this.controls.add( control );
100     }
101 
102 
103     /**
104      * Gets the authorization ID.
105      *
106      * @return the authorization ID
107      */
108     public String getAuthorizationId()
109     {
110         return authorizationId;
111     }
112 
113 
114     /**
115      * Gets the controls.
116      *
117      * @return the controls
118      */
119     public Control[] getControls()
120     {
121         return controls.toArray( new Control[0] );
122     }
123 
124 
125     /**
126      * Gets the crendentials
127      *
128      * @return the credentials
129      */
130     public byte[] getCredentials()
131     {
132         if ( credentials != null )
133         {
134             return credentials;
135         }
136         else
137         {
138             return Strings.EMPTY_BYTES;
139         }
140     }
141 
142 
143     /**
144      * Gets the quality of protection.
145      *
146      * @return the quality of protection
147      */
148     public SaslQoP getQualityOfProtection()
149     {
150         return qualityOfProtection;
151     }
152 
153 
154     /**
155      * Gets realm name.
156      *
157      * @return the realm name
158      */
159     public String getRealmName()
160     {
161         return realmName;
162     }
163 
164 
165     /**
166      * Gets the SASL mechanism.
167      *
168      * @return the SASL mechanism
169      */
170     public String getSaslMechanism()
171     {
172         return saslMechanism;
173     }
174 
175 
176     /**
177      * Gets the security strength.
178      *
179      * @return the security strength
180      */
181     public SaslSecurityStrength getSecurityStrength()
182     {
183         return securityStrength;
184     }
185 
186 
187     /**
188      * Gets the username.
189      *
190      * @return the username
191      */
192     public String getUsername()
193     {
194         return username;
195     }
196 
197 
198     /**
199      * Indicates if mutual authentication is required.
200      *
201      * @return the flag indicating if mutual authentication is required
202      */
203     public boolean isMutualAuthentication()
204     {
205         return mutualAuthentication;
206     }
207 
208 
209     /**
210      * Sets the Authorization ID
211      *
212      * @param authorizationId The authorization ID
213      */
214     public void setAuthorizationId( String authorizationId )
215     {
216         this.authorizationId = authorizationId;
217     }
218 
219 
220     /**
221      * Sets the credentials.
222      *
223      * @param credentials the credentials
224      */
225     public void setCredentials( byte[] credentials )
226     {
227         this.credentials = credentials;
228     }
229 
230 
231     /**
232      * Sets the credentials.
233      *
234      * @param credentials the credentials
235      */
236     public void setCredentials( String credentials )
237     {
238         this.credentials = Strings.getBytesUtf8( credentials );
239     }
240 
241 
242     /**
243      * Sets the flag indicating if mutual authentication is required.
244      *
245      * @param mutualAuthentication the flag indicating if mutual authentication is required
246      */
247     public void setMutualAuthentication( boolean mutualAuthentication )
248     {
249         this.mutualAuthentication = mutualAuthentication;
250     }
251 
252 
253     /**
254      * Sets the quality of protection.
255      *
256      * @param qualityOfProtection the quality of protection
257      */
258     public void setQualityOfProtection( SaslQoP qualityOfProtection )
259     {
260         this.qualityOfProtection = qualityOfProtection;
261     }
262 
263 
264     /**
265      * Sets the realm name.
266      * 
267      * @param realmName The realm name
268      */
269     protected void setRealmName( String realmName )
270     {
271         this.realmName = realmName;
272     }
273 
274 
275     /**
276      * Sets the SASL mechanism
277      *
278      * @param saslMechanism the SASL mechanism
279      */
280     protected void setSaslMechanism( String saslMechanism )
281     {
282         this.saslMechanism = saslMechanism;
283     }
284 
285 
286     /**
287      * Sets the security strength.
288      *
289      * @param securityStrength the security strength
290      */
291     public void setSecurityStrength( SaslSecurityStrength securityStrength )
292     {
293         this.securityStrength = securityStrength;
294     }
295 
296 
297     /**
298      * Sets the username.
299      *
300      * @param username the username
301      */
302     public void setUsername( String username )
303     {
304         this.username = username;
305     }
306 }