// Copyright 2005 by Omar Al Zabir. All rights are reserved.
//
// If you like this code then feel free to go ahead and use it.
// The only thing I ask is that you don't remove or alter my copyright notice.
//
// Your use of this software is entirely at your own risk. I make no claims or
// warrantees about the reliability or fitness of this code for any particular purpose.
// If you make changes or additions to this code please mark your code as being yours.
//
// website http://www.oazabir.com, email OmarAlZabir@gmail.com, msn oazabir@hotmail.com
using System;
using System.IO;
using System.Drawing;
using System.Drawing.Design;
using System.ComponentModel;
using System.Windows.Forms;
using System.Runtime.CompilerServices;
namespace RSSCommon.PropertyEditor{
/// <summary>
/// Interface for providing password encryption and decryption feature
/// </summary>
public interface IPasswordProvider
{
string Encrypt( string data );
string Decrypt( string data );
string Hash( string data );
}
/// <summary>
/// UITypeEditor for password type properties
/// </summary>
public class PasswordEditor : UITypeEditor
{
public static IPasswordProvider PasswordProvider;
public PasswordEditor()
{
}
[RefreshProperties(RefreshProperties.All)]
public override object EditValue(ITypeDescriptorContext context, IServiceProvider provider, object propertyValue)
{
if (((context == null) || (provider == null)) || (context.Instance == null))
{
return base.EditValue(provider, RuntimeHelpers.GetObjectValue(propertyValue));
}
using( PasswordEditorForm form = new PasswordEditorForm() )
{
try
{
// Decrypt the password and show on the form. Although unnecessary
form.Password = PasswordProvider.Decrypt( (string)propertyValue );
}
catch
{
//MessageBox.Show( "Cannot decrypt the password. Make sure you are not manually typing the password." );
}
if( DialogResult.OK == form.ShowDialog( Form.ActiveForm ) )
{
// Encrypt the password value and set
propertyValue = PasswordProvider.Encrypt( form.Password );
}
}
return propertyValue;
}
public override UITypeEditorEditStyle GetEditStyle(ITypeDescriptorContext context)
{
if ((context != null) && (context.Instance != null))
{
return UITypeEditorEditStyle.Modal;
}
return UITypeEditorEditStyle.None;
}
}
}
|