diff --git a/core/generator.h b/core/generator.h index 5b4d88a02..8f9f5bed3 100644 --- a/core/generator.h +++ b/core/generator.h @@ -20,6 +20,7 @@ #include "global.h" #include "okularcore_export.h" #include "pagesize.h" +#include "signatureutils.h" #include #include @@ -311,6 +312,8 @@ public: virtual bool sign( const Okular::Annotation* /*pWhichAnnotation*/, const QString& /*rFilename*/) { return false; } + virtual CertificateStore* getCertStore() { return nullptr; } + /** * This method can be called to trigger the generation of * a new pixmap as described by @p request. diff --git a/core/signatureutils.cpp b/core/signatureutils.cpp index 48d77997d..0b19eaf74 100644 --- a/core/signatureutils.cpp +++ b/core/signatureutils.cpp @@ -154,3 +154,16 @@ const CertificateInfo &SignatureInfo::certificateInfo() const static CertificateInfo dummy; return dummy; } + +CertificateStore::CertificateStore() +{ +} + +CertificateStore::~CertificateStore() +{ +} + +QList CertificateStore::getSigningCertificates() const +{ + return QList(); +} diff --git a/core/signatureutils.h b/core/signatureutils.h index a087f620d..580e7bc79 100644 --- a/core/signatureutils.h +++ b/core/signatureutils.h @@ -239,6 +239,29 @@ private: Q_DISABLE_COPY(SignatureInfo) }; +/** + * @short A helper class to store information about x509 certificate + */ +class OKULARCORE_EXPORT CertificateStore +{ + public: + /** + * Destructor + */ + virtual ~CertificateStore(); + + /** + * Returns list of valid, usable signing certificates + */ + virtual QList getSigningCertificates() const; + + protected: + CertificateStore(); + + private: + Q_DISABLE_COPY( CertificateStore ) +}; + } #endif diff --git a/generators/poppler/generator_pdf.h b/generators/poppler/generator_pdf.h index 8b588840b..1ac98d568 100644 --- a/generators/poppler/generator_pdf.h +++ b/generators/poppler/generator_pdf.h @@ -103,6 +103,8 @@ public: bool canSign() const override {return true;} bool sign( const Okular::Annotation* pWhichAnnotation, const QString& rFilename ) override; + Okular::CertificateStore* getCertStore() override; + protected: SwapBackingFileResult swapBackingFile(QString const &newFileName, QVector &newPagesVector) override; bool doCloseDocument() override; diff --git a/generators/poppler/pdfsignatureutils.h b/generators/poppler/pdfsignatureutils.h index 4da1219ba..b018739f8 100644 --- a/generators/poppler/pdfsignatureutils.h +++ b/generators/poppler/pdfsignatureutils.h @@ -64,4 +64,18 @@ private: Okular::CertificateInfo *m_certfiticateInfo; }; +#ifdef HAVE_POPPLER_SIGNING + +class PopplerCertificateStore : public Okular::CertificateStore +{ + public: + PopplerCertificateStore(); + ~PopplerCertificateStore(); + + QList getSigningCertificates() const override; + //QList getSigningCertificates() const override; +}; + +#endif + #endif diff --git a/part/certificatetools.cpp b/part/certificatetools.cpp index bf6ae6b33..e8d68c682 100644 --- a/part/certificatetools.cpp +++ b/part/certificatetools.cpp @@ -44,6 +44,15 @@ void CertificateTools::setTools(const QStringList& /*items*/) foreach( const QString cert, certs ) { QListWidgetItem * listEntry = new QListWidgetItem( cert, m_list ); + (void)listEntry; + } + //QVector nssCerts = Poppler::getAvailableSigningCertificates(); + Poppler::getAvailableSigningCertificates(); + foreach( auto cert, nssCerts ) + { + QListWidgetItem * listEntry = new QListWidgetItem( cert->getSubjectInfo().commonName, + m_list ); + (void)listEntry; } updateButtons();