View Javadoc
1   /*
2    * #%L
3    * Authenticator.java - mongodb-async-driver - Allanbank Consulting, Inc.
4    * %%
5    * Copyright (C) 2011 - 2014 Allanbank Consulting, Inc.
6    * %%
7    * Licensed under the Apache License, Version 2.0 (the "License");
8    * you may not use this file except in compliance with the License.
9    * You may obtain a copy of the License at
10   * 
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   * 
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   * #L%
19   */
20  
21  package com.allanbank.mongodb.client.connection.auth;
22  
23  import com.allanbank.mongodb.Credential;
24  import com.allanbank.mongodb.client.connection.Connection;
25  import com.allanbank.mongodb.error.MongoDbAuthenticationException;
26  
27  /**
28   * Authenticator provides the common interface for all MongoDB authenticators.
29   * <p>
30   * A single Authenticator instance will only ever be used with a single
31   * Connection and set of credentials. The "clone()" method is used to quickly
32   * allocate a new instance for a connection allowing for shared
33   * "preauthentication" work to be done.
34   * </p>
35   * <p>
36   * The {@link #startAuthentication(Credential, Connection)} method may assume
37   * that it is only invoked from a single thread. The "result" method should not
38   * make the same assumption.
39   * </p>
40   * 
41   * @copyright 2013, Allanbank Consulting, Inc., All Rights Reserved
42   */
43  public interface Authenticator extends Cloneable {
44  
45      /**
46       * Provides the ability to clone the authenticator. A new
47       * {@link Authenticator} instance is created for each physical connection in
48       * use.
49       * <p>
50       * Using clone allows users to create a "template" version of the
51       * authenticator that is then copied prior to use by each connection.
52       * </p>
53       * 
54       * @return The cloned authenticator.
55       */
56      public Authenticator clone();
57  
58      /**
59       * Returns the results of the authentication attempt.
60       * 
61       * @return True if the user is successfully authenticated on the connection,
62       *         false if the authentication fails.
63       * @throws MongoDbAuthenticationException
64       *             On a failure in the protocol to authenticate the user on the
65       *             connection.
66       */
67      public boolean result() throws MongoDbAuthenticationException;
68  
69      /**
70       * Starts to authenticate the user with the specified credentials.
71       * 
72       * @param credentials
73       *            The credentials to use to login to the database.
74       * @param connection
75       *            The connection to authenticate the user with.
76       * @throws MongoDbAuthenticationException
77       *             On a failure in the protocol to authenticate the user on the
78       *             connection.
79       */
80      public void startAuthentication(Credential credentials,
81              Connection connection) throws MongoDbAuthenticationException;
82  }