diff --git a/lib/db_base.cpp b/lib/db_base.cpp index 72123561..73232322 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -453,7 +453,7 @@ QVariant db_base::data(const QModelIndex &index, int role) const case Qt::BackgroundRole: return item->bg_color(hd); case Qt::UserRole: - return item->isVisible(); + return item->isVisible() != 0 && (!Settings["hide_unusable"] || !item->unusable()); case Qt::ToolTipRole: if (hd->id==HD_internal_name || item->isVisible()==1) return item->column_tooltip(hd); diff --git a/lib/pki_base.h b/lib/pki_base.h index d69fbd13..a83a6c94 100644 --- a/lib/pki_base.h +++ b/lib/pki_base.h @@ -190,6 +190,10 @@ class pki_base : public QObject virtual QVariant column_tooltip(const dbheader *hd) const; virtual a1time column_a1time(const dbheader *hd) const; virtual bool visible() const; + virtual bool unusable() const + { + return false; + } int isVisible(); bool childVisible() const; diff --git a/lib/pki_x509.cpp b/lib/pki_x509.cpp index 543fe015..5488e716 100644 --- a/lib/pki_x509.cpp +++ b/lib/pki_x509.cpp @@ -1091,6 +1091,11 @@ QVariant pki_x509::getIcon(const dbheader *hd) const return QVariant(QPixmap(icon_names[pixnum])); } +bool pki_x509::unusable() const +{ + return getNotAfter() < a1time::now() || isRevoked(); +} + bool pki_x509::visible() const { if (pki_x509super::visible()) diff --git a/lib/pki_x509.h b/lib/pki_x509.h index b48b37bf..e1cc657c 100644 --- a/lib/pki_x509.h +++ b/lib/pki_x509.h @@ -136,6 +136,7 @@ class pki_x509 : public pki_x509super bool hasExtension(int nid) const; bool cmpIssuerAndSerial(pki_x509 *refcert); bool visible() const; + bool unusable() const; void updateView(); void print(BioByteArray &b, enum print_opt opt) const; x509v3ext getExtByNid(int nid) const; diff --git a/lib/settings.cpp b/lib/settings.cpp index be4bc733..36647c2c 100644 --- a/lib/settings.cpp +++ b/lib/settings.cpp @@ -47,6 +47,7 @@ settings::settings() defaul["serial_len"] = "64"; defaul["fp_separator"] = ":"; defaul["fp_digits"] = "2"; + defaul["hide_unusable"] = "no"; defaul["KeyFormat"] = QString::number(DEFAULT_KEY_CLIPBOARD_TYPE); defaul["CertFormat"] = QString::number(DEFAULT_CERT_CLIPBOARD_TYPE); diff --git a/widgets/CertTreeView.cpp b/widgets/CertTreeView.cpp index 8f2b5820..69145c05 100644 --- a/widgets/CertTreeView.cpp +++ b/widgets/CertTreeView.cpp @@ -31,6 +31,13 @@ void CertTreeView::fillContextMenu(QMenu *menu, QMenu *subExport, X509SuperTreeView::fillContextMenu(menu, subExport, index, indexes); + QAction *a = menu->addAction(tr("Hide unusable certificates")); + a->setCheckable(true); + a->setChecked(Settings["hide_unusable"]); + + connect(a, SIGNAL(triggered(bool)), + this, SLOT(toggleHideExpired(bool))); + menu->addAction(tr("Import PKCS#12"), this, SLOT(loadPKCS12())); menu->addAction(tr("Import from PKCS#7"), this, SLOT(loadPKCS7())); @@ -264,3 +271,10 @@ ExportDialog *CertTreeView::exportDialog(const QModelIndexList &indexes) pki_export::select(x509, basemodel->exportFlags(indexes)), "certexport"); } + +void CertTreeView::toggleHideExpired(bool hide) +{ + qDebug() << "Hide expired certificates" << hide; + Settings["hide_unusable"] = hide; + columnsChanged(); +} \ No newline at end of file diff --git a/widgets/CertTreeView.h b/widgets/CertTreeView.h index fa765416..be223ff2 100644 --- a/widgets/CertTreeView.h +++ b/widgets/CertTreeView.h @@ -47,5 +47,6 @@ class CertTreeView: public X509SuperTreeView void unRevoke(); void load(); void loadTaKey(); + void toggleHideExpired(bool); }; #endif