diff options
Diffstat (limited to 'qpid/dotnet/Qpid.Sasl/Callbacks.cs')
-rw-r--r-- | qpid/dotnet/Qpid.Sasl/Callbacks.cs | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/qpid/dotnet/Qpid.Sasl/Callbacks.cs b/qpid/dotnet/Qpid.Sasl/Callbacks.cs new file mode 100644 index 0000000000..f4fcc1c54b --- /dev/null +++ b/qpid/dotnet/Qpid.Sasl/Callbacks.cs @@ -0,0 +1,139 @@ +/* + * + * 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.Text; +using System.Globalization; +using System.Security.Cryptography; + +namespace Apache.Qpid.Sasl +{ + /// <summary> + /// Marker interface for Sasl Callbacks + /// </summary> + public interface ISaslCallback + { + } // interface ISaslCallback + + public abstract class TextSaslCallback : ISaslCallback + { + private string _prompt; + private string _text; + private string _defaultText; + + public string Prompt + { + get { return _prompt; } + set { _prompt = value; } + } + + public string Text + { + get { + if ( _text == null || _text.Length == 0 ) + return DefaultText; + else + return _text; + } + set { _text = value; } + } + + public string DefaultText + { + get { return _defaultText; } + set { _defaultText = value; } + } + + protected TextSaslCallback(string prompt, string text, string defaultText) + { + _prompt = prompt; + _text = text; + _defaultText = defaultText; + } + + } // class TextSaslCallback + + public class NameCallback : TextSaslCallback + { + public NameCallback() + : this(Environment.UserName) + { + } + public NameCallback(string defaultText) + : base("username:", "", defaultText) + { + } + } // class NameCallback + + public class PasswordCallback : TextSaslCallback + { + public PasswordCallback() + : base("password:", "", "") + { + } + + public byte[] HashedText + { + get + { + string _text = this.Text; + System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); + byte[] bs = x.ComputeHash(Encoding.UTF8.GetBytes(_text)); + return bs; + } + + } + } // class PasswordCallback + + public class HashedPasswordCallback : TextSaslCallback + { + public HashedPasswordCallback() + : base("password:", "", "") + { + } + + public byte[] HashedText + { + get { + string _text = this.Text; + System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); + _text = _text.PadRight(16, '\0'); + byte[] bs = x.ComputeHash(Encoding.UTF8.GetBytes(_text)); + return bs; + } + } + } // class PasswordCallback + + public class RealmCallback : TextSaslCallback + { + public RealmCallback() + : this("localhost") + { + } + public RealmCallback(string defaultText) + : base("realm:", "", defaultText) + { + } + } // class RealmCallback + +} // namespace Apache.Qpid.Sasl + + |