--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/MsvConnectionValidation.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,359 @@
+/*
+* Copyright (c) 2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Static functions for validating account settings prior to connection
+*
+*/
+
+
+#include <eikenv.h>
+#include <eikbtgpc.h>
+#include <eikseced.h>
+#include <iapprefs.h>
+#include <smtpset.h>
+#include <pop3set.h>
+#include <imapset.h>
+#include <MsvPrgReporter.h>
+#include <imum.rsg> // R_MBXS_SETTINGS_MAIL_SAVE_PSWRD_QRY
+#include <AknQueryDialog.h>
+#include <SenduiMtmUids.h>
+#include <ImumInternalApi.h> // CImumInternalApi
+#include "ImumPanic.h"
+#include "EmailUtils.H"
+#include "ComDbUtl.h"
+#include "MsvConnectionValidation.h"
+#include "ImumUsernameAndPasswordDialog.h"
+#include "ImumMtmLogging.h"
+#include "IMSSettingsNoteUi.h"
+#include "ImumMboxSettingsUtils.h"
+#include <ImumInMailboxServices.h>
+#include <ImumInMailboxUtilities.h>
+#include <ImumInSettingsKeys.h>
+#include "EmailFeatureUtils.h"
+#include "ImumDaErrorCodes.h"
+
+// CONSTANTS
+const TInt KImumSettingsIapPreferenceNumber = 0;
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::RunAndHandleLoginDialogL()
+// ----------------------------------------------------------------------------
+//
+TIMASPasswordSave MsvConnectionValidation::RunAndHandleLoginDialogL(
+ TDes8& aUserName,
+ TDes8& aPassword,
+ TBool& aPasswordTemporary )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::RunAndHandleLoginDialogL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ TIMASPasswordSave ret = EIMASPasswordNoSave;
+ // Store the username and password temporarily to prevent losing them
+ TMuiuPasswordText tempUsername;
+ TMuiuPasswordText tempPassword;
+ tempUsername.Copy( aUserName );
+ tempPassword.Copy( aPassword );
+
+ // New values are accepted, but the user's permission is required to store
+ // the password to the settings
+ if ( RunUsernameAndPasswordDialogL( tempUsername, tempPassword ) )
+ {
+ // Store settings.
+ aUserName.Copy( tempUsername );
+ aPassword.Copy( tempPassword );
+
+ // If the user answers no, set the password temporary
+ if ( !CIMSSettingsNoteUi::ShowQueryL(
+ R_MBXS_SETTINGS_MAIL_SAVE_PSWRD_QRY, R_EMAIL_CONFIRMATION_QUERY ) )
+ {
+ aPasswordTemporary = ETrue;
+ ret = EIMASPasswordTempSave;
+ }
+ else
+ {
+ aPasswordTemporary = EFalse;
+ ret = EIMASPasswordPermanentSave;
+ }
+ }
+ else
+ {
+ // Leave everything untouched
+ ret = EIMASPasswordCancelSave;
+ }
+ IMUM_OUT();
+
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::CheckAndPromptForPasswordL
+// Check that there is a password specified, if not, prompt user to enter one
+// and store it in the settings.
+// ----------------------------------------------------------------------------
+TBool MsvConnectionValidation::CheckAndPromptForPasswordL(
+ CImumInternalApi& aMailboxApi,
+ TMsvId aServiceId,
+ TMsvLoginData aLoginData,
+ TInt& aLoginRetryCounter )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::CheckAndPromptForPasswordL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ TBool ret = EFalse;
+
+ // Temporary information is not accepted as valid data
+ if ( aLoginData.iIsPasswordTemporary )
+ {
+ // Don't initialize temp password into a username/password query dialog
+ aLoginData.iPassword.Zero();
+ }
+
+ if ( aLoginData.iUsername.Length() && aLoginData.iPassword.Length() )
+ {
+ // Have a valid password.
+ ret = ETrue;
+ }
+ else
+ {
+ aLoginRetryCounter++;
+
+ // Run dialog
+ TIMASPasswordSave save = EIMASPasswordCancelSave;
+
+ if( aMailboxApi.IsEmailFeatureSupportedL(
+ CImumInternalApi::EMailLockedSettings ) )
+ {
+ CIMSSettingsNoteUi::ShowNoteL(
+ R_IMUM_ERROR_LOCKED_SETTIGNS,
+ EIMSErrorNote );
+ }
+ else
+ {
+ save = RunAndHandleLoginDialogL(
+ aLoginData.iUsername,
+ aLoginData.iPassword,
+ aLoginData.iIsPasswordTemporary );
+ }
+
+ switch ( save )
+ {
+ case EIMASPasswordTempSave:
+ case EIMASPasswordPermanentSave:
+ // Save settings (login info) into data base.
+ ImumMboxSettingsUtils::SetLoginInformationL( aMailboxApi,
+ aLoginData.iUsername, aLoginData.iPassword,
+ aLoginData.iIsPasswordTemporary, aServiceId );
+ ret = ETrue;
+ break;
+ case EIMASPasswordCancelSave:
+ case EIMASPasswordNoSave:
+ default:
+ ret = EFalse;
+ }
+ }
+ IMUM_OUT();
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::ShowLoginDetailsRejectionDlgL
+//
+// Prompt the user to check the login details for aRcvServiceId, allowing them to change the
+// details. Returns EFalse if user cancels.
+//
+// ----------------------------------------------------------------------------
+TBool MsvConnectionValidation::ShowLoginDetailsRejectionDlgL(
+ CImumInternalApi& aMailboxApi,
+ TMsvId aServiceId )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::ShowLoginDetailsRejectionDlgL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ // Get settings.
+ TBuf8<KImasLoginLength> username8;
+ TBuf8<KImasPasswordLength> password8;
+ TBool isPasswordTemporary = EFalse;
+
+ // Load login information
+ ImumMboxSettingsUtils::GetLoginInformationL(
+ aMailboxApi,
+ username8,
+ password8,
+ isPasswordTemporary,
+ aServiceId );
+
+ TInt ret = EIMASPasswordCancelSave;
+
+ // Run dialog if email settings lock is not active.
+ if( aMailboxApi.IsEmailFeatureSupportedL(
+ CImumInternalApi::EMailLockedSettings ) )
+ {
+ CIMSSettingsNoteUi::ShowNoteL(
+ R_IMUM_ERROR_LOCKED_SETTIGNS,
+ EIMSErrorNote );
+ }
+ else
+ {
+ ret = RunAndHandleLoginDialogL(
+ username8,
+ password8,
+ isPasswordTemporary );
+ }
+
+ // Save login information
+ ImumMboxSettingsUtils::SetLoginInformationL(
+ aMailboxApi,
+ username8,
+ password8,
+ isPasswordTemporary,
+ aServiceId );
+ IMUM_OUT();
+
+ return ( ret == EIMASPasswordCancelSave ? EFalse : ETrue );
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::IsAlwaysAskSet()
+// ----------------------------------------------------------------------------
+//
+TBool MsvConnectionValidation::IsAlwaysAskSet(
+ const CImIAPPreferences& iapPref )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::IsAlwaysAskSet, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ TImIAPChoice iapChoice =
+ iapPref.IAPPreference( KImumSettingsIapPreferenceNumber );
+
+ // Always ask is set, when prompting is set and iap is set to 0
+ if ( iapChoice.iDialogPref == ECommDbDialogPrefPrompt &&
+ iapChoice.iIAP == 0 )
+ {
+ IMUM_OUT();
+ return ETrue;
+ }
+ IMUM_OUT();
+
+ return EFalse;
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::InstantiateSettingsObjectLC
+//
+// Create the appropriate type of settings object for aEntry.
+//
+// ----------------------------------------------------------------------------
+CImBaseEmailSettings* MsvConnectionValidation::InstantiateSettingsObjectLC(
+ const TMsvEntry& aEntry,
+ TUid& aMtmType)
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::InstantiateSettingsObjectLC, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ CImBaseEmailSettings* ret = NULL;
+ aMtmType = aEntry.iMtm;
+ switch(aMtmType.iUid)
+ {
+ case KSenduiMtmSmtpUidValue:
+ ret = new(ELeave) CImSmtpSettings;
+ break;
+ case KSenduiMtmPop3UidValue:
+ ret = new(ELeave) CImPop3Settings;
+ break;
+ case KSenduiMtmImap4UidValue:
+ ret = new(ELeave) CImImap4Settings;
+ break;
+ default:
+ User::Panic(KImumMtmUiPanic,EPanicUnknownMtmType);
+ break;
+ }
+ CleanupStack::PushL(ret);
+ IMUM_OUT();
+ return ret;
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::RunUsernameAndPasswordDialogL
+//
+// ----------------------------------------------------------------------------
+TInt MsvConnectionValidation::RunUsernameAndPasswordDialogL(
+ TDes& aUserName,
+ TDes& aPassword )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::RunUsernameAndPasswordDialogL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ CImumUsernameAndPasswordDialog* dlg =
+ CImumUsernameAndPasswordDialog::NewL( aUserName, aPassword );
+ IMUM_OUT();
+ return dlg->ExecuteLD(R_CONUTL_LOGINDETAILS_DLG);
+ }
+
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::GetServiceNameL
+//
+// ----------------------------------------------------------------------------
+void MsvConnectionValidation::GetServiceNameL(
+ CMsvSession& aSession,
+ TMsvId aServiceId,
+ TDes& aServiceName )
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::GetServiceNameL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ CMsvEntry* centry = aSession.GetEntryL(aServiceId);
+ aServiceName = centry->Entry().iDetails;
+ delete centry;
+ IMUM_OUT();
+ }
+
+// ----------------------------------------------------------------------------
+// MsvConnectionValidation::GetServiceIapNameL
+//
+// ----------------------------------------------------------------------------
+void MsvConnectionValidation::GetServiceIapNameL(
+ CImumInSettingsData& aAccountSettings, TUid aMtmUid, TDes& aIapName)
+ {
+ IMUM_STATIC_CONTEXT( MsvConnectionValidation::GetServiceIapNameL, 0, mtm, KImumMtmLog );
+ IMUM_IN();
+
+ TInt error = aAccountSettings.Validate();
+
+ if ( !error )
+ {
+ TInt connection = ( aMtmUid == KSenduiMtmSmtpUid ) ? 1 : 0;
+
+ aAccountSettings[connection].GetAttr(
+ TImumInSettings::EKeyAccessPointName,
+ aIapName );
+ }
+ // handle the error caused by invalid email address
+ else if (( error == TImumDaErrorCode::EEmailAddressNotSet ) ||
+ ( error == TImumDaErrorCode::EEmailAddressEmpty ) ||
+ ( error == TImumDaErrorCode::EEmailAddressInvalid ))
+ {
+ CIMSSettingsNoteUi::ShowNoteL( R_IMUM_EDIT_OWN_EMAIL_ADDRESS_ERROR_TEXT,
+ EIMSInformationNote, ETrue );
+ User::Leave( KErrNotReady );
+ }
+ else
+ {
+ User::Leave( KErrNotReady );
+ }
+ IMUM_OUT();
+ }
+
+
+// End of File