| /* | |
| * | |
| * Licensed to the Apache Software Foundation (ASF) under one | |
| * or more contributor license agreements. See the NOTICE file | |
| * distributed with this work for additional information | |
| * regarding copyright ownership. The ASF licenses this file | |
| * to you under the Apache License, Version 2.0 (the | |
| * "License"); you may not use this file except in compliance | |
| * with the License. You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, | |
| * software distributed under the License is distributed on an | |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | |
| * KIND, either express or implied. See the License for the | |
| * specific language governing permissions and limitations | |
| * under the License. | |
| * | |
| */ | |
| using System; | |
| using System.Collections; | |
| using System.Text; | |
| using Qpid.Sasl.Mechanisms; | |
| namespace Qpid.Sasl | |
| { | |
| public class DefaultClientFactory : ISaslClientFactory | |
| { | |
| private static readonly string[] SUPPORTED = new string[] { | |
| DigestSaslClient.Mechanism, | |
| CramMD5SaslClient.Mechanism, | |
| PlainSaslClient.Mechanism, | |
| AnonymousSaslClient.Mechanism, | |
| }; | |
| public string[] GetSupportedMechanisms(IDictionary props) | |
| { | |
| if ( props == null ) | |
| throw new ArgumentNullException("props"); | |
| ArrayList vetoed = new ArrayList(); | |
| if ( props.Contains(SaslProperties.PolicyNoPlainText) || | |
| props.Contains(SaslProperties.PolicyNoDictionary) || | |
| props.Contains(SaslProperties.PolicyNoActive) || | |
| props.Contains(SaslProperties.PolicyForwardSecrecy) || | |
| props.Contains(SaslProperties.PolicyPassCredentials) ) | |
| { | |
| vetoed.Add(CramMD5SaslClient.Mechanism); | |
| vetoed.Add(PlainSaslClient.Mechanism); | |
| vetoed.Add(AnonymousSaslClient.Mechanism); | |
| } | |
| if ( props.Contains(SaslProperties.PolicyNoAnonymous) ) | |
| { | |
| vetoed.Add(AnonymousSaslClient.Mechanism); | |
| } | |
| ArrayList available = new ArrayList(); | |
| foreach ( string mech in SUPPORTED ) | |
| { | |
| if ( !vetoed.Contains(mech) ) | |
| available.Add(mech); | |
| } | |
| return (string[])available.ToArray(typeof(string)); | |
| } | |
| public ISaslClient CreateClient( | |
| string[] mechanisms, string authorizationId, | |
| string protocol, string serverName, | |
| IDictionary props, ISaslCallbackHandler handler | |
| ) | |
| { | |
| foreach ( string mech in mechanisms ) | |
| { | |
| switch ( mech ) | |
| { | |
| case PlainSaslClient.Mechanism: | |
| return new PlainSaslClient(authorizationId, props, handler); | |
| case CramMD5SaslClient.Mechanism: | |
| return new CramMD5SaslClient(authorizationId, props, handler); | |
| case AnonymousSaslClient.Mechanism: | |
| return new AnonymousSaslClient(authorizationId, props, handler); | |
| case DigestSaslClient.Mechanism: | |
| return new DigestSaslClient(authorizationId, serverName, protocol, props, handler); | |
| } | |
| } | |
| // unknown mechanism | |
| return null; | |
| } | |
| } // class DefaultClientFactory | |
| } // namespace Qpid.Sasl | |