///#################################################################
/// PROJECT : CASA - Common Authentication Services Adapter
/// FILE : KdeWallet.cs
/// DESCRIPTION : GUI implementation of KDE-Wallet store.
/// AUTHORS : CSL.Manojna
/// UPDATED ON : 26 Sept, 05
///#################################################################
namespace Novell.CASA.GUI {
using System;
using Gtk;
using Glade;
using Novell.CASA.MiCasa.Common;
using Novell.CASA.MiCasa.Communication;
public class KdeWallet : Store
{
Gtk.TreeStore tsSecretIDKdeWallet,
tsNativeInfoKdeWallet,
tsKeyValue;
CellRendererText cellEditable;
public bool IS_STORE_AGGREGATED = false;
#region Glade Widgets
[Glade.Widget]
public Gtk.TreeView tvSecretIDKdeWallet;
[Glade.Widget]
Gtk.TreeView tvKeyValue,
tvNativeInfoKdeWallet;
[Glade.Widget]
Gtk.Dialog dialogManageSecret,
dialogLogin;
[Glade.Widget]
Gtk.Menu menuRightClick;
[Glade.Widget]
Gtk.Entry entrySecretID,
entryKey,
entryValue,
entryMasterPassword3,
entryMasterPassword4;
[Glade.Widget]
Gtk.CheckButton cbuttonShowPassword;
[Glade.Widget]
Gtk.Label label86,
label88;
[Glade.Widget]
Gtk.Button buttonNewAdd,
buttonNewRemove,
buttonManageOk;
[Glade.Widget]
Gtk.MenuItem cmiNewSecret,
cmiNewKey,
cmiDelete,
cmiView,
cmiLink,
cmiCopy;
#endregion
///#######################################################################
/// CONSTRUCTOR
///
///
///
public KdeWallet()
{
Logger.DbgLog("GUI:KdeWallet.KdeWallet() - BEGIN");
/// SecretID TreeStore
tvSecretIDKdeWallet = (Gtk.TreeView)CasaMain.gxml.GetWidget("tvSecretIDKdeWallet");
tsSecretIDKdeWallet = new TreeStore(typeof(string), typeof(string[]), typeof(string[]), typeof(string), typeof(string[]), typeof(string[]));
tvSecretIDKdeWallet.AppendColumn("Secret-ID",new CellRendererText(),"text",0);
tvSecretIDKdeWallet.Model = tsSecretIDKdeWallet;
tvSecretIDKdeWallet.RowActivated += new RowActivatedHandler(OntvSecretIDKdeWalletRowActivated);
tvSecretIDKdeWallet.ButtonReleaseEvent += new ButtonReleaseEventHandler(OnRightClicked);
tvSecretIDKdeWallet.CursorChanged += new EventHandler(OnCursorChanged);
/// NativeInfo TreeStore
tvNativeInfoKdeWallet = (Gtk.TreeView)CasaMain.gxml.GetWidget("tvNativeInfoKdeWallet");
tsNativeInfoKdeWallet = new TreeStore(typeof(string), typeof(string));
tvNativeInfoKdeWallet.AppendColumn("NativeKey",new CellRendererText(),"text",0);
tvNativeInfoKdeWallet.AppendColumn("NativeValue",new CellRendererText(),"text",1);
tvNativeInfoKdeWallet.Model = tsNativeInfoKdeWallet;
tvNativeInfoKdeWallet.ModifyBase(StateType.Normal,new Gdk.Color(0xff,0xff,0xe6));
/// Aggregate the store
//AggregateStore();
Logger.DbgLog("GUI:KdeWallet.KdeWallet() - END");
}
///#######################################################################
/// AGGREGATE STORE
///
///
///
public override void AggregateStore()
{
Logger.DbgLog("GUI:KdeWallet.AggregateStore() - BEGIN");
try
{
tsSecretIDKdeWallet.Clear();
tsNativeInfoKdeWallet.Clear();
StoreDataInterface.AggregateStore(Common.STORE_KDEWALLET);
StoreDataInterface.ReadStore(Common.STORE_KDEWALLET,ref tsSecretIDKdeWallet);
}
catch(Exception exp)
{
Logger.DbgLog("GUI:KdeWallet.AggregateStore() - EXCEPTION" + exp.ToString());
}
Logger.DbgLog("GUI:KdeWallet.AggregateStore() - END");
}
///#######################################################################
/// DISPLAY NATIVE INFO
///
///
///
private void OnCursorChanged(object obj, EventArgs args)
{
Logger.DbgLog("GUI:KdeWallet.OnCursorChanged() - BEGIN");
TreeModel model;
TreeIter iter;
string selected = null;
string[] NativeKeys = null,
NativeValues = null;
if( tvSecretIDKdeWallet.Selection.GetSelected (out model, out iter) )
selected = (string) model.GetValue(iter, 0);
if( (null != selected) && (selected.Length > 0) )
{
tsNativeInfoKdeWallet.Clear();
/// Populate NativeInfo
tsNativeInfoKdeWallet.AppendValues("Wallet Name", "= "+model.GetValue(iter,3));
NativeKeys = (string[]) model.GetValue(iter, 4);
NativeValues = (string[]) model.GetValue(iter, 5);
for( int i=0; i< NativeKeys.Length; i++ )
if( (null != NativeValues[i]) && ("" != NativeValues[i]) )
tsNativeInfoKdeWallet.AppendValues(NativeKeys[i], "= "+NativeValues[i]);
tvNativeInfoKdeWallet.ShowAll();
}
Logger.DbgLog("GUI:KdeWallet.OnCursorChanged() - END");
}
///#######################################################################
/// RIGHT-CLICK CONTEXT MENU
///
///
///
public void OnRightClicked(object obj, ButtonReleaseEventArgs args)
{
Logger.DbgLog("GUI:KdeWallet.OnRightClicked() - BEGIN");
if( 3 == args.Event.Button )
{
try
{
Logger.DbgLog("GUI:GnomeKeyring.OnRightClicked() - Context menu opened.");
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "menuRightClick", null);
gxmlTemp.Autoconnect (this);
menuRightClick.Popup(null, null, null, IntPtr.Zero, 3, Gtk.Global.CurrentEventTime);
if( 0 != tvSecretIDKdeWallet.Selection.CountSelectedRows() )
cmiNewSecret.Sensitive = cmiNewKey.Sensitive = cmiLink.Sensitive = cmiCopy.Sensitive = cmiDelete.Sensitive = false;
else
cmiNewSecret.Sensitive = cmiNewKey.Sensitive = cmiView.Sensitive = cmiLink.Sensitive = cmiCopy.Sensitive = cmiDelete.Sensitive = false;
}
catch(Exception exp)
{
Logger.DbgLog("GUI:GnomeKeyring.OnRightClicked() - EXCEPTION" + exp.ToString());
}
}
Logger.DbgLog("GUI:KdeWallet.OnRightClicked() - END");
}
///#######################################################################
/// VIEW KEY-VALUES
///
///
///
public override void ViewKeyValues()
{
Logger.DbgLog("GUI:KdeWallet.ViewKeyValues() - BEGIN");
TreeModel model;
TreeIter iter;
string selected = null;
string[] keys = null,
values = null;
try
{
if( tvSecretIDKdeWallet.Selection.GetSelected (out model, out iter) )
{
selected = (string) model.GetValue(iter, 0);
keys = (string[]) model.GetValue(iter, 1);
values = (string[]) model.GetValue(iter, 2);
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogManageSecret", null);
gxmlTemp.Autoconnect (this);
dialogManageSecret.TransientFor = (Gtk.Window)CasaMain.gxml.GetWidget("windowMain");
dialogManageSecret.Title = "VIEW";
cellEditable = new CellRendererText();
cellEditable.Editable = false;
//cellEditable.Edited += new EditedHandler(OnKeyValueEdited);
/// KEY:0 VALUE:1 VALUE-DUP:2 DIRTY-BIT:3
tsKeyValue = new TreeStore(typeof(string),typeof(string), typeof(string), typeof(bool));
tvKeyValue.AppendColumn("Key",new CellRendererText(),"text",0);
tvKeyValue.AppendColumn("Value",cellEditable,"text",2);
entrySecretID.Text = selected;
for( int i=0; i< keys.Length; i++ )
{
if( (null != keys[i]) && (null != values[i]) )
tsKeyValue.AppendValues(keys[i], values[i], "********", false);
}
tvKeyValue.Model = tsKeyValue;
entryKey.Sensitive = entryValue.Sensitive = buttonNewAdd.Sensitive = buttonNewRemove.Sensitive = buttonManageOk.Sensitive = false;
}
}
catch(Exception exp)
{
Logger.DbgLog("GUI:KdeWallet.ViewKeyValues() - EXCEPTION" + exp.ToString());
}
Logger.DbgLog("GUI:KdeWallet.ViewKeyValues() - END");
}
///
/// EDIT KEY-VALUE
///
public void OnKeyValueEdited(object obj, EditedArgs args)
{
}
///
/// ADD BUTTON CLICKED
///
public void on_buttonNewAdd_clicked(object obj, EventArgs args)
{
}
///
/// REMOVE BUTTON CLICKED
///
public void on_buttonNewRemove_clicked(object obj, EventArgs args)
{
}
///
/// SHOW PASSWORD CHECK BUTTON CLICKED
///
public void on_cbuttonShowPassword_toggled(object obj, EventArgs args)
{
TreeViewColumn tvCol;
if( tvKeyValue.Model.IterNChildren() > 0 )
if( true == cbuttonShowPassword.Active)
{
Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null);
gxmlTemp.Autoconnect (this);
dialogLogin.TransientFor = dialogManageSecret;
label86.Text = "Enter your Master Password to view passwords";
entryMasterPassword3.Text="";
entryMasterPassword3.HasFocus = true;
label88.Hide();
entryMasterPassword4.Hide();
dialogLogin.Show();
}
else
{
tvKeyValue.RemoveColumn(tvKeyValue.GetColumn(1));
tvCol = new TreeViewColumn("Value", cellEditable, "text", 2);
tvKeyValue.InsertColumn(tvCol, 1);
}
}
public void okbuttonLogin_clicked(object abj, EventArgs args)
{
TreeViewColumn tvCol;
if( tvKeyValue.Model.IterNChildren() > 0 )
if( 0 == miCASA.SetMasterPassword(0, entryMasterPassword3.Text) )
{
tvKeyValue.RemoveColumn(tvKeyValue.GetColumn(1));
tvCol = new TreeViewColumn("Value", cellEditable, "text", 1);
tvKeyValue.InsertColumn(tvCol, 1);
dialogLogin.Destroy();
}
else
{
// prompt user
MessageDialog md=new MessageDialog(dialogLogin,Gtk.DialogFlags.Modal,
Gtk.MessageType.Warning,
Gtk.ButtonsType.Ok,
"Master Password incorrect");
md.Response +=new ResponseHandler(md_Response2);
md.SetPosition(Gtk.WindowPosition.CenterOnParent);
md.Modal = true;
md.Show();
}
}
public void closebuttonLogin_clicked(object abj, EventArgs args)
{
cbuttonShowPassword.Active = false;
dialogLogin.Destroy();
}
public void OnDialogLoginDeleted(object obj, DeleteEventArgs args)
{
cbuttonShowPassword.Active = false;
dialogLogin.Destroy();
args.RetVal = true;
}
public void on_entryMasterPassword3_activate(object obj, EventArgs args)
{
if( "" != entryMasterPassword3.Text )
okbuttonLogin_clicked(obj, args);
}
public void on_entryMasterPassword4_activate(object obj, EventArgs args)
{
okbuttonLogin_clicked(obj, args);
}
private void md_Response2(object o, ResponseArgs args)
{
MessageDialog md = (MessageDialog)o;
if (md != null)
{
md.Destroy();
entryMasterPassword3.Text="";
entryMasterPassword3.HasFocus = true;
}
}
///
/// MANAGE SECRET-ID DIALOG OK-BUTTON CLICKED
///
public void on_buttonManageOk_clicked(object obj, EventArgs args)
{
}
///
/// MANAGE SECRET-ID DIALOG CANCEL-BUTTON CLICKED
///
public void on_buttonManageCancel_clicked(object obj, EventArgs args)
{
tsKeyValue.Dispose();
dialogManageSecret.Destroy();
}
///
/// SECRET-ID DOUBLE CLICKED
///
private void OntvSecretIDKdeWalletRowActivated( object obj, RowActivatedArgs args )
{
Logger.DbgLog("GUI:KdeWallet.OntvSecretIDKdeWalletRowActivated() - SecretID double clicked.");
ViewKeyValues();
}
///
/// VIEW KEY-VALUES CALLED VIA MAIN-MENU/CONTEXT-MENU
///
public void OnViewActivated(object obj, EventArgs args)
{
Logger.DbgLog("GUI:KdeWallet.OnViewActivated() - ViewKeyValues() called.");
ViewKeyValues();
}
///#######################################################################
/// ADD NEW SECRET
///
///
///
public void OnNewSecretActivated(object obj, EventArgs args)
{
}
///#######################################################################
/// ADD NEW KEY-VALUES TO EXISTING SECRET
///
///
///
public void OnNewKeyActivated(object obj, EventArgs args)
{
}
///#######################################################################
/// LINK
///
/// LINK Key-Values
///
public void OnLinkActivated(object obj, EventArgs args)
{
}
///#######################################################################
/// COPY
///
/// COPY Key-Values
///
public void OnCopyActivated(object obj, EventArgs args)
{
}
///#######################################################################
// DELETE SECRET
///
/// DELETE Secret
///
public void OnDeleteActivated(object obj, EventArgs args)
{
}
}
}
///##################################################################
/// END OF FILE
///##################################################################