diff --git a/K7Main.cpp b/K7Main.cpp index 45195fd..55866a3 100644 --- a/K7Main.cpp +++ b/K7Main.cpp @@ -29,7 +29,7 @@ K7Main::K7Main(const WEnvironment& env) { m_config = NULL; m_btnUpload = NULL; m_btnImport = NULL; m_btnDelete = NULL; - m_btnCreate = NULL; m_popupCreate = NULL; + m_btnCreate = NULL; WApplication::setTitle(_APPNAME_); const WString bundle = WApplication::appRoot() + _APPNAME_; WApplication::instance()->messageResourceBundle().use(bundle.toUTF8()); @@ -58,7 +58,6 @@ K7Main::K7Main(const WEnvironment& env) OwnerTrustLevel[GpgME::Key::OwnerTrust::Ultimate] = TR("UidUltimate"); OwnerTrustLevel[GpgME::Key::OwnerTrust::Undefined] = TR("UidUndefined"); OwnerTrustLevel[GpgME::Key::OwnerTrust::Unknown] = TR("UidUnknown"); - m_popupUpload = NULL; m_popupDelete = NULL; m_keyEdit = new KeyEdit(this); WLink link; @@ -70,8 +69,8 @@ K7Main::K7Main(const WEnvironment& env) K7Main::~K7Main() { - delete m_config; delete m_popupUpload; delete m_popupDelete; - delete m_keyEdit; delete m_popupCreate; + delete m_config; + delete m_keyEdit; delete m_keyringIO; } void @@ -122,11 +121,9 @@ K7Main::Create() m_btnUpload = new WPushButton(TR("Upload")); m_btnUpload->setToolTip(TR("TTTUpload")); vblButtons->addWidget(unique_ptr (m_btnUpload)); - m_btnUpload->clicked().connect(this, &K7Main::ShowPopupUpload); m_btnImport = new WPushButton(TR("Import")); m_btnImport->setToolTip(TR("TTTImport")); vblButtons->addWidget(unique_ptr (m_btnImport)); - m_btnImport->clicked().connect(this, &K7Main::DoImportKey); m_btnImport->hide(); } // Add a delete button if current user is allowed @@ -135,16 +132,15 @@ K7Main::Create() m_btnDelete = new WPushButton(TR("Delete")); m_btnDelete->setToolTip(TR("TTTDelete")); vblButtons->addWidget(unique_ptr (m_btnDelete)); - m_btnDelete->clicked().connect(this, &K7Main::ShowPopupDelete); m_btnDelete->hide(); } vblButtons->addSpacing(150); vblButtons->addStretch(1); - if (m_config->CanCreateKeys()) { + if (m_config->CanCreateKeys()) + { m_btnCreate = new WPushButton(TR("Create")); m_btnCreate->setToolTip(TR("TTTCreate")); vblButtons->addWidget(unique_ptr (m_btnCreate)); - m_btnCreate->clicked().connect(this, &K7Main::ShowPopupCreate); } grlMain->addWidget(unique_ptr (cwButtons), 1, 1); @@ -158,6 +154,9 @@ K7Main::Create() root()->addWidget(cpp14::make_unique()); root()->addWidget(unique_ptr (m_cwMain)); + + m_keyringIO = new KeyringIO(this); + #ifdef DEVTIME // Save my fingertips. m_leSearch->setText("s"); @@ -300,7 +299,7 @@ void K7Main::OnKeyAnchorClicked(WAnchor * source) DisplayUids(id); DisplaySubKeys(id, secret); if (m_config->CanDelete()) // m_btnDelete is NULL otherwise - m_btnDelete->setHidden(!CanKeyBeDeleted(id)); + m_btnDelete->setHidden(!m_keyringIO->CanKeyBeDeleted(id)); } void K7Main::DisplayUids(const WString& fullKeyID, bool secret) @@ -415,183 +414,3 @@ void K7Main::DisplaySubKeys(const WString& fullKeyID, bool secret) } m_ttbSubKeys->show(); } - -void K7Main::ShowPopupUpload() { - if (m_popupUpload == NULL) { - m_popupUpload = new PopupUpload(m_btnUpload, m_tmwMessage); - m_popupUpload->Create(); - m_popupUpload->UploadDone().connect(this, &K7Main::OnUploadCompleted); - } - m_popupUpload->show(); -} - -void K7Main::OnUploadCompleted(const WString& spool) { - // Buffer the spool file name in the import button - m_btnImport->setAttributeValue("spool", spool); - m_btnImport->show(); - m_popupUpload->hide(); -} - -void K7Main::DoImportKey() { - const WString spool = m_btnImport->attributeValue("spool"); - Error e; - GpgMEWorker gpgw; - const WString fpr = gpgw.ImportKey(spool.toUTF8().c_str(), e); - m_btnImport->hide(); - m_btnImport->setAttributeValue("spool", ""); - if (e.code() != 0) { - m_tmwMessage->SetText(e.asString()); - return; - } - if (fpr.empty()) { - m_tmwMessage->SetText(TR("ImportError") + fpr); - return; - } - // Show the imported key - GpgME::Key k = gpgw.FindKey(fpr.toUTF8().c_str(), e, false); // A public is present anyway - if (e.code() != 0) { - m_tmwMessage->SetText(e.asString()); - return; - } - m_tmwMessage->SetText(TR("ImportSuccess") + fpr + WString(" - ") + WString(k.userID(0).name())); - m_leSearch->setText(fpr); - if (Tools::KeyHasSecret(fpr)) - m_config->UpdateSecretKeyOwnership(fpr, true); - Search(); -} - -bool K7Main::CanKeyBeDeleted(const WString& fullKeyID) { - // Caller should check m_config->canDelete first. m_btnDelete is null if can't delete. - Error e; - GpgMEWorker gpgw; - GpgME::Key k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, true); // Look for a private key - if (e.code() != 0 && e.code() != 16383) { // 16383 : end of file, when key is not private - m_tmwMessage->SetText(e.asString()); - return false; - } - // k can now be secret or public - if (k.isNull()) {// Is a public key - k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, false); - // Prepare actual delete - m_btnDelete->setAttributeValue("keyid", k.keyID()); - m_btnDelete->setAttributeValue("hasSecret", "0"); - return true; - } - /* - * k is now secret - * Is selected private key one of those that the current user manages ? - */ - vector curUserPrivKeys = m_config->PrivateKeyIds(); - vector::iterator it; - for (it = curUserPrivKeys.begin(); it != curUserPrivKeys.end(); it++) { - if (Tools::ConfigKeyIdMatchesKey(k, *it)) { - m_btnDelete->setAttributeValue("keyid", k.keyID()); - m_btnDelete->setAttributeValue("hasSecret", "1"); - return true; - } - } - return false; -} - -void K7Main::ShowPopupDelete() { - if (m_popupDelete == NULL) { - m_popupDelete = new PopupDelete(m_btnDelete, m_tmwMessage); - m_popupDelete->Create(); - m_popupDelete->GetDeleteButton()->clicked().connect(this, &K7Main::DoDeleteKey); - } - m_popupDelete->show(); -} - -void K7Main::DoDeleteKey() { - // Deleting keys requires the GPGME C API - Error c_e, e; - GpgMECWorker gpgcw; - GpgMEWorker gpgw; - const WString fullKeyID = m_btnDelete->attributeValue("keyid"); - const WString hasSecret = m_btnDelete->attributeValue("hasSecret"); - bool secret = true; - if (hasSecret == WString("0")) - secret = false; - // Get the key before deletion, to show its ID on success - GpgME::Key k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, secret); - if (e.code() != 0) { - m_tmwMessage->SetText(e.asString()); - return; - } - // Delete the key using the C API - const WString fpr(k.primaryFingerprint()); - bool res = gpgcw.DeleteKey(k.primaryFingerprint(), secret, c_e); - if (c_e.code() != 0) { - m_tmwMessage->SetText(c_e.asString()); - } else { - m_tmwMessage->SetText(TR("DeleteSuccess") + fpr + WString(" - ") + WString(k.userID(0).name())); - } - m_btnDelete->hide(); - m_popupDelete->hide(); - if (secret) - m_config->UpdateSecretKeyOwnership(fpr, false); - // Show that the key is no longer available - m_leSearch->setText(fpr); - Search(); -} - -void K7Main::ShowPopupCreate() -{ - if (m_popupCreate == NULL) - { - m_popupCreate = new PopupCreate(m_btnCreate, m_tmwMessage); - m_popupCreate->Create(); - m_popupCreate->GetApplyButton()->clicked().connect(this, &K7Main::DoCreateKey); - } - m_popupCreate->show(); -} - -void K7Main::DoCreateKey() -{ - if (!m_popupCreate->Validate()) - return; - Error e; - GpgME::Key k; - GpgMEWorker gpgw; - if (m_popupCreate->UseDefaultEngineAlgorithms()) - { - e = gpgw.CreateKeyWithEngineDefaultAlgo(k, m_popupCreate->GetName().toUTF8(), - m_popupCreate->GetEmail().toUTF8(), - m_popupCreate->GetComment().toUTF8(), - m_popupCreate->GetPassphrase().toUTF8(), - m_popupCreate->GetExpiry()); - } - else - { - e = gpgw.CreateKey(k, m_popupCreate->GetName().toUTF8(), - m_popupCreate->GetEmail().toUTF8(), - m_popupCreate->GetComment().toUTF8(), - m_popupCreate->GetArbitraryKeyAlgo().toUTF8().c_str(), - m_popupCreate->GetPassphrase().toUTF8(), - m_popupCreate->GetExpiry()); - // GPGME accepts a missing subkey. - if (e.code() == 0 && !m_popupCreate->GetArbitrarySubkeyAlgo().empty()) - e = gpgw.CreateSubKey(k, - m_popupCreate->GetArbitrarySubkeyAlgo().toUTF8().c_str(), - m_popupCreate->GetPassphrase().toUTF8(), - m_popupCreate->GetExpiry()); - } - if (e.code() != 0) - { - m_tmwMessage->SetText(e.asString()); - } - else - { - const WString fpr(k.primaryFingerprint()); - m_tmwMessage->SetText(TR("CreateSuccess") - + fpr + WString(" - ") + WString(k.userID(0).name())); - // Add the key fingerprint to the list of keys managed by the user. - m_config->UpdateSecretKeyOwnership(fpr, true); - m_popupCreate->hide(); -#ifndef DEVTIME - m_popupCreate->Reset(); -#endif - m_leSearch->setText(fpr); - Search(); - } -} diff --git a/K7Main.h b/K7Main.h index 3a4d7b9..e560634 100644 --- a/K7Main.h +++ b/K7Main.h @@ -22,20 +22,20 @@ #include #include #include "AppConfig.h" -#include "PopupUploader.h" -#include "PopupDeleter.h" -#include "PopupCreate.h" #include "TransientMessageWidget.h" #include "KeyEdit.h" +#include "KeyringIO.h" #include "global.h" using namespace Wt; class KeyEdit; +class KeyringIO; class K7Main : public WApplication { friend class KeyEdit; + friend class KeyringIO; public: K7Main(const WEnvironment& env); virtual ~K7Main(); @@ -59,10 +59,8 @@ private: WTreeTable * m_ttbKeys; WTreeTable * m_ttbUids; WTreeTable * m_ttbSubKeys; - PopupUpload * m_popupUpload; - PopupDelete * m_popupDelete; KeyEdit * m_keyEdit; - PopupCreate * m_popupCreate; + KeyringIO * m_keyringIO; /** * Finds public keys as per criteria, * and private keys if any is declared in config file for current client. @@ -90,48 +88,10 @@ private: * @param secret */ void DisplaySubKeys(const WString& fullKeyID, bool secret = false); - /** - * Shows a non-blocking popup to upload a key, - * with forward confirmation for upload. - */ - void ShowPopupUpload(); - /** - * Shows a button to import an uploaded key - * @param spool - */ - void OnUploadCompleted(const WString& spool); - /** - * Actually import the uploaded file. - */ - void DoImportKey(); - /** - * Shows a non-blocking popup to delete a key - */ - void ShowPopupDelete(); - /** - * All public keys can be deleted. - * Private keys can be deleted only if the user - * manages that key, as declared in the configuration file. - * @param fullKeyID - * @return - */ - bool CanKeyBeDeleted(const WString& fullKeyID); - /** - * Actually delete the key, with forward confirmation in the popup. - */ - void DoDeleteKey(); /** * Translates unit time to readable date. */ WString MakeDateTimeLabel(time_t ticks); - /** - * Shows a non-blocking popup to create keys. - */ - void ShowPopupCreate(); - /** - * Validates input and creates the keys. - */ - void DoCreateKey(); }; #endif /* K7MAIN_H */ diff --git a/KeyringIO.cpp b/KeyringIO.cpp new file mode 100644 index 0000000..5a7a42c --- /dev/null +++ b/KeyringIO.cpp @@ -0,0 +1,246 @@ +/* + * File: KeyringIO.cpp + * Author: SET - nmset@yandex.com + * License : GPL v2 + * Copyright SET - © 2019 + * + * Created on November 13, 2020, 6:46 PM + */ + +#include "KeyringIO.h" +#include "GpgMEWorker.h" +#include "GpgMECWorker.h" +#include "Tools.h" + +KeyringIO::KeyringIO(K7Main * owner) +{ + m_owner = owner; + m_popupUpload = NULL; + m_popupDelete = NULL; + m_popupCreate = NULL; + m_config = m_owner->m_config; + m_tmwMessage = m_owner->m_tmwMessage; + m_btnUpload = m_owner->m_btnUpload; + m_btnImport = m_owner->m_btnImport; + m_btnDelete = m_owner->m_btnDelete; + m_btnCreate = m_owner->m_btnCreate; + m_leSearch = m_owner->m_leSearch; + + if (m_config->CanImport()) + { + m_btnUpload->clicked().connect(this, &KeyringIO::ShowPopupUpload); + m_btnImport->clicked().connect(this, &KeyringIO::DoImportKey); + } + if (m_config->CanDelete()) + m_btnDelete->clicked().connect(this, &KeyringIO::ShowPopupDelete); + if (m_config->CanCreateKeys()) + m_btnCreate->clicked().connect(this, &KeyringIO::ShowPopupCreate); +} + +KeyringIO::~KeyringIO() +{ + delete m_popupUpload; + delete m_popupDelete; + delete m_popupCreate; +} + +void KeyringIO::ShowPopupUpload() +{ + if (m_popupUpload == NULL) + { + m_popupUpload = new PopupUpload(m_btnUpload, + m_tmwMessage); + m_popupUpload->Create(); + m_popupUpload->UploadDone().connect(this, &KeyringIO::OnUploadCompleted); + } + m_popupUpload->show(); +} + +void KeyringIO::OnUploadCompleted(const WString& spool) +{ + // Buffer the spool file name in the import button + m_btnImport->setAttributeValue("spool", spool); + m_btnImport->show(); + m_popupUpload->hide(); +} + +void KeyringIO::DoImportKey() +{ + const WString spool = m_btnImport->attributeValue("spool"); + Error e; + GpgMEWorker gpgw; + const WString fpr = gpgw.ImportKey(spool.toUTF8().c_str(), e); + m_btnImport->hide(); + m_btnImport->setAttributeValue("spool", ""); + if (e.code() != 0) + { + m_tmwMessage->SetText(e.asString()); + return; + } + if (fpr.empty()) + { + m_tmwMessage->SetText(TR("ImportError") + fpr); + return; + } + // Show the imported key + GpgME::Key k = gpgw.FindKey(fpr.toUTF8().c_str(), e, false); // A public is present anyway + if (e.code() != 0) + { + m_tmwMessage->SetText(e.asString()); + return; + } + m_tmwMessage->SetText(TR("ImportSuccess") + fpr + WString(" - ") + WString(k.userID(0).name())); + m_leSearch->setText(fpr); + if (Tools::KeyHasSecret(fpr)) + m_config->UpdateSecretKeyOwnership(fpr, true); + m_owner->Search(); +} + +bool KeyringIO::CanKeyBeDeleted(const WString& fullKeyID) +{ + // Caller should check m_config->canDelete first. m_btnDelete is null if can't delete. + Error e; + GpgMEWorker gpgw; + GpgME::Key k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, true); // Look for a private key + if (e.code() != 0 && e.code() != 16383) + { // 16383 : end of file, when key is not private + m_tmwMessage->SetText(e.asString()); + return false; + } + // k can now be secret or public + if (k.isNull()) + {// Is a public key + k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, false); + // Prepare actual delete + m_btnDelete->setAttributeValue("keyid", k.keyID()); + m_btnDelete->setAttributeValue("hasSecret", "0"); + return true; + } + /* + * k is now secret + * Is selected private key one of those that the current user manages ? + */ + vector curUserPrivKeys = m_config->PrivateKeyIds(); + vector::iterator it; + for (it = curUserPrivKeys.begin(); it != curUserPrivKeys.end(); it++) + { + if (Tools::ConfigKeyIdMatchesKey(k, *it)) + { + m_btnDelete->setAttributeValue("keyid", k.keyID()); + m_btnDelete->setAttributeValue("hasSecret", "1"); + return true; + } + } + return false; +} + +void KeyringIO::ShowPopupDelete() +{ + if (m_popupDelete == NULL) + { + m_popupDelete = new PopupDelete(m_btnDelete, + m_tmwMessage); + m_popupDelete->Create(); + m_popupDelete->GetDeleteButton()->clicked().connect(this, &KeyringIO::DoDeleteKey); + } + m_popupDelete->show(); +} + +void KeyringIO::DoDeleteKey() +{ + // Deleting keys requires the GPGME C API + Error c_e, e; + GpgMECWorker gpgcw; + GpgMEWorker gpgw; + const WString fullKeyID = m_btnDelete->attributeValue("keyid"); + const WString hasSecret = m_btnDelete->attributeValue("hasSecret"); + bool secret = true; + if (hasSecret == WString("0")) + secret = false; + // Get the key before deletion, to show its ID on success + GpgME::Key k = gpgw.FindKey(fullKeyID.toUTF8().c_str(), e, secret); + if (e.code() != 0) + { + m_tmwMessage->SetText(e.asString()); + return; + } + // Delete the key using the C API + const WString fpr(k.primaryFingerprint()); + bool res = gpgcw.DeleteKey(k.primaryFingerprint(), secret, c_e); + if (c_e.code() != 0) + { + m_tmwMessage->SetText(c_e.asString()); + } + else + { + m_tmwMessage->SetText(TR("DeleteSuccess") + fpr + WString(" - ") + WString(k.userID(0).name())); + } + m_btnDelete->hide(); + m_popupDelete->hide(); + if (secret) + m_config->UpdateSecretKeyOwnership(fpr, false); + // Show that the key is no longer available + m_leSearch->setText(fpr); + m_owner->Search(); +} + +void KeyringIO::ShowPopupCreate() +{ + if (m_popupCreate == NULL) + { + m_popupCreate = new PopupCreate(m_btnCreate, m_tmwMessage); + m_popupCreate->Create(); + m_popupCreate->GetApplyButton()->clicked().connect(this, &KeyringIO::DoCreateKey); + } + m_popupCreate->show(); +} + +void KeyringIO::DoCreateKey() +{ + if (!m_popupCreate->Validate()) + return; + Error e; + GpgME::Key k; + GpgMEWorker gpgw; + if (m_popupCreate->UseDefaultEngineAlgorithms()) + { + e = gpgw.CreateKeyWithEngineDefaultAlgo(k, m_popupCreate->GetName().toUTF8(), + m_popupCreate->GetEmail().toUTF8(), + m_popupCreate->GetComment().toUTF8(), + m_popupCreate->GetPassphrase().toUTF8(), + m_popupCreate->GetExpiry()); + } + else + { + e = gpgw.CreateKey(k, m_popupCreate->GetName().toUTF8(), + m_popupCreate->GetEmail().toUTF8(), + m_popupCreate->GetComment().toUTF8(), + m_popupCreate->GetArbitraryKeyAlgo().toUTF8().c_str(), + m_popupCreate->GetPassphrase().toUTF8(), + m_popupCreate->GetExpiry()); + // GPGME accepts a missing subkey. + if (e.code() == 0 && !m_popupCreate->GetArbitrarySubkeyAlgo().empty()) + e = gpgw.CreateSubKey(k, + m_popupCreate->GetArbitrarySubkeyAlgo().toUTF8().c_str(), + m_popupCreate->GetPassphrase().toUTF8(), + m_popupCreate->GetExpiry()); + } + if (e.code() != 0) + { + m_tmwMessage->SetText(e.asString()); + } + else + { + const WString fpr(k.primaryFingerprint()); + m_tmwMessage->SetText(TR("CreateSuccess") + + fpr + WString(" - ") + WString(k.userID(0).name())); + // Add the key fingerprint to the list of keys managed by the user. + m_config->UpdateSecretKeyOwnership(fpr, true); + m_popupCreate->hide(); +#ifndef DEVTIME + m_popupCreate->Reset(); +#endif + m_leSearch->setText(fpr); + m_owner->Search(); + } +} diff --git a/KeyringIO.h b/KeyringIO.h new file mode 100644 index 0000000..887a891 --- /dev/null +++ b/KeyringIO.h @@ -0,0 +1,96 @@ +/* + * File: KeyringIO.h + * Author: SET - nmset@yandex.com + * License : GPL v2 + * Copyright SET - © 2019 + * + * Created on November 13, 2020, 6:46 PM + */ + +#ifndef KEYRINGIO_H +#define KEYRINGIO_H + +#include "K7Main.h" +#include +#include "PopupUploader.h" +#include "PopupDeleter.h" +#include "PopupCreate.h" + +using namespace Wt; + +class K7Main; + +/** + * Manages the keyring : import, create and delete keys. + * Is a pseudo-extension of K7Main. Both classes are friends to each other, and + * everything is private here. + * Does not edit keys. + * @param owner + */ +class KeyringIO : public WObject +{ + friend class K7Main; +public: + +private: + KeyringIO(K7Main * owner); + virtual ~KeyringIO(); + + K7Main * m_owner; + PopupUpload * m_popupUpload; + PopupDelete * m_popupDelete; + PopupCreate * m_popupCreate; + + // Variables from m_owner mapped here. + AppConfig * m_config; + TransientMessageWidget * m_tmwMessage; + WPushButton * m_btnUpload; + WPushButton * m_btnImport; + WPushButton * m_btnDelete; + WPushButton * m_btnCreate ; + WLineEdit * m_leSearch; + + + /** + * Shows a non-blocking popup to upload a key, + * with forward confirmation for upload. + */ + void ShowPopupUpload(); + /** + * Actually import the uploaded file. + */ + void DoImportKey(); + /** + * Shows a non-blocking popup to delete a key + */ + void ShowPopupDelete(); + /** + * All public keys can be deleted. + * Private keys can be deleted only if the user + * manages that key, as declared in the configuration file. + * @param fullKeyID + * @return + */ + bool CanKeyBeDeleted(const WString& fullKeyID); + /** + * Actually delete the key, with forward confirmation in the popup. + */ + void DoDeleteKey(); + /** + * Shows a non-blocking popup to create keys. + */ + void ShowPopupCreate(); + /** + * Validates input and creates the keys. + */ + void DoCreateKey(); + /** + * Shows a button to import an uploaded key + * @param spool + */ + void OnUploadCompleted(const WString& spool); + +}; + +#endif /* KEYRINGIO_H */ + diff --git a/nbproject/Makefile-ARM-Release.mk b/nbproject/Makefile-ARM-Release.mk index fac73e3..b4e47a5 100644 --- a/nbproject/Makefile-ARM-Release.mk +++ b/nbproject/Makefile-ARM-Release.mk @@ -40,6 +40,7 @@ OBJECTFILES= \ ${OBJECTDIR}/GpgMEWorker.o \ ${OBJECTDIR}/K7Main.o \ ${OBJECTDIR}/KeyEdit.o \ + ${OBJECTDIR}/KeyringIO.o \ ${OBJECTDIR}/LoopbackPassphraseProvider.o \ ${OBJECTDIR}/PopupCertifyUserId.o \ ${OBJECTDIR}/PopupCreate.o \ @@ -101,6 +102,11 @@ ${OBJECTDIR}/KeyEdit.o: KeyEdit.cpp ${RM} "$@.d" $(COMPILE.cc) -O2 -s -DLARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -I/usr/local/Wt/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyEdit.o KeyEdit.cpp +${OBJECTDIR}/KeyringIO.o: KeyringIO.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -O2 -s -DLARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 -I/usr/local/Wt/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyringIO.o KeyringIO.cpp + ${OBJECTDIR}/LoopbackPassphraseProvider.o: LoopbackPassphraseProvider.cpp ${MKDIR} -p ${OBJECTDIR} ${RM} "$@.d" diff --git a/nbproject/Makefile-Debug.mk b/nbproject/Makefile-Debug.mk index 9b2653a..2e44454 100644 --- a/nbproject/Makefile-Debug.mk +++ b/nbproject/Makefile-Debug.mk @@ -40,6 +40,7 @@ OBJECTFILES= \ ${OBJECTDIR}/GpgMEWorker.o \ ${OBJECTDIR}/K7Main.o \ ${OBJECTDIR}/KeyEdit.o \ + ${OBJECTDIR}/KeyringIO.o \ ${OBJECTDIR}/LoopbackPassphraseProvider.o \ ${OBJECTDIR}/PopupCertifyUserId.o \ ${OBJECTDIR}/PopupCreate.o \ @@ -101,6 +102,11 @@ ${OBJECTDIR}/KeyEdit.o: KeyEdit.cpp ${RM} "$@.d" $(COMPILE.cc) -g -DDEVTIME -I/usr/local/Wt-Debug/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyEdit.o KeyEdit.cpp +${OBJECTDIR}/KeyringIO.o: KeyringIO.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -g -DDEVTIME -I/usr/local/Wt-Debug/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyringIO.o KeyringIO.cpp + ${OBJECTDIR}/LoopbackPassphraseProvider.o: LoopbackPassphraseProvider.cpp ${MKDIR} -p ${OBJECTDIR} ${RM} "$@.d" diff --git a/nbproject/Makefile-Release.mk b/nbproject/Makefile-Release.mk index a985b53..7dc8d1b 100644 --- a/nbproject/Makefile-Release.mk +++ b/nbproject/Makefile-Release.mk @@ -40,6 +40,7 @@ OBJECTFILES= \ ${OBJECTDIR}/GpgMEWorker.o \ ${OBJECTDIR}/K7Main.o \ ${OBJECTDIR}/KeyEdit.o \ + ${OBJECTDIR}/KeyringIO.o \ ${OBJECTDIR}/LoopbackPassphraseProvider.o \ ${OBJECTDIR}/PopupCertifyUserId.o \ ${OBJECTDIR}/PopupCreate.o \ @@ -101,6 +102,11 @@ ${OBJECTDIR}/KeyEdit.o: KeyEdit.cpp ${RM} "$@.d" $(COMPILE.cc) -O2 -s -I/usr/local/Wt/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyEdit.o KeyEdit.cpp +${OBJECTDIR}/KeyringIO.o: KeyringIO.cpp + ${MKDIR} -p ${OBJECTDIR} + ${RM} "$@.d" + $(COMPILE.cc) -O2 -s -I/usr/local/Wt/include -I/usr/include/gpgme++ -MMD -MP -MF "$@.d" -o ${OBJECTDIR}/KeyringIO.o KeyringIO.cpp + ${OBJECTDIR}/LoopbackPassphraseProvider.o: LoopbackPassphraseProvider.cpp ${MKDIR} -p ${OBJECTDIR} ${RM} "$@.d" diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml index ef2a819..4e180ff 100644 --- a/nbproject/configurations.xml +++ b/nbproject/configurations.xml @@ -9,6 +9,7 @@ GpgMEWorker.h K7Main.h KeyEdit.h + KeyringIO.h LoopbackPassphraseProvider.h PopupCertifyUserId.h PopupCreate.h @@ -36,6 +37,7 @@ GpgMEWorker.cpp K7Main.cpp KeyEdit.cpp + KeyringIO.cpp LoopbackPassphraseProvider.cpp PopupCertifyUserId.cpp PopupCreate.cpp @@ -58,17 +60,6 @@ kind="IMPORTANT_FILES_FOLDER"> Makefile - - - - Makefile - Makefile @@ -121,6 +112,10 @@ + + + + @@ -229,6 +224,10 @@ + + + + @@ -341,6 +340,10 @@ + + + +