1d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen/*
2d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Copyright 2009 Rene Treffer
3d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
4d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Licensed under the Apache License, Version 2.0 (the "License");
5d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * you may not use this file except in compliance with the License.
6d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * You may obtain a copy of the License at
7d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
8d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *     http://www.apache.org/licenses/LICENSE-2.0
9d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
10d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * Unless required by applicable law or agreed to in writing, software
11d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * distributed under the License is distributed on an "AS IS" BASIS,
12d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * See the License for the specific language governing permissions and
14d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen * limitations under the License.
15d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen *
16d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen */
17d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpackage de.measite.smack;
18d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
19d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Enumeration;
20d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Hashtable;
21d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport java.util.Map;
22d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
23d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.auth.callback.CallbackHandler;
24d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslClient;
25d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslException;
26d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslServer;
27d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenimport org.apache.harmony.javax.security.sasl.SaslServerFactory;
28d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
29d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chenpublic class Sasl {
30d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
31d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    // SaslClientFactory service name
32d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private static final String CLIENTFACTORYSRV = "SaslClientFactory"; //$NON-NLS-1$
33d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
34d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    // SaslServerFactory service name
35d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    private static final String SERVERFACTORYSRV = "SaslServerFactory"; //$NON-NLS-1$
36d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
37d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_NOPLAINTEXT = "javax.security.sasl.policy.noplaintext"; //$NON-NLS-1$
38d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
39d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_NOACTIVE = "javax.security.sasl.policy.noactive"; //$NON-NLS-1$
40d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
41d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_NODICTIONARY = "javax.security.sasl.policy.nodictionary"; //$NON-NLS-1$
42d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
43d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_NOANONYMOUS = "javax.security.sasl.policy.noanonymous"; //$NON-NLS-1$
44d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
45d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_FORWARD_SECRECY = "javax.security.sasl.policy.forward"; //$NON-NLS-1$
46d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
47d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String POLICY_PASS_CREDENTIALS = "javax.security.sasl.policy.credentials"; //$NON-NLS-1$
48d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
49d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String MAX_BUFFER = "javax.security.sasl.maxbuffer"; //$NON-NLS-1$
50d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
51d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String RAW_SEND_SIZE = "javax.security.sasl.rawsendsize"; //$NON-NLS-1$
52d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
53d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String REUSE = "javax.security.sasl.reuse"; //$NON-NLS-1$
54d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
55d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String QOP = "javax.security.sasl.qop"; //$NON-NLS-1$
56d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
57d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String STRENGTH = "javax.security.sasl.strength"; //$NON-NLS-1$
58d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
59d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static final String SERVER_AUTH = "javax.security.sasl.server.authentication"; //$NON-NLS-1$
60d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
61d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static Enumeration<SaslClientFactory> getSaslClientFactories() {
62d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        Hashtable<SaslClientFactory,Object> factories = new Hashtable<SaslClientFactory,Object>();
63d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        factories.put(new SaslClientFactory(), new Object());
64d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return factories.keys();
65d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
66d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
67d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static Enumeration<SaslServerFactory> getSaslServerFactories() {
68d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return org.apache.harmony.javax.security.sasl.Sasl.getSaslServerFactories();
69d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
70d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
71d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static SaslServer createSaslServer(String mechanism, String protocol,
72d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            String serverName, Map<String, ?> prop, CallbackHandler cbh) throws SaslException {
73d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return org.apache.harmony.javax.security.sasl.Sasl.createSaslServer(mechanism, protocol, serverName, prop, cbh);
74d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
75d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
76d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    public static SaslClient createSaslClient(String[] mechanisms, String authanticationID,
77d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            String protocol, String serverName, Map<String, ?> prop, CallbackHandler cbh)
78d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throws SaslException {
79d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (mechanisms == null) {
80d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            throw new NullPointerException("auth.33"); //$NON-NLS-1$
81d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
82d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        SaslClientFactory fact = getSaslClientFactories().nextElement();
83d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        String[] mech = fact.getMechanismNames(null);
84d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        boolean is = false;
85d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (mech != null) {
86d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            for (int j = 0; j < mech.length; j++) {
87d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                for (int n = 0; n < mechanisms.length; n++) {
88d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                    if (mech[j].equals(mechanisms[n])) {
89d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                        is = true;
90d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                        break;
91d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                    }
92d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                }
93d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            }
94d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
95d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        if (is) {
96d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            return fact.createSaslClient(
97d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                mechanisms,
98d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                authanticationID,
99d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                protocol,
100d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                serverName,
101d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                prop,
102d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen                cbh
103d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen            );
104d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        }
105d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen        return null;
106d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen    }
107d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen
108d7955ce24d294fb2014c59d11fca184471056f44Shuyi Chen}
109