/* * * 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 { /// /// Marker interface for Sasl Callbacks /// 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