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