xref: /unit/src/java/nginx/unit/websocket/AuthenticatorFactory.java (revision 1157:7ae152bda303)
1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one or more
3  * contributor license agreements.  See the NOTICE file distributed with
4  * this work for additional information regarding copyright ownership.
5  * The ASF licenses this file to You under the Apache License, Version 2.0
6  * (the "License"); you may not use this file except in compliance with
7  * the License.  You may obtain a copy of the License at
8  *
9  *     http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */
17 package nginx.unit.websocket;
18 
19 import java.util.Iterator;
20 import java.util.ServiceLoader;
21 
22 /**
23  * Utility method to return the appropriate authenticator according to
24  * the scheme that the server uses.
25  */
26 public class AuthenticatorFactory {
27 
28     /**
29      * Return a new authenticator instance.
30      * @param authScheme The scheme used
31      * @return the authenticator
32      */
getAuthenticator(String authScheme)33     public static Authenticator getAuthenticator(String authScheme) {
34 
35         Authenticator auth = null;
36         switch (authScheme.toLowerCase()) {
37 
38         case BasicAuthenticator.schemeName:
39             auth = new BasicAuthenticator();
40             break;
41 
42         case DigestAuthenticator.schemeName:
43             auth = new DigestAuthenticator();
44             break;
45 
46         default:
47             auth = loadAuthenticators(authScheme);
48             break;
49         }
50 
51         return auth;
52 
53     }
54 
loadAuthenticators(String authScheme)55     private static Authenticator loadAuthenticators(String authScheme) {
56         ServiceLoader<Authenticator> serviceLoader = ServiceLoader.load(Authenticator.class);
57         Iterator<Authenticator> auths = serviceLoader.iterator();
58 
59         while (auths.hasNext()) {
60             Authenticator auth = auths.next();
61             if (auth.getSchemeName().equalsIgnoreCase(authScheme))
62                 return auth;
63         }
64 
65         return null;
66     }
67 
68 }
69