diff -r 09b1ac925e3f -r 03674e5abf46 cpsecplugins/cpadvancedsecplugin/src/cpcerttrustview.cpp --- a/cpsecplugins/cpadvancedsecplugin/src/cpcerttrustview.cpp Tue Aug 31 16:04:40 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,379 +0,0 @@ -/* -* Copyright (c) 2010 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: Implementation of class CCertManUIContainerTrust. -* Maintains correct list of trusted clients depending -* on the certificate that was in focus in Authority -* certificates view when Trust Settings view was entered. -* Shows and changes correct Yes/No text for the Trusted client. -* -*/ - -// INCLUDE FILES -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include -#include <../../inc/cpsecplugins.h> -#include "cpcerttrustview.h" -#include "cpcertdatacontainer.h" -#include "cpcertmanuisyncwrapper.h" -#include "cpuitrustids.h" - -const TInt KMidpCertStoreUid = 0x101F5B71; - -// ============================= LOCAL FUNCTIONS =============================== - -// ================= MEMBER FUNCTIONS ======================= - -CpCertTrustView::CpCertTrustView( TInt certificateIndex, CpCertDataContainer& certDataContainer, QGraphicsItem *parent /*= 0*/) - : CpBaseSettingView(0,parent), mCertDataContainer(certDataContainer), mCertificateIndex(certificateIndex) - { - setTitle(tr("Trust Settings")); - viewTrustSettings(); - } - -// --------------------------------------------------------- -// CpCertTrustView::~CpCertTrustView() -// Destructor -// --------------------------------------------------------- -// -CpCertTrustView::~CpCertTrustView() - { - delete mAppInfoManager; - mClientUids.Close(); - delete mFormModel; - mTrustedClients.erase(mTrustedClients.begin(), mTrustedClients.end()); - mTrustValues.erase(mTrustValues.begin(), mTrustValues.end()); - } - - -void CpCertTrustView::viewTrustSettings() - { - RDEBUG("0", 0); - mTrustedClients << " \tWAP connection\t\t"; - mTrustedClients << " \tMail and Image conn.\t\t"; - mTrustedClients << " \tNative installing\t\t"; - mTrustedClients << " \tJava installing\t\t"; - mTrustedClients << " \tOCSP validation\t\t"; - mTrustedClients << " \tVPN\t\t"; - mTrustedClients << " \tWidget Installation\t\t"; - - mTrustValues << "On"; - mTrustValues << "Off"; - - try - { - QT_TRAP_THROWING( mAppInfoManager = - CCertificateAppInfoManager::NewL( mCertDataContainer.iRfs, EFalse ); - updateListBoxL();) - } - catch(std::exception& exception) - { - QString error(exception.what()); - QT_TRAP_THROWING( mCertDataContainer.ShowErrorNoteL( error.toInt()) ); - throw(exception); - } - } - - -// --------------------------------------------------------------------------- -// CpCertTrustView::UpdateListBoxL() -// Puts correct Trust Settings text to listbox and correct value (yes/no) -// to the setting, asks the value from CheckCertificateClientTrust -// For X509 certificates, only one Application is currently supported -// (Application controller), more applications maybe added later however, -// so one additional application has been left in comments as an example. -// WAP connection and Application installer have their names from resources -// and thus localized, other additional application get their names from -// TCertificateAppInfo's Name() function. -// --------------------------------------------------------------------------- -// - -void CpCertTrustView::updateListBoxL() - { - RDEBUG("0", 0); - mClientUids.Reset(); - - TInt clientCount = 0; - - // Use certificate index from previous view - CCTCertInfo* entry = mCertDataContainer.iCALabelEntries[ mCertificateIndex ]->iCAEntry; - - // Here MCTCertApps should be used to get client options, but it is not properly - // supported in any cert store. It should be possible to get the MCTCertApps - // through token's GetInterface function. - if ( entry->Token().TokenType().Type() == TUid::Uid( KTokenTypeFileCertstore ) ) - { - if ( !mAppInfoManager ) - { - User::Leave( KErrArgument ); - } - RArray apps; - apps = mAppInfoManager->Applications(); - for ( TInt i = 0; i < apps.Count(); i++ ) - { - if ( apps[i].Id() != KCertManUIViewTrustJavaInstallingId && - apps[i].Id() != KCertManUIViewTrustApplicationControllerId ) - { - mClientUids.Append( apps[i].Id() ); - } - } - } - else - { - mCertDataContainer.iWrapper->GetApplicationsL( - mCertDataContainer.CertManager(), *entry, mClientUids ); - } - - // This is needed because MIDPCertStore does not support MCTCertApps - if ( mClientUids.Count() == 0 && - entry->Token().TokenType().Type() == TUid::Uid( KMidpCertStoreUid ) ) - { - mClientUids.Append( KCertManUIViewTrustJavaInstallingId ); - } - - if ( EX509Certificate != entry->CertificateFormat() ) - { - return; - } - TInt resIndex = KErrNotFound; - QList itemArray; - QList trustValue; - clientCount = mClientUids.Count(); - if ( clientCount > 0 ) - { - for ( TInt k = 0; k < clientCount; k++ ) - { - resIndex = trustIdIndex( mClientUids[k] ); - if ( resIndex == KErrNotFound ) - { - continue; - } - - // based on the trust list update the array - TBool trustState = EFalse; - QString item = mTrustedClients[ resIndex ]; - trustState = checkCertificateClientTrustL( mClientUids[k], *entry ); - // insert the index which would be used to retrieve the value from mTrustedClients - itemArray.insert(k,resIndex); - - if ( trustState ) - { - trustValue.insert(k,1); - } - else - { - trustValue.insert(k,0); - } - } - } - // display the list - QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical); - setLayout(layout); - std::auto_ptr form(new HbDataForm()); - mFormModel = new HbDataFormModel(); - - HbListWidget* mCertLabelList = new HbListWidget(this); - std::auto_ptr certLabel(q_check_ptr(new HbListWidgetItem())); - const TDesC& label = entry->Label(); - certLabel->setText(QString( (QChar*)label.Ptr(),label.Length() ) ); - mCertLabelList->addItem(certLabel.get()); - certLabel.release(); - - RDEBUG("0", 0); - - int count = itemArray.size(); - for( int index = 0 ;index < count; ++index) - { - std::auto_ptr item (q_check_ptr(new HbDataFormModelItem( - HbDataFormModelItem::ToggleValueItem, - mTrustedClients[itemArray[index]] ) )); - - if( trustValue[index] == 1) - { - item->setContentWidgetData("text",mTrustValues[0]); - item->setContentWidgetData("additionalText",mTrustValues[1]); - } - else - { - item->setContentWidgetData("text",mTrustValues[1]); - item->setContentWidgetData("additionalText",mTrustValues[0]); - } - mFormModel->appendDataFormItem(item.get()); - item.release(); - } - - form->setModel(mFormModel); - layout->addItem(mCertLabelList); - layout->addItem(form.get()); - form.release(); - } - - -void CpCertTrustView::saveTrustSettings() - { - RDEBUG("0", 0); - CCTCertInfo& entry = *( mCertDataContainer.iCALabelEntries[ mCertificateIndex ]->iCAEntry ); - if ( entry.IsDeletable() ) - { - TInt itemCount = mFormModel->rowCount(); - RArray newUids; - QT_TRAP_THROWING - ( - CleanupClosePushL( newUids ); - - for(int index = 0;indexitem(index); - QString trustValue = item->contentWidgetData("text").toString(); - if(trustValue == "On") - { - newUids.Append(trusterId(mTrustedClients[index])); - } - } - if(newUids.Count() > 0 ) - { - mCertDataContainer.iWrapper->SetApplicabilityL( mCertDataContainer.CertManager(), entry, newUids ); - } - CleanupStack::PopAndDestroy(&newUids); - ) - } - } - -TUid CpCertTrustView::trusterId(const QString& clientDescription) const - { - RDEBUG("0", 0); - TUid retValue = TUid::Uid(0); - if( clientDescription == " \tWAP connection\t\t" ) - retValue = KCertManUIViewTrustWapConnectionId; - else if( clientDescription == " \tMail and Image conn.\t\t" ) - retValue = KCertManUIViewTrustMailAndImageConnId; - else if( clientDescription == " \tNative installing\t\t" ) - retValue = KCertManUIViewTrustApplicationControllerId; - else if( clientDescription == " \tJava installing\t\t" ) - retValue = KCertManUIViewTrustJavaInstallingId; - else if( clientDescription == " \tOCSP validation\t\t" ) - retValue = KCertManUIViewOCSPCheckInstallingId; - else if( clientDescription == " \tVPN\t\t" ) - retValue = KCertManUIViewTrustVPNId; - else if( clientDescription == " \tWidget Installation\t\t" ) - retValue = KCertManUIViewTrustWidgetInstallId; - return retValue; - } - -// --------------------------------------------------------------------------- -// CpCertTrustView::trustIdIndex( TUid trustUid ) -// --------------------------------------------------------------------------- -// -TInt CpCertTrustView::trustIdIndex( TUid trustUid ) const - { - RDEBUG("0", 0); - TInt resIndex = KErrNotFound; - - if ( trustUid == KCertManUIViewTrustApplicationControllerId ) - { - resIndex = KTrustSettingsResourceIndexAppCtrl; - } - else if( trustUid == KCertManUIViewTrustWapConnectionId ) - { - resIndex = KTrustSettingsResourceIndexWAP; - } - else if ( trustUid == KCertManUIViewTrustMailAndImageConnId ) - { - resIndex = KTrustSettingsResourceIndexMailAndImageConn; - } - else if ( trustUid == KCertManUIViewTrustJavaInstallingId ) - { - resIndex = KTrustSettingsResourceIndexJavaInstall; - } - else if ( trustUid == KCertManUIViewOCSPCheckInstallingId ) - { - resIndex = KTrustSettingsResourceIndexOCSPCheck; - } - else if ( trustUid == KCertManUIViewTrustVPNId ) - { - resIndex = KTrustSettingsResourceIndexVPN; - } - else if ( trustUid == KCertManUIViewTrustWidgetInstallId ) - { - resIndex = KTrustSettingsResourceIndexWidget; - } - return resIndex; - } - - -// --------------------------------------------------------------------------- -// CpCertTrustView::CheckCertificateClientTrustL(const TUid aClientTUid, -// CCTCertInfo& aEntry) const -// Checks if a certificate trusts a client -// * Certificate format == ECrX509Certificate ECrX968Certificate ECrCertificateURL -// are not supported if certificate location == ECrCertLocationWIMCard -// * Certificate format == ECrX968Certificate ECrCertificateURL are not supported -// if certificate location == ECrCertLocationCertMan -// * Certificate location == ECrCertLocationWIMURL ECrCertLocationPhoneMemory -// ECrCertLocationPhoneMemoryURL are not supported -// --------------------------------------------------------------------------- -// -TBool CpCertTrustView::checkCertificateClientTrustL( - const TUid clientUid, const CCTCertInfo& entry ) const - { - RDEBUG("0", 0); - TBool trustSettingTrusted = EFalse; - TCertificateFormat format = entry.CertificateFormat(); - - if ( format == EX509Certificate ) - { - - RArray trusterUids; - CleanupClosePushL( trusterUids ); - - //Owned by mCertDataContainer. - CUnifiedCertStore*& store = mCertDataContainer.CertManager(); - // Get trusting applications' Uids for the one selected - // certificate entry - mCertDataContainer.iWrapper->GetApplicationsL( store, entry, trusterUids ); - - // get the number of trusting applications for one - // selected certificate entry - TInt trusterCount = trusterUids.Count(); - // in this loop, for every trusting application in one - // selected certificate entry - for ( TInt i = 0; i < trusterCount; ++i ) - { - // put the trusting application's Uid to TUid truster - if ( clientUid == trusterUids[i] ) - { - trustSettingTrusted = ETrue; - break; - } - } - CleanupStack::PopAndDestroy(&trusterUids); - } - - return trustSettingTrusted; - } - -// End of File -