/*********************************************************************** * * Copyright (C) 2005-2006 Novell, Inc. All Rights Reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; version 2.1 * of the License. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Library Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, Novell, Inc. * * To contact Novell about this file by physical or electronic mail, * you may find current contact information at www.novell.com. * ***********************************************************************/ namespace Novell.CASA.GUI { using System; using System.IO; using System.Diagnostics; using Gtk; using Glade; using Novell.CASA; using Novell.CASA.MiCasa.Common; using Novell.CASA.MiCasa.Communication; #if W32 using Microsoft.Win32; #endif public class CasaMain { public MiCasa objMiCasa = null; public Firefox objFirefox = null; public Mozilla objMozilla = null; public KdeWallet objKdeWallet = null; public GnomeKeyring objGnomeKeyring = null; public static Glade.XML gxml; int loginPromptCount = 3; #region Glade Widgets [Glade.Widget] Gtk.Window windowMain; [Glade.Widget] Gtk.TreeView tvLog; [Glade.Widget] Gtk.Notebook notebookStores; [Glade.Widget] Gtk.Dialog dialogPersistentStorage, dialogPreferences, dialogAbout, dialogLogin, dialogLoginContinue, dialogConfirmRefresh, dialogSingleInstance, dialogLoginReprompt, dialogShortPassword, dialogResetMP, dialogStillRunning; [Glade.Widget] Gtk.Entry entryMasterPassword1, entryMasterPassword2, entryMasterPassword3, entryMasterPassword4, entryOldMP, entryNewMP1, entryNewMP2; [Glade.Widget] Gtk.CheckButton checkbuttonFirefox, checkbuttonMozilla, checkbuttonGnomeKeyring, checkbuttonKdeWallet, checkbuttonCloseMessage; [Glade.Widget] Gtk.Label label88, labelLoginContinue1, labelLoginContinue2; [Glade.Widget] Gtk.Button okbuttonPersistentStorage; [Glade.Widget] Gtk.MenuItem mmiNew, mmiNewKey, mmiView, mmiLink, mmiCopy, mmiDelete, mmiRefresh, mmiLockSecrets, mmiUnlockSecrets, mmiDestroySecrets, mmiEdit, mmiOptions, mmiDebug; [Glade.Widget] #endregion public static CasaTray mCasaTray = null; public static bool m_bShowDebug = false; public static bool m_bNotifyUser = true; public static bool m_bGuiLocked = false; ///####################################################################### /// MAIN /// /// The main entry point for the CASA application. /// [STAThread] public static void Main(string[] args) { Logger.DbgLog("GUI:CasaMain.Main() - BEGIN"); Common.ReadPlatform(); Application.Init(); try { if (Common.IsArgSet(args, Common.ARG_DEBUG)) m_bShowDebug = true; // ping micasad Ping ping = new Ping(); ping.clientmessage = "Hello micasad"; MiCasaRequestReply.Send(MiCasaRequestReply.VERB_PING_MICASAD,ping); new CasaMain(args); Application.Run(); } catch (Exception e) { string message = "miCASA services are not available"; //Console.WriteLine("CasaMain: EXCEPTION= "+e.ToString()); if (m_bShowDebug) message = e.ToString(); MessageDialog md=new MessageDialog(null,Gtk.DialogFlags.Modal, Gtk.MessageType.Error, Gtk.ButtonsType.Close, message); md.Response+=new ResponseHandler(md_ResponseCloseWindow); md.SetPosition(Gtk.WindowPosition.CenterAlways); md.Show(); Application.Run(); } Logger.DbgLog("GUI:CasaMain.Main() - END"); } ///####################################################################### /// CONSTRUCTOR /// /// CasaMain constructor funtion. /// public CasaMain(string[] args) { Logger.DbgLog("GUI:CasaMain.CasaMain() - BEGIN"); if( false == Common.CheckForSingleInstance() ) { MasterPasswordAuthentication(); if (Common.IsTrayAvailable()) // && Common.IsArgSet(args, Common.ARG_SHOW_TRAY_ICON)) { try { if (mCasaTray == null) mCasaTray = new CasaTray(this); } catch{} } } else { //if (Common.IS_LINUX) { Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogSingleInstance", null); gxmlTemp.Autoconnect(this); } //else //{ // Common.FocusExistingApp(); //} } Logger.DbgLog("GUI:CasaMain.CasaMain() - END"); } ///####################################################################### /// INITIALIZE MAIN GUI /// /// Main GUI initializing routine. This routine builds the Main window of CASA. /// public void InitializeGUI() { Logger.DbgLog("GUI:CasaMain.InitializeGUI() - BEGIN"); gxml = new Glade.XML(Common.GladeFile, "windowMain", null); gxml.Autoconnect(this); if (!m_bShowDebug) mmiDebug.Hide(); windowMain.DeleteEvent += new DeleteEventHandler(OnWindowMainDeleted); /// PLATFORM SPECIFIC GUI CHANGES //ConfigureGUI(); /// POLICY INIT StorePolicyInterface.Init(); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - miCASA policy = " + Common.IS_MICASA); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - Firefox policy = " + Common.IS_FIREFOX); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - Mozilla policy = " + Common.IS_MOZILLA); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - KdeWallet policy = " + Common.IS_KDEWALLET); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - GNOME Keyring policy = " + Common.IS_GNOMEKEYRING); /// STOREDATA INIT StoreDataInterface.Init(); if( Common.IS_MICASA ) { Logger.DbgLog("GUI:CasaMain.new MiCasa()."); objMiCasa = new MiCasa(); } else (notebookStores.GetNthPage(Common.STORE_MICASA)).Visible = Common.IS_MICASA; if( Common.IS_FIREFOX ) { Logger.DbgLog("GUI:CasaMain.new Firefox()."); objFirefox = new Firefox(); } else (notebookStores.GetNthPage(Common.STORE_FIREFOX)).Visible = Common.IS_FIREFOX; if( Common.IS_MOZILLA ) { Logger.DbgLog("GUI:CasaMain.new Mozilla()."); objMozilla = new Mozilla(); } else (notebookStores.GetNthPage(Common.STORE_MOZILLA)).Visible = Common.IS_MOZILLA; if( Common.IS_KDEWALLET ) { Logger.DbgLog("GUI:CasaMain.new KdeWallet()."); objKdeWallet = new KdeWallet(); } else (notebookStores.GetNthPage(Common.STORE_KDEWALLET)).Visible = Common.IS_KDEWALLET; if( Common.IS_GNOMEKEYRING ) { Logger.DbgLog("GUI:CasaMain.new GnomeKeyring()."); objGnomeKeyring = new GnomeKeyring(); } else (notebookStores.GetNthPage(Common.STORE_GNOMEKEYRING)).Visible = Common.IS_GNOMEKEYRING; notebookStores.CurrentPage = Common.STORE_MICASA; if (MiCASAStore.IsLocked()) LockGUI(); else UnlockGUI(); windowMain.Show(); Logger.DbgLog("GUI:CasaMain.InitializeGUI() - END"); } ///####################################################################### /// MASTER PASSWORD AUTHENTICATION /// /// This routine implements the MasterPassword authentication. /// public void MasterPasswordAuthentication() { Logger.DbgLog("GUI:CasaMain.Login() - BEGIN"); if( true == IsMasterPasswordSet() ) { Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned true"); if( false == miCASA.IsSecretPersistent(1,"") ) { Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLogin", null); gxmlTemp.Autoconnect (this); dialogLogin.TransientFor = windowMain; entryMasterPassword3.Text=""; label88.Hide(); entryMasterPassword4.Hide(); } else { Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned true"); InitializeGUI(); } } else { Logger.DbgLog("GUI:CasaMain.Login() - IsMasterPasswordSet returned false"); Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogLogin", null); gxmlTemp.Autoconnect(this); entryMasterPassword3.Text=""; entryMasterPassword4.Text=""; } Logger.DbgLog("GUI:CasaMain.Login() - END"); } public void okbuttonLogin_clicked(object abj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.okbuttonLogin_clicked() - BEGIN"); if( true == entryMasterPassword4.Visible ) { if( entryMasterPassword3.Text.Length < 8 ) { Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogShortPassword", null); gxmlTemp.Autoconnect (this); } else if(entryMasterPassword3.Text != "" && (entryMasterPassword3.Text == entryMasterPassword4.Text) && entryMasterPassword3.Text.Length >= 8) { miCASA.SetMasterPassword(0, entryMasterPassword3.Text); MiCasaRequestReply.Send(MiCasaRequestReply.VERB_UNLOCK_STORE, entryMasterPassword3.Text); dialogLogin.Destroy(); InitializeGUI(); } else { entryMasterPassword3.Text=""; entryMasterPassword4.Text=""; entryMasterPassword3.HasFocus=true; } } else { if( 0 == miCASA.SetMasterPassword(0, entryMasterPassword3.Text) ) { MiCasaRequestReply.Send(MiCasaRequestReply.VERB_UNLOCK_STORE, entryMasterPassword3.Text); dialogLogin.Destroy(); InitializeGUI(); } else { Logger.DbgLog("GUI:CasaMain.okbuttonLogin_clicked() - MasterPassword verification failed."); //dialogLogin.Destroy(); //LoginContinue("Master Password verfication failed", "The store will not be persistent"); loginPromptCount--; dialogLogin.Hide(); if( loginPromptCount > 0 ) { dialogLogin.Show(); entryMasterPassword3.Text=""; } else { Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLoginReprompt", null); gxmlTemp.Autoconnect (this); } } } Logger.DbgLog("GUI:CasaMain.okbuttonLogin_clicked() - END"); } public void on_helpbuttonAuthentication_clicked(object obj, EventArgs args) { Common.ShowHelpUrl("CASAMasterPasswordAuthentication.htm"); } internal void on_buttonRetryRepropmt_clicked(object obj, EventArgs args) { dialogLoginReprompt.Destroy(); dialogLogin.Show(); entryMasterPassword3.Text=""; loginPromptCount = 3; } internal void on_buttonRetryShortPassword_clicked(object obj, EventArgs args) { dialogShortPassword.Destroy(); entryMasterPassword3.Text = ""; entryMasterPassword4.Text = ""; entryMasterPassword3.HasFocus = true; } internal void on_buttonCloseReprompt_clicked(object obj, EventArgs args) { dialogLoginReprompt.Destroy(); dialogLogin.Destroy(); HandleQuit(); } public void closebuttonLogin_clicked(object abj, EventArgs args) { dialogLogin.Destroy(); // close tray too if (mCasaTray != null) { mCasaTray.Destroy(); mCasaTray = null; } HandleQuit(); } public void OnDialogLoginDeleted(object obj, DeleteEventArgs args) { Logger.DbgLog("GUI:CasaMain.OnDialogLoginDeleted() - BEGIN"); // close tray too if (mCasaTray != null) { mCasaTray.Destroy(); mCasaTray = null; } HandleQuit(); args.RetVal = true; Logger.DbgLog("GUI:CasaMain.OnDialogLoginDeleted() - END"); } public void on_entryMasterPassword3_activate(object obj, EventArgs args) { if( true == entryMasterPassword4.Visible ) entryMasterPassword4.HasFocus = true; else if( "" != entryMasterPassword3.Text ) okbuttonLogin_clicked(obj, args); } public void on_entryMasterPassword4_activate(object obj, EventArgs args) { okbuttonLogin_clicked(obj, args); } public bool IsMasterPasswordSet() { Logger.DbgLog("GUI:CasaMain.IsMasterPasswordSet() - BEGIN"); string MICASA_PASSCODE_BY_MASTER_PASSWD_FILE = "/.miCASAPCByMPasswd"; string fileName = GetUserHomeDir() + MICASA_PASSCODE_BY_MASTER_PASSWD_FILE; Logger.DbgLog("GUI:CasaMain.IsMasterPasswordSet() - END"); return (File.Exists(fileName)); } private string GetUserHomeDir() { if (Common.IS_LINUX) return Environment.GetEnvironmentVariable("HOME"); else return Environment.GetEnvironmentVariable("USERPROFILE"); } ///####################################################################### /// LOGIN WARNING DIALOG /// /// Error dialog prompt for MasterPassword authentication /// public void LoginContinue(string LabelMain, string LabelTips) { Logger.DbgLog("GUI:CasaMain.LoginContinue() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML(Common.GladeFile, "dialogLoginContinue", null); gxmlTemp.Autoconnect(this); dialogLoginContinue.TransientFor = windowMain; labelLoginContinue1.LabelProp = LabelMain; labelLoginContinue2.LabelProp = LabelTips; Logger.DbgLog("GUI:CasaMain.LoginContinue() - END"); } public void on_buttonLoginContinue_clicked(object abj, EventArgs args) { dialogLoginContinue.Destroy(); InitializeGUI(); } ///####################################################################### /// ON MAIN MENU ACTIVATED HANDLERS internal void on_notebookStores_switch_page(object obj, SwitchPageArgs args) { switch(args.PageNum) { case Common.STORE_MICASA: break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: if( false == objKdeWallet.IS_STORE_AGGREGATED ) { objKdeWallet.AggregateStore(); objKdeWallet.IS_STORE_AGGREGATED = true; } break; case Common.STORE_GNOMEKEYRING: if( false == objGnomeKeyring.IS_STORE_AGGREGATED ) { objGnomeKeyring.AggregateStore(); objGnomeKeyring.IS_STORE_AGGREGATED = true; } break; } } /// /// /// internal void FileMenuActivated(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.FileMenuActivated() - BEGIN"); if (MiCASAStore.IsLocked()) { LockGUI(); Logger.DbgLog("GUI:CasaMain.FileMenuActivated() Store is locked - END"); return; } else { if (m_bGuiLocked) UnlockGUI(); } switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: if( 0 != objMiCasa.tvSecretIDMiCasa.Selection.CountSelectedRows() ) { mmiNew.Sensitive = mmiNewKey.Sensitive = true; } else { mmiNewKey.Sensitive = false; } break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: if( 0 != objKdeWallet.tvSecretIDKdeWallet.Selection.CountSelectedRows() ) { mmiNew.Sensitive = mmiNewKey.Sensitive = true; } else { mmiNewKey.Sensitive = false; } break; case Common.STORE_GNOMEKEYRING: if( 0 != objGnomeKeyring.tvSecretIDGnomeKeyring.Selection.CountSelectedRows() ) { mmiNew.Sensitive = mmiNewKey.Sensitive = true; } else { mmiNewKey.Sensitive = false; } break; } Logger.DbgLog("GUI:CasaMain.FileMenuActivated() - END"); } /// /// /// internal void EditMenuActivated(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.EditMenuActivated() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: if( 0 != objMiCasa.tvSecretIDMiCasa.Selection.CountSelectedRows() ) { mmiView.Sensitive = mmiLink.Sensitive = mmiDelete.Sensitive = true; mmiCopy.Sensitive = false; } else { mmiView.Sensitive = mmiLink.Sensitive = mmiCopy.Sensitive = mmiDelete.Sensitive = false; } break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: if( 0 != objKdeWallet.tvSecretIDKdeWallet.Selection.CountSelectedRows() ) { mmiView.Sensitive = mmiDelete.Sensitive = true; mmiLink.Sensitive = mmiCopy.Sensitive = false; } else { mmiView.Sensitive = mmiLink.Sensitive = mmiCopy.Sensitive = mmiDelete.Sensitive = false; } break; case Common.STORE_GNOMEKEYRING: if( 0 != objGnomeKeyring.tvSecretIDGnomeKeyring.Selection.CountSelectedRows() ) { mmiView.Sensitive = mmiDelete.Sensitive = true; mmiLink.Sensitive = mmiCopy.Sensitive = false; } else { mmiView.Sensitive = mmiLink.Sensitive = mmiCopy.Sensitive = mmiDelete.Sensitive = false; } break; } Logger.DbgLog("GUI:CasaMain.EditMenuActivated() - END"); } ///####################################################################### /// REFRESH ALL STORES /// /// /// public void RefreshAllStores(object obj, EventArgs args) { Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogConfirmRefresh", null); gxmlTemp.Autoconnect (this); dialogConfirmRefresh.TransientFor = windowMain; } public void on_buttonRefreshYes_clicked(object abj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.on_buttonRefreshYes_clicked() - BEGIN"); RefreshStores(); dialogConfirmRefresh.Destroy(); Logger.DbgLog("GUI:CasaMain.on_buttonRefreshYes_clicked() - END"); } public void on_buttonRefreshNo_clicked(object abj, EventArgs args) { dialogConfirmRefresh.Destroy(); } public void on_helpbuttonRefresh_clicked(object obj, EventArgs Args) { Common.ShowHelpUrl("RefreshStore.htm"); } ///####################################################################### /// QUIT APPLICATION /// /// /// public void QuitApplication(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.QuitApplication() - BEGIN"); //windowMain.Destroy(); HandleQuit(); Logger.DbgLog("GUI:CasaMain.QuitApplication() - END"); } ///####################################################################### /// ADD NEW SECRET /// /// /// public void OnNewSecretActivated(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.NewSecret() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: objMiCasa.OnNewSecretActivated(obj, args); break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: objKdeWallet.OnNewSecretActivated(obj, args); break; case Common.STORE_GNOMEKEYRING: objGnomeKeyring.OnNewSecretActivated(obj, args); break; } Logger.DbgLog("GUI:CasaMain.NewSecret() - END"); } ///####################################################################### /// ADD NEW KEY /// /// /// public void OnNewKeyActivated(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.NewKeyValue() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: objMiCasa.OnNewKeyActivated(obj, args); break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: objKdeWallet.OnNewKeyActivated(obj, args); break; case Common.STORE_GNOMEKEYRING: objGnomeKeyring.OnNewKeyActivated(obj, args); break; } Logger.DbgLog("GUI:CasaMain.NewKeyValue() - END"); } ///####################################################################### /// UI handling public void OnLockMiCASASecrets(object sender, EventArgs args) { Logger.DbgLog("GUI:CasaMain.OnLockMiCASASecrets() - START"); MiCasaRequestReply.Send(MiCasaRequestReply.VERB_LOCK_STORE); LockGUI(); if (mCasaTray != null) mCasaTray.UpdateTrayIcon(true); RefreshStores(); Logger.DbgLog("GUI:CasaMain.OnLockMiCASASecrets() - END"); } public void OnUnLockMiCASASecrets(object sender, EventArgs args) { Logger.DbgLog("GUI:CasaMain.OnUnLockMiCASASecrets() - START"); CommonGUI cg = new CommonGUI(); cg.HandleUnlock(this, mCasaTray); Logger.DbgLog("GUI:CasaMain.OnUnLockMiCASASecrets() - END"); } public void OnDestroyMiCASASecrets(object sender, EventArgs args) { Logger.DbgLog("GUI:CasaMain.OnDestroyMiCASASecrets() - START"); CommonGUI temp = new CommonGUI(); temp.menuDestroyMiCasa_Activated(this, mCasaTray); Logger.DbgLog("GUI:CasaMain.OnDestroyMiCASASecrets() - END"); } internal void LockGUI() { mmiLockSecrets.Sensitive = false; mmiUnlockSecrets.Sensitive = true; mmiDestroySecrets.Sensitive = false; notebookStores.Sensitive = false; mmiNew.Sensitive = false; mmiRefresh.Sensitive = false; mmiDebug.Sensitive = false; mmiOptions.Sensitive = false; mmiEdit.Sensitive = false; m_bGuiLocked = true; } internal void UnlockGUI() { mmiLockSecrets.Sensitive = true; mmiUnlockSecrets.Sensitive = false; mmiDestroySecrets.Sensitive = true; notebookStores.Sensitive = true; mmiNew.Sensitive = true; mmiRefresh.Sensitive = true; mmiDebug.Sensitive = true; mmiOptions.Sensitive = true; mmiEdit.Sensitive = true; m_bGuiLocked = false; //refresh secrets RefreshStores(); } ///####################################################################### /// VIEW KEY-VALUES /// /// VIEW Key-Values /// public void ViewKeyValue(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.ViewKeyValue() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: objMiCasa.ViewKeyValues(); break; case Common.STORE_FIREFOX: //objFirefox.ViewKeyValues(); break; case Common.STORE_MOZILLA: //objMozilla.ViewKeyValues(); break; case Common.STORE_KDEWALLET: objKdeWallet.ViewKeyValues(); break; case Common.STORE_GNOMEKEYRING: objGnomeKeyring.ViewKeyValues(); break; } Logger.DbgLog("GUI:CasaMain.ViewKeyValue() - END"); } ///####################################################################### /// LINK KEY-VALUE /// /// LINK Key-Values /// public void LinkKeyValue(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.LinkKeyValue() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: objMiCasa.ViewKeyValues(); break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: break; case Common.STORE_GNOMEKEYRING: break; } Logger.DbgLog("GUI:CasaMain.LinkKeyValue() - END"); } ///####################################################################### /// COPY KEY-VALUE /// /// COPY Key-Values /// public void CopyKeyValue(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.CopyKeyValue() - BEGIN"); //Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogCopyKeyValue", null); //gxmlTemp.Autoconnect (this); Logger.DbgLog("GUI:CasaMain.CopyKeyValue() - END"); } ///####################################################################### /// DELETE SECRET /// /// DELETE Secret /// public void DeleteSecret(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.DeleteSecret() - BEGIN"); switch(notebookStores.CurrentPage) { case Common.STORE_MICASA: objMiCasa.OnDeleteActivated(obj, args); break; case Common.STORE_FIREFOX: break; case Common.STORE_MOZILLA: break; case Common.STORE_KDEWALLET: objKdeWallet.OnDeleteActivated(obj, args); break; case Common.STORE_GNOMEKEYRING: objGnomeKeyring.OnDeleteActivated(obj, args); break; } Logger.DbgLog("GUI:CasaMain.DeleteSecret() - END"); } ///####################################################################### /// Reset Master Password CALLED VIA MAIN MENU /// /// /// public void ResetMasterPassword(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.ResetMasterPassword() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogResetMP", null); gxmlTemp.Autoconnect (this); dialogResetMP.TransientFor = windowMain; entryOldMP.Text=""; entryNewMP1.Text=""; entryNewMP2.Text=""; Logger.DbgLog("GUI:CasaMain.ResetMasterPassword() - END"); } public void okbuttonResetMasterPWD_clicked(object abj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.okbuttonResetMasterPWD_clicked() - BEGIN"); if (entryOldMP.Text == "") { DisplayError("You must enter you current Master Password"); return; } // check Current MP if (entryOldMP.Text != "") { int rcode = miCASA.SetMasterPassword(1, entryOldMP.Text); if (rcode != 0) { DisplayError("Current Master Password is not correct"); return; } } if (entryNewMP1.Text.Length < 8) { Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogShortPassword", null); gxmlTemp.Autoconnect (this); return; } if (entryNewMP1.Text != entryNewMP2.Text) { DisplayError("New Master Passwords do not match"); return; } if (miCASA.ChangeMasterPassword(entryOldMP.Text, entryNewMP1.Text)) dialogResetMP.Destroy(); else DisplayError("Change failed"); Logger.DbgLog("GUI:CasaMain.okbuttonResetMasterPWD_clicked() - END"); } public void cancelbuttonResetMasterPWD_clicked(object abj, EventArgs args) { dialogResetMP.Destroy(); } public void on_helpbuttonResetMP_clicked(object obj, EventArgs args) { Common.ShowHelpUrl("CASAMasterPasswordAuthentication.htm"); } private void DisplayError(String sErrorMessage) { MessageDialog md = new MessageDialog(windowMain, Gtk.DialogFlags.Modal, Gtk.MessageType.Warning, Gtk.ButtonsType.Close, sErrorMessage); md.Response +=new ResponseHandler(md_Response); //md_ResponseCloseWindow md.Show(); } ///####################################################################### /// PERSISTENT STORAGE CALLED VIA MAIN MENU /// /// /// public void PersistentStorage(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.PersistentStorage() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogPersistentStorage", null); gxmlTemp.Autoconnect (this); dialogPersistentStorage.TransientFor = windowMain; entryMasterPassword1.Text=""; entryMasterPassword2.Text=""; if(IsMasterPasswordSet() == true) { entryMasterPassword1.Sensitive=false; entryMasterPassword2.Sensitive=false; okbuttonPersistentStorage.Sensitive=false; } Logger.DbgLog("GUI:CasaMain.PersistentStorage() - END"); } public void okbuttonPersistentStorage_clicked(object abj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.okbuttonPersistentStorage_clicked() - BEGIN"); if((entryMasterPassword1.Text != "" && entryMasterPassword2.Text != "") && (entryMasterPassword1.Text == entryMasterPassword2.Text)) { //StorePolicyInterface.SetMasterPassword(entryMasterPassword1.Text); miCASA.SetMasterPassword(0, entryMasterPassword1.Text); dialogPersistentStorage.Destroy(); } Logger.DbgLog("GUI:CasaMain.okbuttonPersistentStorage_clicked() - END"); } public void cancelbuttonPersistentStorage_clicked(object abj, EventArgs args) { dialogPersistentStorage.Destroy(); } ///####################################################################### /// PREFERENCES /// /// /// public void Preferences(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.Preferences() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogPreferences", null); gxmlTemp.Autoconnect (this); dialogPreferences.SetPosition(Gtk.WindowPosition.CenterOnParent); dialogPreferences.TransientFor = windowMain; checkbuttonFirefox.Active=Common.IS_FIREFOX; checkbuttonMozilla.Active=Common.IS_MOZILLA; checkbuttonGnomeKeyring.Active=Common.IS_GNOMEKEYRING; checkbuttonKdeWallet.Active=Common.IS_KDEWALLET; checkbuttonKdeWallet.Sensitive=Common.IS_KDEWALLET_AVAILABLE; checkbuttonGnomeKeyring.Sensitive=Common.IS_GNOMEKEYRING_AVAILABLE; if (Common.IS_WINDOWS) { checkbuttonGnomeKeyring.Sensitive = false; checkbuttonKdeWallet.Sensitive = false; } Logger.DbgLog("GUI:CasaMain.Preferences() - END"); } public void okbuttonPreferences_clicked(object abj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.okbuttonPreferences_clicked() - BEGIN"); string[] storeID = new string[]{""}; notebookStores.GetNthPage(Common.STORE_FIREFOX).Visible = Common.IS_FIREFOX = checkbuttonFirefox.Active; notebookStores.GetNthPage(Common.STORE_MOZILLA).Visible = Common.IS_MOZILLA = checkbuttonMozilla.Active; notebookStores.GetNthPage(Common.STORE_GNOMEKEYRING).Visible = Common.IS_GNOMEKEYRING = checkbuttonGnomeKeyring.Active; notebookStores.GetNthPage(Common.STORE_KDEWALLET).Visible = Common.IS_KDEWALLET = checkbuttonKdeWallet.Active; StorePolicyInterface.SetAggregationPolicy(Common.STORE_FIREFOX, Common.IS_FIREFOX, storeID, 1); StorePolicyInterface.SetAggregationPolicy(Common.STORE_MOZILLA, Common.IS_MOZILLA, storeID, 1); StorePolicyInterface.SetAggregationPolicy(Common.STORE_KDEWALLET, Common.IS_KDEWALLET, storeID, 1); StorePolicyInterface.SetAggregationPolicy(Common.STORE_GNOMEKEYRING, Common.IS_GNOMEKEYRING, storeID, 1); StorePolicyInterface.SaveAggregationPolicy(); if(Common.IS_FIREFOX) { if( null == objFirefox ) objFirefox = new Firefox(); objFirefox.AggregateStore(); } if(Common.IS_MOZILLA) { if( null == objMozilla ) objMozilla = new Mozilla(); objMozilla.AggregateStore(); } if(Common.IS_KDEWALLET) { if( null == objKdeWallet ) objKdeWallet = new KdeWallet(); objKdeWallet.AggregateStore(); } if(Common.IS_GNOMEKEYRING) { if( null == objGnomeKeyring ) objGnomeKeyring = new GnomeKeyring(); objGnomeKeyring.AggregateStore(); } dialogPreferences.Destroy(); Logger.DbgLog("GUI:CasaMain.okbuttonPreferences_clicked() - END"); } public void cancelbuttonPreferences_clicked(object abj, EventArgs args) { dialogPreferences.Destroy(); } public void on_helpbuttonPreferences_clicked(object obj, EventArgs args) { Common.ShowHelpUrl("Preferences.htm"); } /* private bool IsTraySetForStartup() { #if W32 string sStartup = CommonGUI.ReadRegKey( Registry.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "CASA Tray"); if (sStartup == null || sStartup.Length < 1) return false; else return true; #endif #if LINUX // TODO check startup script for the user. return true; #endif } */ private static void md_ResponseCloseWindow(object o, ResponseArgs args) { MessageDialog md = (MessageDialog)o; if (md != null) { md.Destroy(); Application.Quit(); } } internal void PromptUserForStartup() { // prompt user MessageDialog md=new MessageDialog(null,Gtk.DialogFlags.Modal, Gtk.MessageType.Question, Gtk.ButtonsType.YesNo, "Show the Tray Icon at startup?"); md.SetPosition(Gtk.WindowPosition.Center); md.Response +=new ResponseHandler(md_Response); md.Modal = true; md.SetIconFromFile(Common.CASAICONS); md.Show(); } private void md_Response(object o, ResponseArgs args) { if (args.ResponseId.Equals(Gtk.ResponseType.Yes)) { #if W32 // get our program path String sPath = "\"" +Environment.GetEnvironmentVariable("ProgramFiles")+ "\\Novell\\CASA\\bin\\CASAManager.exe\" -tray"; CommonGUI.WriteRegKey(Registry.CurrentUser, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", "CASA Tray", sPath); #endif // TODO: Set startup script for the user } MessageDialog md = (MessageDialog)o; if (md != null) { md.Destroy(); } } ///####################################################################### /// DEBUG /// /// /// public void on_create_sample_secrets1_activate(object obj, EventArgs arg) { MiCasaRequestReply.Send(MiCasaRequestReply.VERB_CREATE_TEST_SECRETS, null, null, null, null); //StoreDataInterface.RefreshAllStores(); objMiCasa.AggregateStore(); } public void on_remove_test_secrets1_activate(object obj, EventArgs args) { MiCasaRequestReply.Send(MiCasaRequestReply.VERB_REMOVE_TEST_SECRETS, null, null, null, null); //StoreDataInterface.RefreshAllStores(); objMiCasa.AggregateStore(); } ///####################################################################### /// ABOUT /// /// /// public void About(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.About() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogAbout", null); gxmlTemp.Autoconnect (this); dialogAbout.TransientFor = windowMain; Logger.DbgLog("GUI:CasaMain.About() - END"); } public void closebuttonAbout_clicked(object obj, EventArgs args) { dialogAbout.Destroy(); } public void on_buttonNovell_clicked(object obj, EventArgs args) { Common.ShowUrl("http://www.novell.com"); } ///####################################################################### /// SINGLE INSTANCE DIALOG CLOSE HANDLER /// /// dislogSingleInstance delete window handler /// public void on_dialogSingleInstance_delete_event(object obj, DeleteEventArgs args) { dialogSingleInstance.Destroy(); HandleQuit(); //Application.Quit(); } public void on_buttonSIClose_clicked(object obj, EventArgs args) { dialogSingleInstance.Destroy(); HandleQuit(); //Application.Quit(); } ///####################################################################### /// WINDOW MAIN CLOSE HANDLER /// /// MainWindow delete window handler /// public void OnWindowMainDeleted(object obj, DeleteEventArgs args) { Logger.DbgLog("GUI:CasaMain.OnWindowMainDeleted() - BEGIN"); //windowMain.Destroy(); HandleQuit(); //Gtk.Application.Quit (); args.RetVal = true; Logger.DbgLog("GUI:CasaMain.OnWindowMainDeleted() - END"); } private void HandleQuit() { if (mCasaTray != null) { if (m_bNotifyUser) { // StillRunning(null, null); // prompt user MessageDialog md=new MessageDialog(null,Gtk.DialogFlags.Modal, Gtk.MessageType.Info, Gtk.ButtonsType.Close, "CASA Manager will continue to run in the task bar"); md.SetPosition(Gtk.WindowPosition.Center); md.Response +=new ResponseHandler(md_Response); md.Modal = true; md.SetIconFromFile(Common.CASAICONS); md.Show(); m_bNotifyUser = false; } mCasaTray.CasaManagerQuit(); return; } else Application.Quit(); } ///####################################################################### /// StillRunning /// /// /// public void StillRunning(object obj, EventArgs args) { Logger.DbgLog("GUI:CasaMain.StillRunning() - BEGIN"); Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogStillRunning", null); gxmlTemp.Autoconnect (this); dialogStillRunning.TransientFor = windowMain; Logger.DbgLog("GUI:CasaMain.StillRunning() - END"); } public void btnStillRunning_clicked(object obj, EventArgs args) { if (checkbuttonCloseMessage.Active) { m_bNotifyUser = false; } dialogStillRunning.Destroy(); } ///####################################################################### /// WINDOW MAIN FOCUS /// internal void Focus() { if (windowMain != null) windowMain.Present(); } internal void Hide() { if (windowMain != null) windowMain.Visible = false; } internal void Show() { if (windowMain == null) MasterPasswordAuthentication(); else { RefreshStores(); windowMain.Visible = true; } } internal void Dispose() { if (windowMain != null) windowMain.Destroy(); } internal void RefreshStores() { if( Common.IS_MICASA ) objMiCasa.AggregateStore(); if( Common.IS_FIREFOX ) objFirefox.AggregateStore(); if( Common.IS_MOZILLA ) objMozilla.AggregateStore(); if( Common.IS_KDEWALLET ) objKdeWallet.AggregateStore(); if( Common.IS_GNOMEKEYRING ) objGnomeKeyring.AggregateStore(); } ///####################################################################### /// LOGGING WINDOW operations /// public void on_view_log_file1_activate(object obj, EventArgs args) { } public void on_enable_logging1_activate(object obj, EventArgs args) { Gtk.CheckMenuItem miLog = (Gtk.CheckMenuItem)obj; if (miLog.Active) OpenLogWindow(); else CloseLogWindow(); } internal void OpenLogWindow() { Glade.XML gxmlTemp = new Glade.XML (Common.GladeFile, "dialogLog", null); gxmlTemp.Autoconnect (this); Gtk.TreeViewColumn col1 = new Gtk.TreeViewColumn("", new Gtk.CellRendererText(), "text", 0); tvLog.AppendColumn(col1); Logger.ActivateLogWindow(tvLog); } internal void CloseLogWindow() { Logger.StopLogWindow(); dialogLogin.Dispose(); dialogLogin.Destroy(); } ///########################################################################### /// Help Handlers ///########################################################################### public void OnMenuHelpActivate(object sender, EventArgs args) { Common.ShowHelpUrl("Contents.htm"); } } } ///########################################################################### /// END OF FILE ///###########################################################################