140 lines
3.5 KiB
C#
140 lines
3.5 KiB
C#
|
/*
|
||
|
*
|
||
|
* 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
|
||
|
|
||
|
|