void CertificateInfoWidgetImpl::slotNextKey( const GpgME::Key & key ) { kdDebug() << "CertificateInfoWidgetImpl::slotNextKey( \"" << key.userID(0).id() << "\" )" << endl; if ( key.isNull() ) return; mFoundIssuer = true; mChain.push_front( key ); updateChainView(); // FIXME: cancel the keylisting. We're only interested in _one_ key. }
bool Kleo::KConfigBasedKeyFilter::matches( const GpgME::Key & key ) const { #ifdef MATCH #undef MATCH #endif #define MATCH(member,method) \ if ( member != DoesNotMatter && key.method() != bool( member == Set ) ) \ return false #define IS_MATCH(what) MATCH( m##what, is##what ) #define CAN_MATCH(what) MATCH( mCan##what, can##what ) IS_MATCH( Revoked ); IS_MATCH( Expired ); IS_MATCH( Disabled ); IS_MATCH( Root ); CAN_MATCH( Encrypt ); CAN_MATCH( Sign ); CAN_MATCH( Certify ); CAN_MATCH( Authenticate ); MATCH( mHasSecret, isSecret ); #undef MATCH if ( mIsOpenPGP != DoesNotMatter && bool( key.protocol() == GpgME::Context::OpenPGP ) != bool( mIsOpenPGP == Set ) ) return false; if ( mWasValidated != DoesNotMatter && bool( key.keyListMode() & GpgME::Context::Validate ) != bool( mWasValidated == Set ) ) return false; switch ( mOwnerTrust ) { default: case LevelDoesNotMatter: break; case Is: if ( key.ownerTrust() != mOwnerTrustReferenceLevel ) return false; break; case IsNot: if ( key.ownerTrust() == mOwnerTrustReferenceLevel ) return false; break; case IsAtLeast: if ( (int)key.ownerTrust() < (int)mOwnerTrustReferenceLevel ) return false; break; case IsAtMost: if ( (int)key.ownerTrust() > (int)mOwnerTrustReferenceLevel ) return false; break; } const GpgME::UserID uid = key.userID(0); switch ( mValidity ) { default: case LevelDoesNotMatter: break; case Is: if ( uid.validity() != mValidityReferenceLevel ) return false; break; case IsNot: if ( uid.validity() == mValidityReferenceLevel ) return false; break; case IsAtLeast: if ( (int)uid.validity() < (int)mValidityReferenceLevel ) return false; break; case IsAtMost: if ( (int)uid.validity() > (int)mValidityReferenceLevel ) return false; break; } return true; }
void CertificateInfoWidgetImpl::setKey( const GpgME::Key & key ) { mChain.clear(); mFoundIssuer = true; mHaveKeyLocally = false; listView->clear(); pathView->clear(); importButton->setEnabled( false ); if ( key.isNull() ) return; mChain.push_front( key ); startKeyExistanceCheck(); // starts a local keylisting to enable the // importButton if needed QListViewItem * item = 0; item = new QListViewItem( listView, item, i18n("Valid"), QString("From %1 to %2") .arg( time_t2string( key.subkey(0).creationTime() ), time_t2string( key.subkey(0).expirationTime() ) ) ); item = new QListViewItem( listView, item, i18n("Can be used for signing"), key.canSign() ? i18n("Yes") : i18n("No") ); item = new QListViewItem( listView, item, i18n("Can be used for encryption"), key.canEncrypt() ? i18n("Yes") : i18n("No") ); item = new QListViewItem( listView, item, i18n("Can be used for certification"), key.canCertify() ? i18n("Yes") : i18n("No") ); item = new QListViewItem( listView, item, i18n("Can be used for authentication"), key.canAuthenticate() ? i18n("Yes") : i18n("No" ) ); item = new QListViewItem( listView, item, i18n("Fingerprint"), key.primaryFingerprint() ); item = new QListViewItem( listView, item, i18n("Issuer"), Kleo::DN( key.issuerName() ).prettyDN() ); item = new QListViewItem( listView, item, i18n("Serial Number"), key.issuerSerial() ); const Kleo::DN dn = key.userID(0).id(); // FIXME: use the attributeLabelMap from certificatewizardimpl.cpp: static QMap<QString,QString> dnComponentNames; if ( dnComponentNames.isEmpty() ) { dnComponentNames["C"] = i18n("Country"); dnComponentNames["OU"] = i18n("Organizational Unit"); dnComponentNames["O"] = i18n("Organization"); dnComponentNames["L"] = i18n("Location"); dnComponentNames["CN"] = i18n("Common Name"); dnComponentNames["EMAIL"] = i18n("Email"); } for ( Kleo::DN::const_iterator dnit = dn.begin() ; dnit != dn.end() ; ++dnit ) { QString displayName = (*dnit).name(); if( dnComponentNames.contains(displayName) ) displayName = dnComponentNames[displayName]; item = new QListViewItem( listView, item, displayName, (*dnit).value() ); } const std::vector<GpgME::UserID> uids = key.userIDs(); if ( !uids.empty() ) { item = new QListViewItem( listView, item, i18n("Subject"), Kleo::DN( uids.front().id() ).prettyDN() ); for ( std::vector<GpgME::UserID>::const_iterator it = uids.begin() + 1 ; it != uids.end() ; ++it ) { if ( !(*it).id() ) continue; const QString email = QString::fromUtf8( (*it).id() ).stripWhiteSpace(); if ( email.isEmpty() ) continue; if ( email.startsWith( "<" ) ) item = new QListViewItem( listView, item, i18n("Email"), email.mid( 1, email.length()-2 ) ); else item = new QListViewItem( listView, item, i18n("A.k.a."), email ); } } updateChainView(); startCertificateChainListing(); startCertificateDump(); }